虹软的人脸识别sdk

  • 前言
  • 一、虹软是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结
    • 更新架构
    • 更新数据库(增加图片存储)

前言

最近偶尔看到了虹软sdk开放了活体检测的功能,以前记得19年的时候就关注过虹软的人脸识别免费开放的消息。现在正好拿来玩玩。


案例仅供参考

一、虹软是什么?

虹软是计算机视觉行业领先的算法服务提供商及解决方案供应商,服务于世界各地的客户,将领先的计算机视觉技术商业化应用在智能手机、智能汽车、智能家居、智能零售、互联网视频等领域,并且仍在不断探索新的领域与方向。

开放了人脸识别,人证核验和活体检测的sdk

二、使用步骤

1.引入库

1.使用C# 作为开发语言,选择了C++的sdk

去他们官网注册好账号后,可以选择不同的环境以及不同的sdk

2.

准备几张照片,我准备了三张照片。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201202085634135.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1eWFuZzE5OTU=,size_16,color_FFFFFF,t_70) 以下是建表语句: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201202085831428.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201202090028917.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1eWFuZzE5OTU=,size_16,color_FFFFFF,t_70)

username 是人员名字
userfeature 是特征,特征值在虹软的2.2版本里面使用intptr存储的,3.0 则使用byte[ ]存储。3.0会比较方便。直接转换成basestring 存储即可。
userfeaturesize 是字符数量


2.读入数据


在注册人脸这,添加以下代码。

 public class UserModel{public string username { get; set; }public string userfeature { get; set; }public int userfeaturesize { get; set; }}
                            //创建数据库对象SqlSugarClient db = new SqlSugarClient(new ConnectionConfig(){ConnectionString = ConnectionStringObject.ConnectionString,//连接符字串DbType = DbType.Sqlite,IsAutoCloseConnection = true,InitKeyType = InitKeyType.Attribute//从特性读取主键自增信息});
                                 UserModel usermodel = new UserModel(){username = "women2",userfeature = Convert.ToBase64String(feature.feature),userfeaturesize = feature.featureSize};db.Insertable(usermodel).ExecuteCommand();

在后面,在demo的基础上添加了后台按钮。

//初始化的时候读取
public bool InitUserFaces(){try{SqlSugarClient db = new SqlSugarClient(new ConnectionConfig(){ConnectionString = ConnectionStringObject.ConnectionString,//连接符字串DbType = DbType.Sqlite,IsAutoCloseConnection = true,InitKeyType = InitKeyType.Attribute//从特性读取主键自增信息});UserFaces = db.Queryable<UserModel>().ToList();db.Close();db.Dispose();return true;}catch (Exception ex){return false;//throw;}}public List<UserModel> UserFaces = new List<UserModel>();try{ 创建数据库对象SqlSugarClient db = new SqlSugarClient(new ConnectionConfig(){ConnectionString = ConnectionStringObject.ConnectionString,//连接符字串DbType = DbType.Sqlite,IsAutoCloseConnection = true,InitKeyType = InitKeyType.Attribute//从特性读取主键自增信息});var facelist = db.Queryable<UserModel>().ToList();//在点击开始的时候再坐下初始化检测,防止程序启动时有摄像头,在点击摄像头按钮之前将摄像头拔掉的情况initVideo();//必须保证有可用摄像头if (filterInfoCollection.Count == 0){MessageBox.Show("未检测到摄像头,请确保已安装摄像头或驱动!");return;}if (rgbVideoSource.IsRunning || irVideoSource.IsRunning){btnStartVideo.Text = "启用摄像头";//关闭摄像头if (irVideoSource.IsRunning){irVideoSource.SignalToStop();irVideoSource.Hide();}if (rgbVideoSource.IsRunning){rgbVideoSource.SignalToStop();rgbVideoSource.Hide();}//“选择识别图”、“开始匹配”按钮可用,阈值控件禁用ControlsEnable(true, chooseImgBtn, matchBtn, chooseMultiImgBtn, btnClearFaceList);txtThreshold.Enabled = false;exitVideoRGBFR = true;exitVideoRGBLiveness = true;}else{if (isCompare){//比对结果清除for (int i = 0; i < imagesFeatureList.Count; i++){imageList.Items[i].Text = string.Format("{0}号", i);}lblCompareInfo.Text = string.Empty;isCompare = false;}//“选择识别图”、“开始匹配”按钮禁用,阈值控件可用,显示摄像头控件txtThreshold.Enabled = true;rgbVideoSource.Show();irVideoSource.Show();ControlsEnable(false, chooseImgBtn, matchBtn, chooseMultiImgBtn, btnClearFaceList);btnStartVideo.Text = "关闭摄像头";//获取filterInfoCollection的总数int maxCameraCount = filterInfoCollection.Count;//如果配置了两个不同的摄像头索引if (rgbCameraIndex != irCameraIndex && maxCameraCount >= 2){//RGB摄像头加载rgbDeviceVideo = new VideoCaptureDevice(filterInfoCollection[rgbCameraIndex < maxCameraCount ? rgbCameraIndex : 0].MonikerString);rgbVideoSource.VideoSource = rgbDeviceVideo;rgbVideoSource.Start();//IR摄像头irDeviceVideo = new VideoCaptureDevice(filterInfoCollection[irCameraIndex < maxCameraCount ? irCameraIndex : 0].MonikerString);irVideoSource.VideoSource = irDeviceVideo;irVideoSource.Start();//双摄标志设为trueisDoubleShot = true;}else{//仅打开RGB摄像头,IR摄像头控件隐藏rgbDeviceVideo = new VideoCaptureDevice(filterInfoCollection[rgbCameraIndex <= maxCameraCount ? rgbCameraIndex : 0].MonikerString);rgbVideoSource.VideoSource = rgbDeviceVideo;rgbVideoSource.Start();irVideoSource.Hide();}//启动两个检测线程exitVideoRGBFR = false;exitVideoRGBLiveness = false;videoRGBLiveness();//videoRGBFR();videoRGBFRServer();}}catch (Exception ex){LogUtil.LogInfo(GetType(), ex);}private void videoRGBFRServer(){int index = 10000;ThreadPool.QueueUserWorkItem(new WaitCallback(delegate {while (true){//index--;//if (index == 0)//{//    index = 10000;//    existNewFace = true;//}if (exitVideoRGBFR){return;}try{//if (ableReadFaceInfo && existNewFace && handleQueue.Contains(faceIDTemp) && !livenessResult.Equals(livenessInitValue))if (ableReadFaceInfo && existNewFace  && !livenessResult.Equals(livenessInitValue)){ableReadFR = false;if (livenessResult.Equals(1) && rect.left != 0 && rect.right != 0 && rect.top != 0 && rect.bottom != 0){int result = -1;float similarity = 0f;for (int i = 0; i < frMatchTime; i++){if (exitVideoRGBFR){break;}Console.WriteLine(string.Format("faceid:{0},特征搜索第{1}次\r\n", "999", i + 1));Bitmap bitmapTemp = rgbVideoSource.GetCurrentVideoFrame();if (bitmapTemp == null){break;}//提取人脸特征FaceFeature feature = FaceUtil.ExtractFeature(videoRGBImageEngine, bitmapTemp, maxFace);similarity = 0f;result = compareFeatureServer(feature, out similarity);//得到比对结果if (result > -1){break;}}if (!result.Equals(-1)){//将比对结果放到显示消息中,用于最新显示trackRGBUnit.message = string.Format(" {0}号 {1},{2},Faceid:{3}", result, similarity, string.Format("RGB{0}", CommonUtil.TransLivenessResult(livenessResult)), UserFaces[result].username);}else{//显示消息trackRGBUnit.message = string.Format("RGB{0},Faceid:{1}", CommonUtil.TransLivenessResult(livenessResult), result);}}else{//显示消息trackRGBUnit.message = string.Format("RGB{0},Faceid:{1}", CommonUtil.TransLivenessResult(livenessResult), "999");}}}catch (Exception ex){Console.WriteLine(ex.Message);}finally{ableReadFR = true;}}}));}/// <summary>/// 得到feature比较结果/// </summary>/// <param name="feature"></param>/// <returns></returns>private int compareFeatureServer(FaceFeature feature, out float similarity){int result = -1;similarity = 0f;try{//如果人脸库不为空,则进行人脸匹配if (UserFaces != null && UserFaces.Count > 0){for (int i = 0; i < UserFaces.Count; i++){//调用人脸匹配方法,进行匹配videoRGBImageEngine.ASFFaceFeatureCompare(feature,new FaceFeature() {feature =  Convert.FromBase64String( UserFaces[i].userfeature),featureSize = UserFaces[i].userfeaturesize } , out similarity);if (similarity >= threshold){result = i;break;}}}}catch (Exception ex){LogUtil.LogInfo(GetType(), ex);}return result;}

ok 程序到这里就修改完成了。每次程序启动之后,会从bin文件夹下面的.db文件里面读取出所有的人脸。然后每次通过摄像头去匹配。 已测试,效果挺好,识别的很快。就是还有一些小问题。但是总体来说效果很好。

总结

gitee,代码地址:人脸识别

更新架构

这是官方的样例demo介绍,本文也是几乎差不多的原理,目前实现了小型智慧工地的人脸识别系统的设计。

以后有机会的话会更新成下图右边的c/s系统设计

更新数据库(增加图片存储)



总共两张表

记录一下:调试了虹软的人脸识别sdk,存到数据库中相关推荐

  1. java 基于虹软离线人脸识别SDK 2.0 最新版

    虹软人脸识别SDK之Java版,支持SDK 1.1+,以及当前最新版本2.0,滴滴,抓紧上车! JDK SDK Win release license status 前言 由于业务需求,最近跟人脸识别 ...

  2. 如何接入虹软免费人脸识别SDK

    背景: 虹软的人脸识别还是不错的,在官方注册一个账号,成为开发者,下载SDK的jar包,在开发者中心,找一个demo就可以开始做了,安装里边的逻辑,先看理解代码,然后就可以控制代码,完成自己想要的功能 ...

  3. 虹软AI 人脸识别SDK接入 — 性能优化篇(多线程)

    大家都嫌公司以前使用的刷卡门禁太麻烦,正好借这个机会开发一个人脸识别的门禁系统,采用的SDK是虹软公司开发的,接口调用比较简单. 一.虹软SDK接口性能 在配置为i5-7400 .16G内存的PC上测 ...

  4. 虹软android实现人脸比对,[Android]虹软arcface人脸识别SDK引擎使用总结

    虹软开放了人脸识别的SDK引擎(免费的哦),刚好有Android版的,就体验了一波.下面来说说Android版的SDK使用心得: ArcFace 虹软人脸认知引擎简介 目前开放的版本有人脸比对(1:1 ...

  5. 基于Android虹软免费人脸识别 SDK开发

    目前我们的应用内使用了 ArcFace 的人脸检测功能,其他的我们并不了解,所以这里就和大家分享一下我们的集成过程和一些使用心得 集成 ArcFace FD 的集成过程非常简单 在 ArcFace F ...

  6. 虹软免费人脸识别SDK注册指南

    2019独角兽企业重金招聘Python工程师标准>>> 成为开发者 三步完成账号的基本注册与认证: STEP1:点击注册虹软AI开放平台右上角注册选项,完成注册流程. STEP2:首 ...

  7. SpringBoot 基于向量搜索引擎及虹软人脸识别SDK的大规模人脸搜索

    SpringBoot 基于向量搜索引擎及虹软人脸识别SDK的大规模向量数据搜索 文章目录 SpringBoot 基于向量搜索引擎及虹软人脸识别SDK的大规模向量数据搜索 在线环境demo 在线环境说明 ...

  8. 关于虹软人脸识别SDK的接入

    背景: 虹软的人脸识别还是不错的,在官方注册一个账号,成为开发者,下载SDK的jar包,在开发者中心,找一个demo就可以开始做了,安装里边的逻辑,先看理解代码,然后就可以控制代码,完成自己想要的功能 ...

  9. 虹软安卓人脸识别初学

    1_下载SDK 进入虹软官网: 点击人脸识别SDK 进入开发者中心(注册登录) 新建应用并添加SDK 输入相应信息,确认 下载sdk 2_run示例代码注意事项 跑不起来的解决方法(SDK版本不一致) ...

  10. 虹软人脸识别SDK接入Milvus实现海量人脸快速检索

    虹软人脸识别SDK接入Milvus实现海量人脸快速检索 背景 虹软SDK及Milvus简介 开发环境 虹软人脸识别SDK使用简介 Milvus环境搭建 快速检索实现 人脸识别流程简介 快速检索 虹软S ...

最新文章

  1. RESTful之过滤Filtering
  2. 动态获得资源的路径大小写问题
  3. Load和Initialize的往死了问是一种怎样的体验
  4. python自动计算多个教学班的优秀率_第二个月课堂009python之总结(002)
  5. Android 渗透测试学习手册 第九章 编写渗透测试报告
  6. 在LINQPad中征服ASP.NET Boilerplate查询性能
  7. ubuntu 是基于debian gnu/linux,在 Ubuntu 或其它 GNU/Linux 系统下安装 Debian
  8. EDA技术实用教程 | 复习六 | 过程语句always
  9. Linux绚丽屏保xscreensaver安装
  10. SAP Pa studay,Material master
  11. 基于Foolnltk的《三体》文本命名实体分析
  12. 小红拿到了一个数组,她想取一些数使得取的数之和尽可能大,但要求这个和必须是 k 的倍数。你能帮帮她吗?
  13. 游戏实时语音SDK是怎么炼成的
  14. 稚晖君_瀚文机械键盘2
  15. PLSQL 误删表恢复及误删数据恢复
  16. matlab---s函数讲解之二连杆动力学仿真
  17. 如何将 APE 无损音乐转换成 FLAC音频文件
  18. android10热点验证身份,通过Android的AccountManager类进行Twitter身份验证
  19. Unity百度地图,支持PC,Android,iOS,支持添加模型,支持卫星图,街道图
  20. 李航《统计学习方法》第2版 第5章课后习题答案

热门文章

  1. GitHub Windows 客户端使用教程
  2. 实战项目 仿写小米商城 网页框架
  3. 教你如何在微信浏览器下载APP
  4. c++坦克大战 代码免费复制(附源码)
  5. 中国电信天翼网关路由器后台登录useradmin用户忘记密码的解决方法默认密码管理员密码工作人员密码
  6. 近世代数 [计算机数学专题(3)]
  7. js 车牌号模糊处理
  8. Ubuntu搜狗输入法, 输入中文时只显示拼音,不显示中文选择框
  9. 把docx格式的word文档转换为txt文件
  10. 腾讯魔镜壁纸所在位置