对开发库的C#封装,屏蔽使用细节,可以快速安全的调用人脸识别相关API。具体见github地址。新增对.NET Core的支持,在Linux(Ubuntu下)测试通过。具体的使用例子和Demo详解,参见博客地址。
更新:
增加对V1.1两个新功能的支持。
关于人脸识别
目前的人脸识别已经相对成熟,有各种收费免费的商业方案和开源方案,其中OpenCV很早就支持了人脸识别,在我选择人脸识别开发库时,也横向对比了三种库,包括在线识别的百度、开源的OpenCV和商业库虹软(中小型规模免费)。
百度的人脸识别,才上线不久,文档不太完善,之前联系百度,官方也给了我基于Android的Example,但是不太符合我的需求,一是照片需要上传至百度服务器(这个是最大的问题),其次,人脸的定位需要自行去实现(捕获到人脸后上传进行识别)。
OpenCV很早以前就用过,当时做人脸+车牌识别时,最先考虑的就是OpenCV,但是识别率在当时不算很高,后来是采用了一个电子科大的老师自行开发的识别库(相对易用,识别率也还不错),所以这次准备做时,没有选择OpenCV。
虹软其实在无意间发现的,当时正在寻找开发库,正在测试Python的一个方案,就发现有新闻说虹软的识别库全面开放并且可以免费使用,而且是离线识别,所以就下载尝试了一下,发现识别率还不错,所以就暂定了采用虹软的识别方案。这里主要就给大家分享一下开发过程当中的一些坑和使用心得,顺便开源识别库的C# Wrapper。
SDK的C# Wrapper
由于虹软的库是采用C++开发的,而我的应用程序采用的是C#,所以,需要对库进行包装,便于C#的调用,包装的主要需求是可以在C#中快速方便的调用,无需考虑内存、指针等问题,并且具备一定的容错性。Wrapper库目前已经开源,大家可以到Github上进行下载,地址点击这里。Wrapper库基本上没有什么可以说的,无非是对PInvoke的包装,只是里面做了比较多的细节处理,屏蔽了调用细节,提供了相对高层的函数。有兴趣的可以看看源代码。
Wrapper库的使用例子
基本使用
注意使用之前,在虹软申请了新的Key后,需要同时更新libs下的三个dll文件,key和sdk的版本是相关联的,否则会抛出异常。
人脸检测(静态图片):
using (var detection = LocatorFactory.GetDetectionLocator("appId", "sdkKey"))
{
var image = Image.FromFile("test.jpg");
var bitmap = new Bitmap(image);
var result = detection.Detect(bitmap, out var locateResult);
//检测到位置信息在使用完毕后,需要释放资源,避免内存泄露
using (locateResult)
{
if (result == ErrorCode.Ok && locateResult.FaceCount > 0)
{
using (var g = Graphics.FromImage(bitmap))
{
var face = locateResult.Faces[0].ToRectangl