正点原子IMX6ULL阿尔法USB摄像头的远程调用(四)Python的实现

话不多说,先上界面:在这里插入图片描述
前情提示:做这个例子,需要USB摄像头已经调好了,同时电脑上已经安好了python、pyqt5、opencv等,下面演出开始吧。。。。直接上代码:

源代码直接上

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'F:\源代码\video.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QIcon, QPixmap, QPainter, QPen
from PyQt5.QtWidgets import *
import threading
from threading import *
import sys
import cv2
import requests
import numpy as np
from PyQt5.Qt import Qt
import time
class Ui_video(object):
    def setupUi(self, video):
        video.setObjectName("video")
        video.resize(1200, 788)
        self.label = QtWidgets.QLabel(video)
        self.label.setGeometry(QtCore.QRect(0, -2, 1200, 788))
        self.label.setText("")
        self.label.setObjectName("label")
        pixmap = QPixmap('2.png')
        self.label.setPixmap(pixmap)
        self.label.setScaledContents (True)
        self.groupBox = QtWidgets.QGroupBox(video)
        self.groupBox.setGeometry(QtCore.QRect(40, 50, 1120, 688))
        font = QtGui.QFont()
        font.setPointSize(10)
        self.groupBox.setFont(font)
        self.groupBox.setObjectName("groupBox")
        self.pushButton = QtWidgets.QPushButton(self.groupBox)
        self.pushButton.setGeometry(QtCore.QRect(840, 490, 200, 48))
        font = QtGui.QFont()
        font.setPointSize(10)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.groupBox)
        self.pushButton_2.setGeometry(QtCore.QRect(840, 230, 200, 50))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_4 = QtWidgets.QPushButton(self.groupBox)
        self.pushButton_4.setGeometry(QtCore.QRect(840, 360, 200, 50))
        self.pushButton_4.setObjectName("pushButton_4")
        self.label_2 = QtWidgets.QLabel(self.groupBox)
        self.label_2.setGeometry(QtCore.QRect(58, 80, 300, 50))
        self.label_2.setObjectName("label_2")
        self.lineEdit = QtWidgets.QLineEdit(self.groupBox)
        self.lineEdit.setGeometry(QtCore.QRect(370, 80, 400, 48))
        self.lineEdit.setObjectName("lineEdit")
        self.pushButton_5 = QtWidgets.QPushButton(self.groupBox)
        self.pushButton_5.setGeometry(QtCore.QRect(840, 80, 200, 50))
        self.pushButton_5.setObjectName("pushButton_5")
        self.label_3 = QtWidgets.QLabel(self.groupBox)
        self.label_3.setGeometry(QtCore.QRect(50, 160, 738, 500))
        self.label_3.setText("")
        self.label_3.setObjectName("label_3")

        self.retranslateUi(video)
        self.pushButton.clicked.connect(self.pushButtonClick)
        self.pushButton_2.clicked.connect(self.pushButton_2Click)
        self.pushButton_4.clicked.connect(self.pushButton_4Click)
        self.pushButton_5.clicked.connect(self.pushButton_5Click)
        self.Video1=''
        self.flag=1
        self.flag0=1
        QtCore.QMetaObject.connectSlotsByName(video)

    def retranslateUi(self, video):
        _translate = QtCore.QCoreApplication.translate
        video.setWindowTitle(_translate("video", "IMX6ULL摄像头传输"))
        video.setWindowIcon(QIcon('1.png'))
        self.groupBox.setTitle(_translate("video", "数据处理区"))
        self.pushButton_2.setText(_translate("video", "视频接收"))
        self.pushButton_4.setText(_translate("video", "视频断开"))
        self.label_2.setText(_translate("video", "请输入IMX6ULL的IP地址:"))
        self.pushButton_5.setText(_translate("video", "连    接"))
        self.pushButton.setText(_translate("video", "关闭窗口"))
    def ShowVideo(self):
        Video1=self.Video1
        #Video1='192.168.0.102'
        print(Video1)
        while self.flag == 1:
            url1 = 'http://' + Video1 + ':8080/?action=snapshot'
            try:
                if self.flag0==1:
                    req = requests.get(url1).content
                    print('222')
                    pix = QPixmap()
                    pix.loadFromData(req)
                    image = np.asarray(bytearray(req), dtype="uint8")
                    img = cv2.imdecode(image, cv2.IMREAD_COLOR)
                    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
                    print('333')
                    classifier = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
                    print('444')
                    result = classifier.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3)
                    a = len(result)
                    print(a)
                    if len(result) > 0:
                        painter = QPainter(pix)
                        pen = QPen(Qt.red, 2)
                        painter.setPen(pen)
                        face_num = len(result)
                        for i in range(face_num):
                            x = int(result[i][0])
                            y = (result[i][1])
                            width = (result[i][2])
                            height = (result[i][3])
                            painter.drawRect(x, y, width, height)
                            painter.drawText(x, y, "People")
                        painter.end()
                else:
                    pix=QPixmap('1.jpg')
                    print('000')
            except:
                print('999')
                break
            self.label_3.setPixmap(pix)  
            self.label_3.setScaledContents (True)
            time.sleep(0.5)
    def Video(self):
        try:
            Video_thread = Thread(target=self.ShowVideo)
            Video_thread.setDaemon(True)
            self.flag=1
            self.flag0=1
            Video_thread.start()  # 启动线程
        except Exception as e:
            print(e)
    def pushButtonClick(self):
        video.close()
    def pushButton_2Click(self):
        self.Video()
    def pushButton_4Click(self):
        self.flag=0
        self.ShowVideo()

    def pushButton_5Click(self):
        self.Video1=self.lineEdit.text()
        if len(self.Video1)==0:
            QtWidgets.QMessageBox.information(video, "信息提示", "视频IP不能为空!")
        else:
            self.flag=0
            QtWidgets.QMessageBox.information(video, "信息提示", "连接成功,可以正常操作。")

    
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    video = QtWidgets.QWidget()
    ui = Ui_video()
    ui.setupUi(video)
    video.show()
    sys.exit(app.exec_())


效果图直接上

在这里插入图片描述
代码中有好多不规范的地方,上图中也应该是人脸检测,见谅。。。。不多做解释了,下次是一起一点一点做界面呢。。。。还是上带口罩检测呢。。。。再说吧,先玩儿会去。。。。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: imx6ull核心板是一款基于NXP公司的i.MX6ULL系列处理器的嵌入式开发板。它具有稳定可靠、性能强劲的特点,适用于物联网、工业控制、智能家居等领域的应用。 首先,imx6ull核心板包括了处理器模块和扩展模块两部分。处理器模块采用了NXP i.MX6ULL处理器,具备高性能、低功耗的特点。扩展模块则提供了丰富的外设接口,包括USB、以太网、串口等,方便用户进行各种外部设备的连接和扩展。 其次,imx6ull核心板提供了全面的软件支持。基于Linux操作系统的软件开发环境已经预装在核心板中,用户可以直接进行应用程序的开发。此外,核心板还提供了完整的开发工具链和驱动程序,方便用户进行底层驱动的开发和调试。 另外,imx6ull核心板还提供了丰富的文档和资料支持。用户可以通过官方网站下载到详细的产品规格书、用户手册和应用案例等资料,帮助用户快速了解和上手该核心板。此外,还可以通过在线技术支持和开发者社区解答问题、交流经验。 总之,imx6ull核心板是一款功能强大、易于开发的嵌入式开发板。它提供了稳定可靠的硬件和全面的软件支持,适用于各种应用场景。无论是学习嵌入式开发,还是进行项目开发,imx6ull核心板都是一个理想的选择。 ### 回答2: imx6ull核心板是一款基于NXP公司的i.MX6ULL处理器的开发板。i.MX6ULL是一款低功耗、高性能的ARM Cortex-A7处理器,适用于物联网、智能家居、工业控制等领域。imx6ull核心板集成了该处理器以及丰富的外设,提供了更便捷的开发环境和更灵活的应用扩展能力。 imx6ull核心板提供了详细的技术文档和用户手册,其中包括硬件设计指南、原理图、PCB布局指导以及电源管理等资料,可以帮助开发者理解和设计基于imx6ull核心板的硬件系统。 在软件方面,imx6ull核心板支持Linux系统和Android系统,提供了相关的内核、驱动和应用程序,开发者可以根据需要选择适合的操作系统进行开发。此外,imx6ull核心板还支持Qt和Qt Quick等跨平台开发框架,开发者可以通过这些工具进行应用程序的开发和界面设计。 imx6ull核心板的外设丰富,包括多个UART、SPI、I2C、GPIO等接口,以及USB、以太网等通信接口。此外,imx6ull核心板还提供了丰富的扩展接口如MIPI CSI和DSI接口、LCD接口等,可以满足不同应用的需求。 总之,imx6ull核心板提供了丰富的技术资料和灵活的应用扩展能力,是一款适用于各种物联网、智能家居和工业控制等领域的开发板。无论是硬件设计还是软件开发,开发者都可以借助imx6ull核心板高效地进行开发,并快速实现自己的项目。 ### 回答3: imx6ull核心板是一款基于i.MX 6ULL处理器的嵌入式系统核心板。它具有多个丰富的接口和功能,适用于各种物联网和嵌入式应用领域。 首先,imx6ull核心板采用了NXP (原Freescale) 公司的i.MX 6ULL处理器,该处理器拥有Cortex-A7内核,主频为528 MHz。这种处理器具有低功耗和高性能的特点,可在各种资源有限的嵌入式应用中使用。 其次,imx6ull核心板提供了丰富的接口和功能,包括USB、以太网、UART、CAN、SPI、I2C等。这些接口能够满足不同外设的连接需求,例如摄像头、显示屏、传感器等。另外,核心板还提供支持多种存储介质的接口,包括SD卡和NAND闪存。 此外,imx6ull核心板支持多种操作系统,包括Linux和Android等。开发者可以根据自己的需求选择适合的操作系统,进行应用程序的开发和部署。同时,核心板也提供了丰富的软件开发工具和开发文档,为开发者提供便利。 最后,imx6ull核心板具有较小的尺寸和低功耗的特点,适用于各种紧凑型和长时间运行的嵌入式系统设计。它可以广泛应用于物联网、工控、智能家居等领域。 总之,imx6ull核心板是一款功能强大且易于开发的嵌入式系统核心板,具有丰富的接口和功能,适用于各种物联网和嵌入式应用领域。它的相关资料包括处理器的规格书、接口定义、原理图等,在开发过程中可以提供必要的技术支持和参考。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值