天天看點

基于人臉識别的課堂簽到管理系統(二)---攝像頭顯示一.前言概述二. 攝像頭顯示三.時間顯示四.相關下載下傳

一.前言概述

攝像頭顯示

建立攝像頭操作類:完成攝像頭的采集功能

當需要攝像頭完成一個功能時,就調用攝像頭對象的一個函數去完成

實作一個攝像頭類:

添加

打開攝像頭

擷取攝像頭的實時資料

資料進行轉換提供給界面

界面類:

添加

顯示畫面到界面中

顯示畫面需要循環一直顯示

需要定時器進行定時,定時時間到達就産生信号,關聯上一個槽函數,當信号調用時就會主動調用槽函數;

在qt中存在一個機制:信号可以關聯上另一個函數,另一個函數會在産生這個對應的信号的時候就會調用-----信号槽機制

在元件中存在一些特定的信号,當元件執行某個操作的時候,這時對應的信号就會被激活(信号産生)

由于信号(如點選),可能執行的功能是不一樣的,信号關聯一個槽函數,信号産生會執行槽函數完成功能的執行

需要指定信号與槽函數的關聯,信号要去執行的功能是什麼信号對象.信号.connect(函數)

時間顯示

二. 攝像頭顯示

建立一個python檔案取名cameravideo

基于人臉識别的課堂簽到管理系統(二)---攝像頭顯示一.前言概述二. 攝像頭顯示三.時間顯示四.相關下載下傳

讀取攝像頭操作

def read_camera(self):
        ret,data = self.capture.read()
        if not ret:
            print("擷取攝像頭資料失敗")
            return None
        return data
           

把資料轉換成界面能顯示的資料格式

def camera_to_pic(self):
        pic = self.read_camera()
        #攝像頭按BGR存儲,需要轉換為RGB格式
        #調用函數cvtColor,其完成後才是RGB格式的畫面資料
        self.currentframe = cv2.cvtColor(pic,cv2.COLOR_BGR2RGB)
        #設定寬高
        #self.currentframe = cv2.cvtColor(self.currentframe,(640,480))

        #轉換格式(界面能夠顯示的格式)
        #擷取畫面的寬度與高度
        height,width = self.currentframe.shape[:2]
        #先轉換成QImage類型的圖型/畫面,建立QImage類對象,使用攝像頭的畫面資料
        #QImage(data,width,height,format)建立:資料,寬度,高度
        qimg = QImage(self.currentframe,width,height,QImage.Format_RGB888)
        qpixmap = QPixmap.fromImage(qimg)
        return qpixmap
           

關閉攝像頭

#攝像頭關閉
    def close_camera(self):
        self.capture.release()
           

作為攝像頭,擷取資料,顯示畫面的功能

def show_cameradata(self):
        # 擷取攝像頭資料,轉換資料
        pic = self.cameravideo.camera_to_pic()
        # 顯示資料,顯示畫面
        self.label.setPixmap(pic)
           

隻要能夠不斷重複調用這個函數,從攝像頭擷取資料進行顯示

可以通過信号,信号關聯目前函數,隻要信号産生,函數就不斷被調用

信号需要不斷産生,可以通過定時器,定時時間到達就會産生信号

是以這裡要使用指令關聯對象

self.actionopen.triggered.connect(self.on_actionopen)
 self.actionclose.triggered.connect(self.on_actionclose)
           
基于人臉識别的課堂簽到管理系統(二)---攝像頭顯示一.前言概述二. 攝像頭顯示三.時間顯示四.相關下載下傳

這裡解釋下actionopen,actionclose是我之前在視窗設計中填寫中文前,所填寫的資訊

基于人臉識别的課堂簽到管理系統(二)---攝像頭顯示一.前言概述二. 攝像頭顯示三.時間顯示四.相關下載下傳

建立對應的啟動簽到函數

def on_actionopen(self):
        print("on_actionopen")
        #啟動攝像頭
        self.cameravideo = camera()
        #啟動定時器,進行定時,每隔多長時間進行一次擷取攝像頭資料進行顯示
        self.timeshow = QTimer(self)
        self.timeshow.start(10)
        #10毫秒的定時器啟動,每隔10毫秒就會産生一個信号timeout
        self.timeshow.timeout().connect(self.show_cameradata)
           

建立關閉簽到函數

def on_actionclose(self):
        print("on_actionclose")
        #關閉攝像頭
        self.cameravideo.close_camera()
        #關閉定時器,不再擷取攝像頭資料進行顯示
        self.timeshow.stop()
        self.label.setText("攝像頭畫面顯示")
           

三.時間顯示

這裡我還不會設定動态時間,隻能夠讀取目前時間日期并進行設定

#擷取日期
        date = QDate.currentDate()
        print(date)
        self.dateEdit.setDate(date)
        #擷取時間
        time = QTime.currentTime()
        print(time)
        self.timeEdit.setTime(time)
        #擷取日期
        datatime = QDateTime.currentDateTime()
        print(datatime)
           
基于人臉識别的課堂簽到管理系統(二)---攝像頭顯示一.前言概述二. 攝像頭顯示三.時間顯示四.相關下載下傳

四.相關下載下傳

代碼下載下傳:Face_Recognition_Project_2.zip。