基于人脸识别的课堂签到管理系统(二)---摄像头显示
一.前言概述摄像头显示创建摄像头操作类:完成摄像头的采集功能当需要摄像头完成一个功能时,就调用摄像头对象的一个函数去完成实现一个摄像头类:添加打开摄像头获取摄像头的实时数据数据进行转换提供给界面界面类:添加显示画面到界面中显示画面需要循环一直显示需要定时器进行定时,定时时间到达就产生信号,关联上一个槽函数,当信号调用时就会主动调用槽函数;在qt中存在一个机制:信号可以关联上另一个函数,另一个函数会
一.前言概述
摄像头显示
创建摄像头操作类:完成摄像头的采集功能
当需要摄像头完成一个功能时,就调用摄像头对象的一个函数去完成
实现一个摄像头类:
添加
打开摄像头
获取摄像头的实时数据
数据进行转换提供给界面
界面类:
添加
显示画面到界面中
显示画面需要循环一直显示
需要定时器进行定时,定时时间到达就产生信号,关联上一个槽函数,当信号调用时就会主动调用槽函数;
在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)
四.相关下载

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)