【MCXN947开发板测评】人脸检测的方法探索
[复制链接]
MCXN947开发板以高性能Arm®Cortex®-M33内核,频率高达150MHz,提供2MB闪存以及可配置的带完整ECC的RAM、DSP协处理器、并集成了eIQ Neutron NPU。与单独的CPU内核相比,NPU可提供高达42倍的机器学习(ML)吞吐量提升,从而能够减少系统唤醒的时间,并降低整体功耗。
借助恩智浦应用代码库(Application Code Hub),开发者可以体验其在神经网络方面的表现。
出于完成前期制定的测评任务,花去了整体的测评时间,并想留下一些时间来探索人脸识别方面的内容,但受时间及硬件条件制约,只能留待以后去研究,但研究的思路还是可以同大家一起分享的。
从相关的资料看,要进行人脸识别需要相应的硬件配置,即OV7670摄像头模块和LCD-PAR-S035显示屏。
粗略的看了一下,这2个配件的价格会使开发板的N倍,如果手头没有相应的存项,完成的成本会很高,这可能是制约大家成功的部分原因。
图1 人脸识别套装
其实,即使是购置了标准的硬件配备,那也是需要改造的,见图2所示。
图2 线路改造
在顺利完成检测的情况下,其识别效果如图3所示。
图3 识别效果
那么能否在一定条件下去加以探索和尝试呢?
那就先看一下识别处理了流程,其基本内容如下:
摄像头拍摄---->获取图像数据---->显示屏输出图像---->AI识别处理---->显示分析结果
图4 识别流程
再缺少摄像头或匹配型号摄像头的情况下,除了购置,就需要移植和修改摄像头的输出数据以匹配原识别方案的接口形式。
那么是否可以换个思路呢?
既让识别的基础是图像,那么就可以跳过拍摄的环节,由动态识别改为静态识别,即直接将静态的图片存到内存中以衔接原识别方案的数据接口。此时就将硬件的要求转驾到数据接口的衔接上。
由于摄像头模块OV7670的分辨率为640× 480个像素点,最大支持FPS 30的VGA,故提供的图片为640× 480像素即可。
再一个就是显示屏的配备,之所以要使用指定的显示屏,是因为LCD-PAR-S035显示器是一个分辨率为320× 480的3.5英寸显示屏。而通常的廉价显示屏多为320× 240像素点。要解决这个问题,除了照方抓药外,就是配置相同分辨率的显示屏,然后移植其显示驱动程序。
另外一种解决方法就是,选取常规的320× 240像素点显示屏,然后对显示的内容裁剪以适应显示屏的分辨率,这也是将硬件的要求转化为数据接口的处理。或是更决绝一点,直接省去拍摄图像的显示,而直接显示识别结论。如果识别的结果是以框选的方式来标识,则只能采取图像比例压缩的方法。
在解决了硬件方面的选取外,下面再了解一下软件方面的处理流程。
首先要在Windows 11下设置软件环境,并下载Windows版本的MCUXpresso IDE。
此外要安装SDK,并在MCUxpresso SDK Builder(构建工具)中选择FRDM-MCXN947。
随后,点击Application Code Hub予以导入。
最终搜索multiple face detection on mcxn947示例,以将其克隆到本地工作区。
识别处理的整体程序流程如图5所示:
图5 程序流程
由于MCX N94并不支持CSI接口,所以要用FlexIO模拟CSI接受摄像头数据。Smart DMA(EZH)从FlexIO中
读取帧数据并写入RAM。
这就是前面我们说的以静态图片进行切入的地方,直接把图片数据充分到这个RAM区域!
在模型推理和后期处理过程中,是将捕获图像的大小调整为160× 128,像素值被压缩至-1 - 1,然后被输入到模型中进行推理,见图6所示。
图6 示意效果
在处理过程中,有3种不同规模的预测输出。以左下角的第一个输出维度为例,输出维度 16× 20× 18也可以表示为16× 20× 3× 6。
16× 20表示原始图像被划分的区域数量,相当于320个方格。每个特征图对应三种尺寸的锚框(anchor box),
所有网格共享这些锚框,每个锚框对应一个6维向量,即(tx、ty、th、tw、置信度、类别),描述当前网格的推理结果。
经测试,推理时间约为25毫秒,其内存使用情况如图7所示。
图7 内存使用情况
当然这些都文字方面的知识,要掌握成自己的收获还要花时间去实践和探索!
|