Python 3. Python pyqt5 opencv 摄像头软件 相机 软件 有录像保存视频,保存图片,识别人脸位置功能
疫情期间的闭门造车工程,借此机会初入图像领域
一直打算边学图像,边做一个图像学习的软件,但是越来越发现没有必要,因为感觉程序直接裸跑验证就行了,没有必要封装成一个软件,于是删减删减删减,精简功能后达到下图效果,源码下图有,自己配好环境可以运行,工程文件打包后期上传
功能简述:
1.打开相机,显示相机图像
2.关闭相机显示
3.保存录像
4.截屏当前视频,保存图片
5.识别视频中的人脸位置画上方框
环境陈述(默认开发环境已配好):
开发系统:Linux
运行系统:Linux,Windows10
开发软件:Python3,Qt designer ,pycharm
打包工具:pyinstaller
打包环境:win10
程序工程文件夹:
打包后的运行环境:
其中image1和output是运行产生的,其他为依赖文件
工程建立,等等流程同https://blog.csdn.net/qq_36071362/article/details/104170846,不做具体记录,只记录注意事项
1.依赖文件打包:打包后找齐依赖文件和exe放在同一个目录下,可以打包时一起加入(修改spec文件),但是一般不这么干, 试了试没成功
2.依赖文件:需要人脸识别器,pic1是相机初始图片,。。。dll为OpenCV保存视频必须的,位置在opencv的安装路径中,否则 AVI视频不能正常保存
3.录像计时不准,随便诌了一个,,懒得找了
4.打包指令:pyinstaller --hidden-import=PyQt5 -w -F cam_minisoft_ser.py -p cam_minisoft_ser.py
下面贴出服务函数源码
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMessageBox
from cam_minisoft import Ui_Form
from PyQt5.QtWidgets import QApplication, QMainWindow, QGridLayout
from PyQt5.QtCore import QTimer, QCoreApplication
import numpy as np
from PyQt5.QtGui import QPixmap
import sys
import cv2
import qimage2ndarray
import time
cap = cv2.VideoCapture(0)
g_img = cv2.imread('pic1.PNG')face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))class Pyqt5_cam(QtWidgets.QWidget, Ui_Form): # 创建画板,继承自FigureCanvas类def __init__(self):super(Pyqt5_cam, self).__init__()self.setupUi(self)self.init()self.setWindowTitle("MLW_Cam")self.Timer = QTimer()self.Timer.timeout.connect(self.DispImg)# self.Timer.start(1)self.s_flag = 0self.count_time = 0self.start_time = 0self.all_time = 0# 显示"打开摄像头"前的图像global g_imgg_img = cv2.cvtColor(g_img, cv2.COLOR_BGR2RGB)qimg = qimage2ndarray.array2qimage(g_img)self.DispLb.setPixmap(QPixmap(qimg))self.DispLb.show()# 把按钮等控件和函数对应起来def init(self):# 串口检测按钮self.button1.clicked.connect(self.start_cam)self.button2.clicked.connect(self.close_cam)self.button3.clicked.connect(self.save_video)self.button4.clicked.connect(self.stop_save_video)self.button5.clicked.connect(self.save_pic)def start_cam(self):# 重新打开摄像头cap.open(0)self.Timer.start(1)def close_cam(self):# 关闭摄像头cap.release()self.count_time = 0self.Timer.stop()self.all_time = 0def save_video(self):if self.count_time > 0: # 相机打开后才能录像self.s_flag = 1self.state_label.setText(" 正在录像:")self.count_time = 0def stop_save_video(self):if self.s_flag == 1:self.s_flag = 0self.state_label.setText(" 录像停止")def save_pic(self):sucess, g_img = cap.read()cv2.imwrite("image1.jpg", g_img)def DispImg(self):global g_imgself.count_time += 1if self.count_time >= 6000:self.count_time = 0sucess, g_img = cap.read()# success, g_img = self.camera.read()# cv2.imshow('img', g_img)gray = cv2.cvtColor(g_img, cv2.COLOR_BGR2GRAY)# 绘制人脸周围的矩形faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5)for (x, y, w, h) in faces:g_img = cv2.rectangle(g_img, (x, y), (x+w, y+h), (255, 0, 0), 2)# 显示计时时间if self.s_flag == 1:out.write(g_img)if self.count_time >= 23:self.all_time += 1self.count_time = 0self.state_label_2.setText(str(self.all_time))g_img = cv2.cvtColor(g_img, cv2.COLOR_BGR2RGB)qimg = qimage2ndarray.array2qimage(g_img)self.DispLb.setPixmap(QPixmap(qimg))self.DispLb.show()if __name__ == '__main__':app = QtWidgets.QApplication(sys.argv) # 实例化一个应用对象myshow = Pyqt5_cam()myshow.show() # 让控件在桌面上显示出来。控件在内存里创建,之后才能在显示器上显示出来。sys.exit(app.exec_()) # 程序一直循环运行到主窗口被关闭
下面贴出ui文件转换完的py文件
# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'cam_minisoft.ui'
#
# Created by: PyQt5 UI code generator 5.5.1
#
# WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.resize(983, 892)self.button3 = QtWidgets.QPushButton(Form)self.button3.setGeometry(QtCore.QRect(370, 840, 81, 33))self.button3.setObjectName("button3")self.button1 = QtWidgets.QPushButton(Form)self.button1.setGeometry(QtCore.QRect(40, 840, 81, 33))self.button1.setObjectName("button1")self.button2 = QtWidgets.QPushButton(Form)self.button2.setGeometry(QtCore.QRect(140, 840, 81, 33))self.button2.setObjectName("button2")self.button5 = QtWidgets.QPushButton(Form)self.button5.setGeometry(QtCore.QRect(840, 840, 111, 33))self.button5.setObjectName("button5")self.DispLb = QtWidgets.QLabel(Form)self.DispLb.setGeometry(QtCore.QRect(30, 30, 921, 791))self.DispLb.setText("")self.DispLb.setScaledContents(True)self.DispLb.setObjectName("DispLb")self.button4 = QtWidgets.QPushButton(Form)self.button4.setGeometry(QtCore.QRect(470, 840, 81, 33))self.button4.setObjectName("button4")self.state_label = QtWidgets.QLabel(Form)self.state_label.setGeometry(QtCore.QRect(560, 839, 71, 31))self.state_label.setObjectName("state_label")self.state_label_2 = QtWidgets.QLabel(Form)self.state_label_2.setGeometry(QtCore.QRect(630, 840, 31, 31))self.state_label_2.setText("")self.state_label_2.setObjectName("state_label_2")self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate = QtCore.QCoreApplication.translateForm.setWindowTitle(_translate("Form", "Form"))self.button3.setText(_translate("Form", "开始录像"))self.button1.setText(_translate("Form", "打开相机"))self.button2.setText(_translate("Form", "关闭相机"))self.button5.setText(_translate("Form", "保存图片"))self.button4.setText(_translate("Form", "停止录像"))self.state_label.setText(_translate("Form", "未在录像"))
Python 3. Python pyqt5 opencv 摄像头软件 相机 软件 有录像保存视频,保存图片,识别人脸位置功能相关推荐
- 用Python写了一个获取摄像头照片的软件
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:blog.csdn.net/qq_50216270/article/details/ ...
- 用 Python 写了一个窃取摄像头照片的软件
大家好,今天教大家用 Python 做一个属于自己的窃取摄像头照片的软件. 需要安装python3.5以上版本,在官网下载即可. 安装库opencv-python,安装方式为打开终端输入命令行. 可以 ...
- 大恒水星相机+opencv4.0.1保存视频
最近项目上需要做一个保存相机视频的功能,手头上刚好有一个大恒130W分辨率的黑白水星相机.因此,就用该摄像机结合opencv实现了该功能. 准备工作: 1.OpenCV:版本4.0.1 2.大恒水星相 ...
- opencv的VideoWriter类及参数用于保存视频
VideoWriter 说明 参数 例子 例一:修改视频的分辨率 例二:在视频的指定区域画圆 例三:对彩色图像的每个通道单独进行处理 错误的情况 1.图片的分辨率大小 2.路径 说明 要使用OpenC ...
- PYQT5+openCV项目实战:微循环仪图片、视频记录和人工对比软件(附源码)
文章目录 1.主要功能 1.1主界面说明 1.2回查记录界面说明 2.主界面功能详解 2.1 摄像头操作 2.2拍照功能 2.3保存图片 2.4录制短视频 2.5查看记录 2.6新建名称 3.子界面功 ...
- opencv基本操作二(读取视频流与保存视频、读取摄像头并保存视频)
opencv基本操作二 要点 代码 例程一 例程二 要点 opencv常用读视频函数 cv2.VideoCapture .cv2.VideoCapture.get 等,可以参考这里 opencv常用写 ...
- OpenCV可移植图形工具HighGUI实现图像和视频操作
OpenCV把用于操作系统.文件系统以及摄像机等硬件设备交换的函数纳入了HighGUI(High-level Graphical User Interface)模块中.有了HighGUI模块,我们可以 ...
- 【OpenCV人脸识别2】从视频中检测人脸
分为两步: 从视频中识别人脸和人的眼睛 从视频中检测人脸.眼睛.鼻子.嘴巴 1.从视频中识别人脸和人的眼睛 关于视频的操作,主要如下: 定义摄像头->打开摄像头->读取视频帧->转而 ...
- 拍照识别文字的软件哪个好?分享三个照片识别文字工具给你
在日常生活中,大家是不是经常遇到需要拍照识别转文字的工作呀.我猜很多小伙伴都会抱怨这个工作会很累.而且完成难度比较大吧.其实我们可以使用一些可以拍照扫描文字识别的软件来帮助我们提高工作效率.那么,拍照 ...
- 用 Python 和 OpenCV 来测量相机到目标的距离
用 Python 和 OpenCV 来测量相机到目标的距离 http://python.jobbole.com/84378/ 几天前,一个叫 Cameron 的 PyImageSearch 读者发来邮 ...
最新文章
- python写web难受-(2017)你最不建议使用的Python Web框架?
- .NET仓储模式高级用例
- java读取frp_【原创】FRP初探(函数式编程部分)
- windows xp安装php7,在Windows XP下安装Apache+MySQL+PHP环境
- [蓝桥杯2016决赛]阶乘位数-数论
- (王道408考研数据结构)第二章线性表-第三节1:单链表的定义及其操作(插入和删除,建立之尾插和头插)
- 通达信公式转python为什么很难_转行数据分析为什么这么难?
- 基于内容的视频语义标注(一)——视频标注的三种方法和不同层次划分标注
- Unity3D基础42:AnyState大法
- Python读取csv数据文件,并按照指定比例划分为机器学习使用的训练集和测试集
- 测试方案的设计及模板
- 华为ensp模拟器实现通信安全(交换机配置vlan)
- 博世BMI160驱动程序 C语言编程,如何使用PSoC 6制作完整的测试系统来与BMI160进行通话...
- 谷歌gmail注册入口_如何阻止Gmail将事件添加到Google日历
- 分割视频的方法有哪些?
- DVD刻录机的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 基于ssh的后台新闻管理系统
- 《深入浅出通信原理》辅助笔记
- du和df文件大小不一致问题排查
- SpringBoot 轻松搞定数据验证 (二)