0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >无线互联 > 基于算丰SOPHON BM1880 模塊+ ON AR0130&AR0230 USB双目人脸识别方案

基于算丰SOPHON BM1880 模塊+ ON AR0130&AR0230 USB双目人脸识别方案

来源: 大大通
2019-10-22
类别:无线互联
eye 117
文章创建人 拍明

原标题:基于算丰SOPHON BM1880 模塊+ ON AR0130&AR0230 USB双目人脸识别方案

  随着社会的发展进步及人工智能的逐步普及,人们已经慢慢习惯AI给人类带来的便利,比如:上班考勤、小区门禁,办公大楼门禁,高铁站检票闸机都可以让人们不用配带钥匙或识别卡而刷脸快速通过,比特大陆-算丰 推出算力芯片BM1880+安森美AR0130&AR0230(双目)人脸识别方案,BM1880可支持最高1TOPS的算力,可支持本地3万张脸谱存储,AR0230 Senso支持r内部HDR合成输出,可很好的解决背光、强光的过曝光、过暗现象,AR0130在近红外的效果表现良好,此方案可支持应用场景:

  1.小区门禁。

  2.人脸识别考勤系统。

  3.关口闸机。

  支持AI功能:

  1.人体属性与姿势分析。

  2.人体检测、识别与表情分析。

  3.物体体测与识别。

  4.车牌识别。

  5.声纹识别。

  一.概述

  如何搭建一个最基本的人脸检测以及识别的场景,此讲解不止关于人脸检测相关的部分,而是围绕这个核心,包含概括了整个前端的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.1880将合成后的图片(包含人脸框以及特征值查找到的人名),通过socket的方式传给pc(1880作为socket client,PC作为socket server),并利用PC的opencv进行显示。

  接下来会详细介绍这4个部分~

  二. camera和1880之间的数据传输

  1.背景介绍

  -> 什么是uvc camera,以及uvc camera的基本用法

  简单来说,uvc camera可以理解为免驱摄像头,而对于上层应用来说,配合简单的v4l2协议以及Ioctl的方式,就可以很方便的获取/设置摄像头的各个属性。

  示范代码如下所示:

  通常uvc camera会被识别为/dev/video0。 所以代码通过调用open函数,打开摄像头,然后通过ioctl,来获得摄像头的各个属性,实际应用中可以通过相关网站查找或者直接看底层代码来查阅所有支持的属性。

  同样的,如果想设置摄像头的各个属性,也是类似的做法:

  如下代码截图所示,该例子设置摄像头的格式为320×240的MJPG。

2.实际代码

  如图所示,可以看到通过Opencv来打开摄像头相比之前的做法,封装度更高。只需要调用VideoCapture类的open函数即可。opencv则帮忙隐藏了实现细节。

  当然,此处有个问题是,为什么open的对应idx是200,此处略过不做展开,只要简单的记住,video0是对应的从200开始,依次类推,video1->201...

  3.查询/修改摄像头属性

  对于我们的人脸检测的应用来说,跟帧率强相关的一个指标则是摄像头的输入速度,通俗的理解,摄像头给BM1880开发板的速度越快,那自然帧率就有机会越高,假如摄像头以很慢的速度给BM1880开发板,那相当于前端就被卡住了,自然整体速度也快不起来。

  所以,通常我会习惯于在开始的时候,先获得摄像头的基本帧率参数,从而对大概帧率有一个简单的估算。

  代码如下:

  通常摄像头的帧率会跟几个参数强相关,宽/高/格式。比如1080P的就要比720P的FPS要慢,YUYV就比MJPG的要慢,类似这些规律。大家也可以自己尝试。

  当然,也跟具体特定的摄像头有关。

  4.实时获得每一帧的数据

  对于基于Opencv的写法,到了这一步其实真的非常简单。只有一行代码而已:

  capture.read(),  -> 即可以将数据保存到Mat frame对象里面。

  至此,第一阶段的工作已经完成,数据已经从camera到了bm1880开发板本地的Mat对象里面了。至于里面的具体细节,

  比如数据是怎么通过opencv给到ffmpeg,并进行底层硬件解码的,都对开发者是透明的。从而大大降低了上层应用搭建的难度。

  三.人脸检测识别相关操作

  1.人脸识别函数调用流程.

  整个过程会用到的函数如下图所示:

  可以看到,其实主要函数的使用非常简洁,只需依次调用bmiva_init->bmiva_face_detector_create->bmiva_face_detector_detect即可完成人脸的检测.

  实际代码如下所示(该例子以MTCNN为例):

  最终返回的信息,存放在vectorresults里面

  至此,检测的部分告一段落。

  补充:其中使用到的bmodel,是需要预先放在1880开发板的存储设备上的。

  因为我们的bm1880开发板是推理芯片。所以只是使用已经训练好的模型。

  当然,目前主流的模型都可以支持转成我们的bmodel. 至于转换的部分,可以参考社区论坛的sdk的部分。

  至于如何将人脸坐标,展现出来,顺便提一下即可,如下代码所示:

  简单的for循环,将faceinfo里面的x/y坐标提取出来,然后利用opencv来绘画矩形框即可.

  2.人脸识别.

  接下来会稍微麻烦一些,是人脸入库,人脸识别,特征值提取以及比对的部分。

  先照例看一下示意图:

  首先是特征值加载,如下截图所示:

  目前demo的做法是在flash里面存了一份特征值的数据,比如features.txt.然后将特征值通过ifstream读进来,并调用bmiva提供的NameLoad()函数,加载到BmivaFeature g_name_features里面。

  然后是创建extractor

  此处跟bmiva_face_detector_create可以类比。对应的是bmiva_face_extractor_create(),

  承接之前的人脸检测的结果, 会先将之前检测到的人脸信息进行align,按照指定的宽高

  然后,会将对齐过的人脸信息(align_images),进行核心的特征值提取操作,如下函数所示:

  这个函数会将提取出来的特征值存在Vectorfeatures里面

  然后会进行similarity的运算:

  这里的第一个参数,就是前面提到的,从存储设备里面加载出来的特征值数据库.至于这个函数内部的实现,大家可以简单的理解为,遍历整个数据库,然后做相似度运算,比如Cosine之类的算法.并把最终的结果保存在vector<std::pair>result里面

  再之后,就是一个简单的排序并选择相似度最高的结果,并将该结果对应的人名copy出来,进行最后的人名的显示.

  当然,这个操作的过程中,也有一个阀值(threshold)的概念,如果相似度最高的数值,都低于我们预设的阀值,那我们就认为此次没有检测到想要的结果.

  这个阀值也是一个经验值,方便用户在不同的场景进行调节.

  至此,整个检测/识别的全过程就已经完成.

  接下来就是收尾的数据传输以及显示的部分了~

  四.数据传输以及显示

  因为我们的bm1880开发板本身没有显示输出接口,所以必须要利用其它设备来进行显示.开发演示阶段,我们建议利用ubuntu电脑来完成该功能.

  为了达到送给ubunutu显示的目的.该例子使用的是简单的socket传输.即:将每帧合成好的数据,通过socket 传送给pc端.

  1.建立连接

  如上函数所示,此处略过不提.

  毕竟都是标准的玩法, 所以大家也可以在网络上很方便的查找到相关使用方法.

  2.创建线程

  因为socket相对会非常耗时,所以为了并行处理,通常会建议开新的线程来做这个事情.

  然后我的demo利用的是一个简单的queueimagebuffer

  从而很方便的进行push/pop操作.

  3.数据传输:

  核心还是利用socket的send函数,将数据发送出去.

  至于PC端,则是调用相对应的recv函数即可:

  最后一步,PC端将接受的数据,存在opencv的image里面,并调用imshow进行显示。

场景应用图

产品实体图

展示板照片

方案方块图

产品正确连接图

核心技术优势

  比特大陆算丰 BM1880

  •BM1880 是聚焦于边缘应用的深度学习推理人工智能芯片 BM1880 TPU 在 8 位整数运算下,可以提供 1TOPS 的算力; 在 Winograd 卷积加速运算下, 提供高达 2TOPs 的算力 。

  •特殊设计的 TPU 调度引擎能有效地为所有的张量处理器核心提供极高的带宽数据流 。芯片内含2MB 内存 可以为性能优化和数据重用提供最佳的编程灵活性。

  •也为用户提供了强大的深层学习模型编译器和软件SDK 开发包。主流的深层学习框架像,比如Caffe,Pytorch 和Tensorflow框架,可以轻松地移植到BM1880 平台上。支持常见的CNN/RNN/DNN

  •神经网络模型分析、编译和调整兼容Linaro 96boards。

  •支持 ResNet50, Yolo V2,GoogleNetV1,MobileNetv1/v2, SSD300,Alexnet, VGG16.. 等模型。

  •算丰BM 1880 是专为人工智能应用设计的多功能加速平台,可以作为深度学习推理加速的协处理器,也可以做为主处理器从以太网接口或USB 接口接收视频流、图片或其它数据,然后执行推理和其他计算机视觉任务;其它的主机也可以发送视频流、或图片给BM1880,BM 1880 做推理并将结果返回给主机。

  AR0230

  •卓越的微光性能

  •ON半导体最新3.0um像素,具有双转换增益的DR-Pix™技术

  •线性或高动态捕捉

  •像素或行扫描交错T1/T2输出

  •支持片上HDR内部合成输出

  •数据接口:四通道串行高速像素接口(HiSPi)差分信号(SLVS和)

  HiVCM)或并行输出

  AR0130

  •卓越的低光性能,无论是在VGA模式和高清模式

  •卓越的近红外性能

  方案规格

  应用 处 理器子系统

  –双核 ARMA53@1.5GHz

  –Neon 加速,集成了浮点运算单元 (FPU)

  RIS C V 处 理器子系统

  –单核 RISC V @1.0GHz

  张量处 理器子系统

  –512 个 MAC, 1TOPS @INT8

  –Winograd 卷积运算下, 高达 2 T OPs@INT8

  视频子系统

  –H. 264 视频解 码 器

  –MJPEG 编码器 解码器

  –视频后处理器

  –1080P@60FPS 或两路 1080P@30FPS

  物理规格

  –典型功耗为 2.5 瓦

  –0.9V 核心 電 圧 , 1.8V/3.3V 输入输出

  –14mm x 14mm FCBA 封装

  音频子系统

  –双 I2S 输入和输出

  –使用软件实现多协议的语音编解 码

  外围接口

  –一个 USB 3.0/USB2.0 主机 设备

  –两个集成的 GMAC, 支持 RGMII 和 RMII

  –5xI2C / 16x PWM / 4x UART / Multi GPIO

  内存接口

  –DDR3/ LPDDR3/DDR4 LPDDR4

  –支持的 DDR 容量从 1 Gb 到 4 GB

  –SPI NAND/eMMC/ SDIO 接 口

  –eMMC 容量可支持到 32 GB

  安森美 AR0230

  •卓越的微光性能

  •ON半导体最新3.0um像素,具有双转换增益的DR-Pix™技术

  •全高清支持高达1080P 60帧每秒的优越视频性能

  •线性或高动态捕捉

  •可选自适应局部色调映射(ALTM)

  •像素或行扫描交错T1/T2输出

  •支持外部机械快门

  •片上锁相环振荡器

  •集成基于位置的颜色和镜头阴影校正

  •从模式为精确帧率控制

  •立体/3D相机支持

  •数据引擎

  •数据接口:四通道串行高速像素接口(HiSPi)差分信号(SLVS和)

  HiVCM)或并行输出

  •自动黑电平校准

  •高速可配置A,B模式切换

  •温度传感器

  安森美 AR0130

  •卓越的低光性能,无论是在VGA模式和高清模式

  •卓越的近红外性能

  •高清视频(720p60)

  •片内AE和统计引擎

  •自动黑电平校准

  •A,B模式切换

  •逐行扫描

  •支持2:1缩放

  •由片上锁相环(PLL)振荡器产生的内部主时钟。

  •并行输


责任编辑:

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

方案推荐
基于MC33771主控芯片的新能源锂电池管理系统解决方案

基于MC33771主控芯片的新能源锂电池管理系统解决方案

AMIC110 32位Sitara ARM MCU开发方案

AMIC110 32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于TI公司的AM437x双照相机参考设计

基于TI公司的AM437x双照相机参考设计

基于MTK6580芯片的W2智能手表解决方案

基于MTK6580芯片的W2智能手表解决方案