/AceFace

通过opencv实现的人脸识别web端

Primary LanguageJavaScript

AceFace+

通过opencv实现的人脸识别web端

思路

视频的人脸识别, 说白了也就是图片的识别, 因为视频的每一帧都是一张图片, 我们只要把每一帧的图片的人脸都识别出来, 那也就实现了视频的人脸识别。总体思路是:截取视频中的图片,然后传到服务器端做识别,把识别结果(坐标和宽高)传回前端,前端做标记。

第一步: 我们需要把图片从视频中截取出来, 那现在就出现了三个问题,
1. 怎么从视频是截图片;
2. 截图的频率是多少?
3. 怎么把图片转到服务器?

回答第一个问题:使用Canvas的toDataURL方法,这个方法可以实时的把视频的画面,截成Base64图片编码,效率高,也方便。

回答第二个问题:画面之帧率高于每秒约10-12帧的时候,人眼就会认为是连贯的。所以我们先取一个低值,每60毫秒截一次图

回答第三个问题:用Ajax吗?当然可以,但是不太合适。对于这种前后端频繁传输数据的情况,用Websocket是最好的选择。前后端我们选择socket.io来实现,传送门

第二步:Node端识别图片。在图像识别领域,opencv是一套标准的解决方案,但是opencv由是C++编写,也有Java和Python的接口,但是没有JS的接口,没办法了吗?当然不是,已经有大神出口了Node版的,叫node-opencv,node-opencv不是重写了opencv,只是在Node层调用C++层的cv,最终还是在C++里面运行的。

安装opencv和node-opencv可以对照之前的文章,这个东西比较难安装,我也是折腾好久才安装上。(问题,nodeV8.4.0装不上openCV,也不报错,试探性的升级到V9.2.1竟然装上了,很无奈。)

进度

当前使用了electron(完成桌面GUI应用程序的开发),目的是打出来桌面级应用,当然也可以不用,直接删除包内package.json 、 main.js、 就好。