电子说
人脸识别是一种高安全性的生物识别技术,在安防、身份验证等领域被广泛应用。
本文在【EsDA应用】5分钟快速实现摄像头图像采集 的基础上,使用M6G2C核心板,简单介绍如何基于EsDA设计的face_detection人脸检测功能节点,快速实现人脸检测识别。
前期准备
若是刚开始接触EsDA,可先阅读EsDA其他系列文章,从零开始搭建环境和掌握基本开发流程,已有基础的可以跳过:1. 硬件准备
1.1 准备一个摄像头,这里我们以OV7725摄像头为例,搭配转接板使用。1.2 准备一块LCD显示屏。1.3 准备一张SD卡,用于存放人脸模型。1.4 准备一块M6G2C核心板和EPC-6G2C-L评估板,并按照下图所示连接好硬件。其中,eth0网口用于下载流图,并连接LCD显示屏接口、电源,以及将OV7725摄像头通过转接板连接到开发板背面的CSI接口上。
2. 其它准备
将人脸检测相关的模型文件存放到SD卡中。
节点介绍
这里我们需要使用到摄像头、图像格式转换以及人脸检测相关的AWFlow节点,包括在【EsDA应用】5分钟快速实现摄像头图像采集 中介绍的camera_video节点、camera配置节点、lcd_display节点,以及本文介绍的用于图像数据格式转换的image_format_convert节点和人脸检测节点face_detection。1. image_format_convert节点
图像格式转换节点,用于将摄像头输出的图像转换为人脸检测节点支持的RGB888格式。1.1 属性
输入图像格式:待转换图像的格式,一般是摄像头输出的原始数据格式;
输入图像宽度:待转换图像的宽度;
输入图像高度:待转换图像的高度;
输出图像格式:转换后的图像的格式,必须指定为RGB888;
输出图像宽度:转换后的图像的宽度;
输出图像高度:转换后的图像的高度。
1.2 输入
1.3 输出
height:转换后的图像的高度。
2. face_detection节点
face_detection是人脸检测节点,该节点对输入的图像数据进行人脸检测处理,当检测到图像中存在人脸时,截取图像中的人脸数据并输出。后级节点可以使用这个图像数据进行特征值提取、比对等操作。
2.1 属性
活体检测:是否进行活体检测;
模糊检测:是否进行模糊检测;
人脸矫正:是否进行人脸整理矫正;
模型和参数路径:检测模型和参数文件路径;
人脸图像主题:需要进行人脸检测的图像的主题,此节点只对与此属性匹配的输入图像进行检测。
2.2 输入
image:输入图像数据的缓冲区指针,必须是RGB888格式,可以由image_format_convert转换后提供输入;
width:输入图像的宽度;
height:输入图像的高度;
2.3 输出
image:从输入图像中截取的人脸图像缓冲区;
coord_x1:人脸的左上角横坐标,与后面三个坐标共同决定坐标系上的两个点,这两个点可以确定图像中的人脸位置;
coord_y1:左上角纵坐标;
coord_x2:右下角横坐标;
coord_y2:右下角纵坐标。
业务处理
本应用主要实现M6G2C开发板采集摄像头图像,并在LCD显示屏上进行显示。同时,将摄像头输出的原始数据进行格式转换后,输入到face_detection节点中进行人脸检测。具体实现如下:1. 添加节点并连线首先我们需要添加一个camera_video节点用于采集图像,并输出到lcd_display节点中显示。然后,将camera_video节点输出的RGB565原始图像在image_format_convert节点中转换为RGB888格式,接下来将转换后的图像输入到face_detection中进行人脸检测,并将检测的结果输入到lcd_display节点中。另外,增加两个fscript节点,用于指定图像主题和打印坐标点信息。2. 配置节点2.1 配置camera_video节点双击camera_video节点,并在配置项中选择添加一个新的camera节点。
在camera配置节点中,根据所使用的摄像头,分别设置设备名、输出图像的数据格式和图像宽度、高度。
然后更新配置,在camera_video节点的配置项中,选择上一步新增的camera配置节点即可。
2.2 配置image_format_convert使用image_format_convert节点目的是将图像格式转换为RGB888,因此,根据图像的信息进行设置即可。如果摄像头输出的原始数据即为RGB888,那么这一步可以省略。
2.3 face_detection节点
使用人脸检测节点需要将相关的模型文件存放到文件系统中,并在face_detection节点中指定模型存放的路径,这里我们存放到SD卡中,并指定路径。人脸图像主题属性用于对输入的图像进行过滤,这里我们设置为摄像头输出的图像的主题即可。2.4 fscript
流图中标识为“1”的fscript节点主要是为图像指定一个主题,我们将其设置为face,和face_detection节点中的主题一致。
msg.topic = "face"
另一个节点用于打印人脸检测结果的坐标点信息,方便我们对结果进行验证。其内容如下:
print("(x1, y1)#: (" + msg.coord_x1 + ", " + msg.coord_y1 + ")")
print("(x2, y2)#: (" + msg.coord_x2 + ", " + msg.coord_y2 + ")")
2.5 lcd_display节点
lcd_display节点用于显示图像,不需要我们进行配置。它会实时显示camera_video节点输出的图像,并且在检测到图像中存在人脸后,根据face_detection节点输入的坐标,在图像中将人脸框选显示出来。3. 下载验证因为M6G2C开发板是通过网口去下载流图,所以打开AWFlow Designer后需要配置目标板IP和端口号。然后点击下载运行即可。
流图下载完成后,通过LCD可以看到,我们已经成功从摄像头获取图像,并且成功在显示屏上显示。
当摄像头采集的图像中含有人脸时,face_detection节点可以正常检测到人脸并且输出准确的坐标点。
技术交流群长按识别如下二维码可加入“EsDA嵌入式系统设计自动化交流群”,与志同道合的朋友交流,并有专业技术人员为您答疑解惑,如有问题可以咨询小致微信:zlgmcu-888。
全部0条评论
快来发表一下你的评论吧 !