1
0

2 Коммиты 3936841f9a ... e7a077f86a

Автор SHA1 Сообщение Дата
  zw996 e7a077f86a zuoye 1 год назад
  zw996 89b97e0dcd zuoye 1 год назад

+ 3 - 1
commit.bat

@@ -1,3 +1,5 @@
 git add *
 git commit -m "zuoye"
-git push -u origin master
+git push -u origin master
+zw996
+52zhangmiao1314

BIN
day05/aiapp/dev/__pycache__/camera.cpython-38.pyc


+ 52 - 20
day05/aiapp/dev/camera.py

@@ -1,29 +1,61 @@
-from PyQt5.QtCore import QThread
+from PyQt5.QtCore import QThread    # 引入多线程,设备是多个,一个设备一个任务
+
 import cv2
+
+# from cv2 import VideoCapture
+
+
+
+# 1. 定义信号(引入)
+
+from PyQt5.QtCore import pyqtSignal
+
+
+
 class CameraDev(QThread):
+
+    # 定义信号(定义)
+
+    sig_video = pyqtSignal(bytes, int, int, int)  # 信号传递的数据(图像的二进制数据,字节序列(bytes), 图像高度int,宽度int,通道数int)
+
     def __init__(self):
+
         super(CameraDev, self).__init__()
-        # 1.打开摄像头
-        self.camera = cv2.VideoCapture(0,cv2.CAP_DSHOW)  #摄像头编号从0开始
-        self.isSave = False
+
+        # 开始视频抓取的任务初始化
+
+        # 初始化摄像头
+
+        self.cam = cv2.VideoCapture(
+
+            0, # 摄像头的编号,从0
+
+            cv2.CAP_DSHOW # 视频的处理调用DirectX 3D (DirectShow)
+
+        )
+
 
 
-    #线程的任务
     def run(self):
-        #摄像头的操作
-        # 1.打开摄像头
+
+        # 设备线程的任务,run结束,则任务结束
+
         while True:
-            # 2.循环抓取视频帧
-            status,img = self.camera.read()
-            print(status,img.shape)
+
+            # 反复抓取视频处理
+
+            # print("设备准备工作!")
+
+            status, img = self.cam.read()  # 从摄像头读取图像
+
             if status:
-                img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR)
-                if not self.isSave:
-                    cv2.imwrite("2.jpg",img)
-                    self.isSave = True
-
-            # 3.显示到窗体
-            print("视频处理")
-            QThread.usleep(100000)
-        #self.camera.close() #关闭摄像头
-        #self.camera.release() #释放设备
+
+                # print(img.shape)
+
+                # 显示图像
+
+                # 2. 发送信号
+
+                self.sig_video.emit(img.tobytes(), img.shape[0], img.shape[1], img.shape[2])
+
+            QThread.usleep(100000)  # 1000000微秒 = 1秒

BIN
day05/aiapp/frame/__pycache__/app.cpython-38.pyc


BIN
day05/aiapp/frame/__pycache__/win.cpython-38.pyc


+ 3 - 5
day05/aiapp/frame/app.py

@@ -1,10 +1,8 @@
 from PyQt5.QtWidgets import QApplication
-from aiapp.frame.win import Win
-#from monitor.form.win import Win
+from frame.win import Win
 class App(QApplication):
     def __init__(self):
         super(App,self).__init__([])   #调用父类构造器,完成初始化
         self.win = Win()
-        self.win.resize(500, 500)
-        self.win.show()
-
+        #self.win.resize(500, 500)
+        self.win.show()

+ 62 - 9
day05/aiapp/frame/win.py

@@ -1,20 +1,73 @@
-from PyQt5.QtWidgets import  QDialog
+from PyQt5.QtWidgets import QDialog
 
-from aiapp.ui.jiankong_ui import Ui_Dialog
-from aiapp.dev.camera import CameraDev
+from PyQt5.QtGui import QImage  # ,QPxmap
 
-class Win(QDialog):   #w我们实现的win扩展QDialog(新增,重载与覆盖over load)
-    def __init__(self):   #构造器
-        #完成数据初始化(类的实例化:对象)
-        #pass    #空语言(ui对象化)
-        super(Win, self).__init__()
+from PyQt5.QtGui import QPixmap
+
+# 引入
+
+from ui.jiankong_ui import Ui_Dialog
+
+from dev.camera import CameraDev
+
+
+class Win(QDialog):  # 扩展QDialog(新增,覆盖功能)
+
+    def __init__(self):  # 实现构造器(完成初始化,数据初始化,功能初始化)
+
+        super(Win, self).__init__()  # 调用父类构造器
+
+        # 调用ui
+
+        # 创建对象
 
         self.ui = Ui_Dialog()
 
-        # 把ui绑定在Win对话框上面
+        # 关联ui到当前窗体
 
         self.ui.setupUi(self)
 
+        # 创建一个设备对象
+
         self.dev = CameraDev()
 
+        # 启动设备线程工作
+
         self.dev.start()
+
+        # 3. 绑定信号与槽。
+
+        self.dev.sig_video.connect(self.showVideo)
+
+    # 3. 定义槽(Slot)函数 (Qt技术:信号与槽),一定与信号同型
+
+    def showVideo(self, data, h, w, c):
+        # print("(",h, ",", w, ",",c, ")")  # python格式字符串
+
+        # 1. 使用data,h, w, c创建QImage
+
+        q_img = QImage(
+
+            data,  # 图像的字节数组
+
+            w,  # 图像宽度
+
+            h,  # 图像高度
+
+            w * c,  # 图像每行字节数
+
+            QImage.Format_BGR888  # 图像格式BGR,每个通道8个bit,1个字节
+
+        )
+
+        # 2. 使用QImage创建QPixmap
+
+        pix_img = QPixmap.fromImage(q_img)  # 自动从QImage转换为QPixmap,QLabel只支持QPixmap格式
+
+        # 3. 显示QLabel:lblVideo
+
+        self.ui.label.setPixmap(pix_img)
+
+        # 4 适当的缩放
+
+        self.ui.label.setScaledContents(True)

+ 1 - 1
day05/aiapp/main.py

@@ -1,4 +1,4 @@
-from aiapp.frame.app import App
+from frame.app import App
 
 # pyuic5 -o monitor_ui.py monitor.ui
 # -o表示输出