首页 > 编程语言 >基于国产车规级处理器T507-H开发平台,如何用50行Python代码实现图传和人脸识别?

基于国产车规级处理器T507-H开发平台,如何用50行Python代码实现图传和人脸识别?

时间:2023-03-31 20:03:22浏览次数:48  
标签:人脸识别 socket Python 规级 cv2 开发板 import zmq 摄像头

我们在米尔国产T507-H车规级处理器的开发板上尝试无线图传功能,并且叠加人脸识别检测视频中是否存在人脸。这次使用的是USB摄像头,可以直接接在开发板的接口上。

1. 连接摄像头

连接好摄像头后使用指令dmesg,看到能读取到摄像头。显示为HIK 720p Camera

基于国产车规级处理器T507-H开发平台,如何用50行Python代码实现图传和人脸识别?_核心板


接下来使用v4l来检测相机的详细参数。安装v4l:sudo apt install v4l-utils

使用sudo v4l2-ctl --list-devices查看详细信息与设备号

基于国产车规级处理器T507-H开发平台,如何用50行Python代码实现图传和人脸识别?_T507_02

2. 使用OpenCV进行人脸识别

这里使用的识别程序借鉴了这个CSDN博主的代码https://blog.csdn.net/qianbin3200896/article/details/123643791

在开始之前,先安装几个库。

sudo apt update完成更新

sudo apt install python3-opencv

pip3 install --upgrade

pippip3 install zmq

pip3 install pybase64

首先在开发板上运行如下程序,读取摄像头数据并将数据发送至PC。

基于国产车规级处理器T507-H开发平台,如何用50行Python代码实现图传和人脸识别?_开发板_03


import cv2
import zmq
import base64


def main():
    '''
主函数
    '''
    IP = '192.168.2.240' #上位机视频接受端的IP地址

    # 创建并设置视频捕获对象
    cap = cv2.VideoCapture(0)
    print("open? {}".format(cap.isOpened()))
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)  # 设置图像宽度
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)  # 设置图像高度

    # 建立TCP通信协议
    contest = zmq.Context()
    footage_socket = contest.socket(zmq.PAIR)
    footage_socket.connect('tcp://%s:5555'%IP)

接着需要在PC上接收开发板传来的信息,将视频分为一帧帧的内容分别存储和处理。当识别到人脸时会用红框圈出。打开anaconda prompt运行如下内容

import cv2
import zmq
import base64
import numpy as np

def main():
    '''
主函数
    '''
    context = zmq.Context()
    footage_socket = context.socket(zmq.PAIR)
    footage_socket.bind('tcp://*:5555')
    cv2.namedWindow('Stream',flags=cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)


    while True:
        print("监听中")
        frame = footage_socket.recv_string() #接收TCP传输过来的一帧视频图像数据
        img = base64.b64decode(frame) #把数据进行base64解码后储存到内存img变量中
        npimg = np.frombuffer(img, dtype=np.uint8) #把这段缓存解码成一维数组
        source = cv2.imdecode(npimg, 1) #将一维数组解码为图像source
        # img=cv2.imread('1.png',1)
        grayimg = cv2.cvtColor(source, cv2.COLOR_BGR2GRAY)
        face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
        faces = face_cascade.detectMultiScale(grayimg, 1.2, 5)
        for (x, y, w, h) in faces:
            cv2.rectangle(source, (x, y), (x + w, y + h), (0, 0, 255), 2)
        cv2.imshow('frame', source)
        if cv2.waitKey(1) == ord('q'):
            capture.release()
            break

if __name__ == '__main__':
    '''
程序入口
    '''
    main()

正常工作时会一直print监听中。

基于国产车规级处理器T507-H开发平台,如何用50行Python代码实现图传和人脸识别?_开发板_04

此时可以在pc上弹出的窗口中看到摄像头画面,有人脸出现也能自动识别。不过存在一定的延迟。

基于国产车规级处理器T507-H开发平台,如何用50行Python代码实现图传和人脸识别?_T507_05

MYD-YT507H开发板由米尔电子于2022年推出和销售,搭载了全志的车规级T507-H处理器,具有超高性能和丰富的外设资源,是优秀的国产工业CPU平台。屏蔽罩下的是全志的T507-H处理器:

基于国产车规级处理器T507-H开发平台,如何用50行Python代码实现图传和人脸识别?_核心板_06

米尔MYD-YT507H开发板

  •  集成四核Cortex–A53,主频1.5GHz,符合汽车AEC-Q100测试要求;
  • 支持4K视频编解码;
  • 支持LVDS、HDMI、RGB以及CVBS四种显示输出接口;
  • 支持双屏同显、双屏异显,支持MIPI CSI 、DVP摄像头输入;提供流畅的用户体验和专业的视觉效果。
  • 搭载的1GB DDR4内存与8GB eMMC;
  • 开发板拥有丰富的外设扩展:SD卡槽、持双路网口,4个USB2.0接口,1个SPI,2个SDIO;
  • 工业级板卡的工作温度范围为-40℃ - +85℃;
  • 核心板为邮票孔设计。

米尔电子,是一家专注于嵌入式处理器模组设计研发、生产、销售于一体的高新技术企业。米尔电子在嵌入式处理器领域具有10多年的研发经验,为客户提供基于ARM架构、FPGA架构的CPU模组及充电控制系统等产品和服务;为智能医疗、智能交通、智能安防、物联网、边缘计算、工业网关、人工智能等行业客户,提供定制解决方案和OEM服务。公司通过专业高效的服务帮助客户加速产品上市进程,目前已为行业内10000家以上的企业客户服务。

标签:人脸识别,socket,Python,规级,cv2,开发板,import,zmq,摄像头
From: https://blog.51cto.com/u_14441798/6162248

相关文章

  • python写入文件时,编码方式为utf-8,在pycharm种正常显示中文,但是用excel打开就乱码
    python写入文件时,编码方式为utf-8,在pycharm种正常显示中文,但是用excel打开就乱码解决办法:explore.to_csv(resultfile,encoding='utf-8-sig')encoding='utf-8-sig’因为python编码方式为utf-8,但是是无BOM格式的,excel软件,其对于utf-8编程方式,只支持有BOM格式的,所以会出现中文......
  • Python的match-case语法
    Python3.10版本在2021年10月发布,新增了match-case语法。其实就是对应别的开发语言的switch-case语法。 例子defhttp_error(status):matchstatus:case400:print("Badrequest")case404:print("Notfound")case......
  • opencv-python 4.9.2. 轮廓特征
    矩图像的矩可帮助你计算某些特征,如对象的质心,对象的面积等特征。函数cv.moments()给出了计算的所有矩值的字典。从这一刻起,你可以提取有用的数据,如面积,质心等。质心由关系给出,$$C_{x}=\frac{M_{10}}{M_{00}}$$和$$C_{y}=\frac{M_{01}}{M_{00}}$$。这可以按如下方式完成:i......
  • python正则表达式记录
    今天写个脚本用到正则表达式,查阅了资料加问了gpt老师终于解决,在此记录。记录两种正则表达式有用的用法:1、匹配指定了前后文的字符串如我们需要匹配'ontheonehand'中的'one',而不要'ontheotherhand'中的'other';需要用到正则表达式语法中的“特殊构造”:(?...),之所以是特殊构......
  • 跟着查老四学Python Day 4:列表推导式 生成器 迭代器
    忽略掉例行寒暄,让查老四直接讲课了列表推导式(ListComprehension)列表推导式是一种简洁的构建列表的方法。它可以将一个循环和条件表达式结合起来,从而生成一个新的列表。示例:#普通循环创建一个列表squares=[]forxinrange(1,6):squares.append(x**2)print(squares)......
  • Python 数字类型之 int float
    数字常量int:一般的整数,long:长整型,2.x版本需在数字后加“L”或“l”,表示长整型如100000000L;python3.x版本后不分长整型,统一为int,不可加“L”或“l”float:浮点数,1.0也为浮点数,float可强制转换为int,取整;print(type(1234))print(type(-24))print......
  • 关于python 的if __name__ == "__main__"的模块测试
    if__name__=="__main__"也就是说执行当前文件,不调用模块的时候__name__=__main__调用模块的时候,测试如下:1、新建test01.py文件测试代码如下print("这条消息来自test01")deffunc():print('hello,world!***')print("这条消息来自func")if__name__=="__......
  • python isinstance()函数
    pythonisinstance()函数描述isinstance()函数来判断一个对象是否是一个已知的类型,类似type()isinstance()与type()的区别type()不会认为子类是一种父类类型,不考虑继承关系isinstance()会认为子类是一种父类类型,考虑继承关系如果要判断两个类型是否相同推荐使用isinstanc......
  • Python3内置函数之C系列
    1、callable()callable()是一个内置函数,用于检查给定对象是否是可调用的。如果对象是可调用的,则返回True,否则返回False。可调用对象包括函数、方法、类和某些类的实例。如果一个对象定义了__call__()方法,则也被认为是可调用的。 2、chr()chr()是Python内置函数之一,用于......
  • 【python基础】python字典根据值查询键
    前言 测试>>>tfl_label={'circle_green':0,'circle_red':1,'circle_yellow':2,'left_green':3,'left_red':4,'left_yellow':5,'nomotor_green':6,'nomotor_red':7,......