一.概述
本文章会尝试用简单的语言,来给大家介绍一下,如何搭建一个最基本的人脸检测以及识别的场景。当然,这篇文章不只是讲解关于人脸检测相关的部分,而是围绕这个核心,包含概括了整个前端的uvc,甚至socket通信等各个方面都有所涉及。
最终的产品实际效果以及主体框图如下所示:
如上图所示,该展示需要用到:
♦ 一块1880的edb开发板(官网购买)
♦1台linux pc(推荐ubuntu)
♦一个支持uvc标准的摄像头,该实例使用的是logitech C922(此处非广告)
♦网线/电源等各个配件
该展示从流程上来看,主要分为四大部分:
1.uvc camera将实时拍摄到的数据通过usb线,传给1880主板,数据可以是h264/yuv/mjpg等各种格式,取决于不同的camera型号。
2.1880接收到uvc camera的数据后,通过Opencv的api,调用ffmpeg,并内部对接了底层的bitmain的各个驱动模块,比如硬件Jpeg解码,硬件视频解码等。
3.通过上层高度封装的API(bmiva),依次调用人脸检测、人脸识别、特征值入库以及比对的相关函数,来获得人脸坐标以及特征值等各个参数。
4.BM1880 将合成后的图片(包含人脸框以及特征值查找到的人名),通过socket的方式传给pc(1880作为socket client,PC作为socket server),并利用PC的opencv进行显示。
接下来会详细介绍这4个部分:
二. camera 和 BM1880 之间的数据传输
1.背景介绍
-> 什么是uvc camera,以及uvc camera的基本用法
简单来说,uvc camera可以理解为免驱摄像头,而对于上层应用来说,配合简单的v4l2协议以及Ioctl的方式,就可以很方便的获取/设置摄像头的各个属性。
示范代码如下所示:
通常uvc camera会被识别为/dev/video0。 所以代码通过调用open函数,打开摄像头,然