【温馨提示】本文共678字(不含代码),8张图。预计阅读时间需要6分钟。
人脸识别&比对发展到今天,已经是一个非常成熟的技术了,而且应用在生活的方方面面,比如手机、车站、天网等。
我从2016年就开始做人脸识别相关的app,到现在差不多4个年头了,用过的sdk有微软认知服务、旷视科技的face++、开源的opencv。
这里就之前我用过的做一下对比。
web apiwindows sdkandroid sdkios sdk离线使用价格速度微软认知服务️收费取决于网速旷视face++️️️️收费web版取决于网速
本地sdk离线版识别速度没测试过,但应该很快
opencv️️️️免费有点慢而今天介绍的这个虹软人脸识别服务,是免费的、免费的、免费的。
最重要的是它还支持离线识别,并且提供android、ios、c++、c#版sdk,现在已经升级到全新的3.0版本,支持活体识别。
web apiwindows sdkandroid sdkios sdk离线使用价格速度虹软人脸识别️️️️️免费版 – 需要在线激活
收费版 – 离线激活,提供更多高级服务
web版取决于网速
本地sdk离线版识别速度极快
图片来自官网
你可以去/d/file/titlepic/index.html cpu,而是选择和你下载的一样的架构。
新建一个winform解决方案,选择编译架构,把你下载的sdk/lib里面的文件放进对应的debug目录。
sdk需要一个id和key,这些你都可以在虹软开发者中心申请到。
private void initengines() {//在线激活引擎 如出现错误,1.请先确认从官网下载的sdk库已放到对应的bin中,2.当前选择的cpu为x86或者x64 int retcode = 0; try { retcode = asffunctions.asfactivation(appid, sdkkey); } catch (exception ex) { //禁用相关功能按钮 //controlnable(fal, choomultiimgbtn, matchbtn, btnclearfacelist, chooimgbtn); if (ex.message.contains("无法加载 dll")) { messagebox.show("请将sdk相关dll放入bin对应的x86或x64下的文件夹中!"); } el { messagebox.show("激活引擎失败!"); } return; } console.writeline("activate result:" + retcode); //初始化引擎 uint detectmode = detectionmode.asf_detect_mode_image;//image模式下检测脸部的角度优先值 int imagedetectfaceorientpriority = asf_orientpriority.asf_op_0_only; //人脸在图片中所占比例,如果需要调整检测人脸尺寸请修改此值,有效数值为2-32 int detectfacescaleval = 16; //最大需要检测的人脸个数 int detectfacemaxnum = 5; //引擎初始化时需要初始化的检测功能组合 int combinedmask = faceenginemask.asf_face_detect | faceenginemask.asf_facerecognition | faceenginemask.asf_age | faceenginemask.asf_gender | faceenginemask.asf_face3dangle; //初始化引擎,正常值为0,其他返回值请参考http://ai.arcsoft.com.cn/bbs/forum.php?mod=viewthread&tid=19&_dsign=dbad527e retcode = asffunctions.asfinitengine(detectmode, imagedetectfaceorientpriority, detectfacescaleval, detectfacemaxnum, combinedmask, ref pimageengine); console.writeline("initengine result:" + retcode); appendtext((retcode == 0) ? "引擎初始化成功!\r\n" : string.format("引擎初始化失败!错误码为:{0}\r\n", retcode)); }
要想识别人脸,首相要像指纹识别那样,把一个人的人脸事先录入进去,才可以实现识别。
我这里做一个简单的demo,输入一个名字,选择照片即可注册。
private void btnlectimagetoregister_click(object nder, eventargs e) { openfiledialog openfiledialog = new openfiledialog();香港大学怎么样 openfiledialog.title = "lect"; openfiledialog.filter = "image file|*.bmp;*.jpg;*.jpeg;*.png"; //openfiledialog.multilect = true; openfiledialog.filename = string.empty; if (openfiledialog.showdialog() == dialogresult.ok) { var numstart = imagepathlist.count; string filename = openfiledialog.filename; if (!checkimage(filename)) return; pictureboxlected.imagelocation = filename; currentleftfeature = intptr.zero; //人脸检测以及提取人脸特征 threadpool.queueurworkitem(new waitcallback(delegate { image image = imageutil.readfromfile(filename); if (image == null) { return; } if (image.width > 1536 || image.height > 1536) { image = imageutil.scaleimage(image, 1536, 1536); } if (image == null) { return; 人教版六年级上册数学期末试卷 } if (image.width % 4 != 0) { image = imageutil.scaleimage(image, image.width - (image.width % 4), image.height); } //人脸检测 asf_multifaceinfo multifaceinfo = faceutil.detectface(pimageeng七年级上册英语试卷ine, image); //判断检测结果 if (multifaceinfo.facenum > 0) { mrect rect = memoryutil.ptrtostructure<mrect>(multifaceinfo.facerects); image = imageutil.cutimage(image, rect.left, rect.top, rect.right, rect.bottom); } el { if (image != null) { image.dispo(); } return; } //提取人脸特征 asf_singlefaceinfo singlefaceinfo = new asf_singlefaceinfo(); image image1 = imageutil.readfromfile(filename); if (image1 == null) { return; } currentleftfeature = faceutil.extractfeature(pimageengine, image1, out singlefaceinfo); this.invoke(new action(delegate { if (singlefaceinfo.facerect.left == 0 && singlefaceinfo.facerect.right == 0) { appendtext(string.format("no face detected\r\r\n")); } el { appendtext(string.format("face landmark detected,[left:{0},right:{1},top:{2},bottom:{3},orient:{4}]\r\r\n", singlefaceinfo.facerect.left, singlefaceinfo.facerect.right, singlefaceinfo.facerect.top, singlefaceinfo.facerect.bottom, singlefaceinfo.faceorient)); imagesfeaturelist.add(currentleftfeatu马头琴的来历re); } })); if (image1 != null) { image1.dispo(); } })); } } private void btnregisterface_click(object nder, eventargs e) { if(string.isnullorempty(textboxname.text)) 全国二本排名 { messagebox.show("t a name for current person"); return; } imagesfeaturedictionary.add(currentleftfeature, textboxname.text); appendtext(string.format(textboxname.text + " register success!\r\r\n")); }
当把许多人脸录入到系统中后,我们就可以选择一个需要比对的图片,进行识别了。
private void btnlectimagetorecognize_click(object nder, eventargs e) { openfiledialog openfiledialog = new openfiledialog(); openfiledialog.title = "lect"; openfiledialog.filter = "image file|*.bmp;*.jpg;*.jpeg;*.png"; //openfiledialog.multilect = true; openfiledialog.filename = string.empty; if (openfiledialog.showdialog() == dialogresult.ok) { var numstart = imagepathlist.count; string filename = openfiledialog.filename; if (!checkimage(filename)) return; image1feature = intptr.zero; pictureboxtorecognize.imagelocation = filename; image srcimage = imageutil.readfromfile(filename); asf_singlefaceinfo singlefaceinfo = new asf_singlefaceinfo(); //提取人脸特征 image1feature = faceutil.extractfeature(pimageengine, srcimage, out singlefaceinfo); if (imagesfeaturelist.count == 0) { messagebox.show("请注册人脸!", "提示", messageboxbuttons.ok, messageboxicon.error); return; } if (image1feature == intptr.zero) { if (pictureboxtorecognize.image == null) { messagebox.show("请选择识别图!", "提示", messageboxbuttons.ok, messageboxicon.error); } el { messagebox.show("比对失败,识别图未提取到特征值!", "提示", messageboxbuttons.ok, messageboxicon.error); } return; } for (int i = 0; i < imagesfeaturedictionary.count; i++) { intptr feature = imagesfeaturedictionary.elementat(i).key; float similarity = 0f; int ret = asffunctions.asffacefeaturecompare(pimageengine, image1feature, feature, ref similarity); //增加异常值处理 if (similarity.tostring().indexof("e") > -1) similarity = 0f; if(similarity > threshold) { string name = imagesfeaturedictionary.elementat(i).value; appendtext("对比结果:" + name + " 可信度:" + similarity + "\r\n"); return; } } appendtext("无结果\r\n"); } }
本地离线识别最大的好处就是没有延迟,识别结果立马呈现。
本文只是简单介绍了如何使用虹软的离线sdk,进行人脸识别的方法,并且是图片的方式。
源码下载地址:https://github.com/hupo376787/arcfacedemo.git
如果需要摄像头,那么需要别的摄像头sdk来辅助实现。
如果以后有时间我会加上。
到此这篇关于c#版免费离线人脸识别——虹软arcsoft v3.0的文章就介绍到这了,更多相关c#离线人脸识别虹软内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 03:29:48,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/30fd6d39a5599f79c281720091f746f5.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:C#版免费离线人脸识别之虹软ArcSoft V3.0(推荐).doc
本文 PDF 下载地址:C#版免费离线人脸识别之虹软ArcSoft V3.0(推荐).pdf
留言与评论(共有 0 条评论) |