前言:

虹软sdk3.0是目前用过的最方便,效果最好的且免费的离线人脸识别SDK。
提供的编程语音没有python,有大佬用c++代码接口转成python调用的,
我在此基础上完善了一些功能,能够实现高精度多人脸实时人脸识别
并提供了年龄/性别识别,活体检测,人脸3D角度等功能。

曾在2018年使用过虹软SDK1.0并写了博客 阅读链接

参考代码

这里参考了大佬的代码 我在他基础上再做实时人脸识别的开发。
下面是原文链接
https://my.oschina.net/u/4584428/blog/4712244
https://gitee.com/shellcoder/ArcFace-python

下面教程只列出来重点部分 讲解
其余部分 以及整个流程 可以自己看代码理解 并不是很麻烦
官方文档也给到比较详细
使用方法

  1. 将下载好的sdk3.0中的动态链接库放入到lib文件夹中
  2. demo_cam文件中添加自己的 APP_ID 和SDK_key
  3. 注册图片在文件夹asserts中 文件名就是这个人的信息

我完善后的项目GitHub 链接

获取SDK

  1. 进入虹软官网 链接
    登陆或者注册账号。
  2. 进入 链接 下载虹软SDK3.0
  3. 点击免费获取 选择平台 版本 语言 和应用(自己创建)
  4. 确认之后即可 下载相关SDK
  5. 关于APP_ID 和SDK_key
    上面的APP_ID 和SDK_key 要写入到代码中,是用于激活的。
    第一次运行代码需要联网,因为会做激活操作,首次运行激活成功后会得到一个ArcFace64.dat文件,当有此文件以后,可以不用执行激活代码。
    个人认证用户,每年免费激活限制 100 台终端。
  6. SDK目录说明

人脸检测和人脸识别

把c++的接口调出来python使用

  1. 激活 调用函数ASFOnlineActivation
    #激活接口,首次需联网激活
    res = ASFOnlineActivation(APPID, SDKKey)

    返回res 为状态码 如果是0或90114则为成功激活
    #获取激活文件信息
    res,activeFileInfo = ASFGetActiveFileInfo()

    能够返回SDK版本以及本机信息等 同样res为状态码 0位正确

  2. 初始化
    首先获取人脸识别引擎
    ArcFace() 创建一个对象

    初始化接口
    face_engine.ASFInitEngine(ASF_DETECT_MODE_IMAGE,ASF_OP_0_ONLY,30,10,5)

    • detectMode: VIDEO 模式/IMAGE 模式 ,VIDEO 模式:处理连续帧的图像数据 IMAGE 模式:处理单张的图像数据
    • detectFaceOrientPriority: 人脸检测角度,推荐单一角度检测;IMAGE 模式下不支持全角度(ASF_OP_0_HIGHER_EXT)检测
    • detectFaceScaleVal: 识别的最小人脸比例(图片长边与人脸框长边的比值),VIDEO 模式取值范围[2,32],推荐值为 16 ,IMAGE 模式取值范围[2,32],推荐值为 30
    • detectFaceMaxNum: 最大需要检测的人脸个数,取值范围[1,50]
    • combinedMask: 需要启用的功能组合,可多选 人脸检测为1 人脸特征为4 年龄检测8 性别检测16 RGB活体128 红外活体1024 选择多个功能时加起来就可以了。(比如上面我使用的是人脸识别 需要人脸检测和人脸特征 就是1+4 =5)
  3. 预处理
    需要注意的是 输入端图片宽度必须是4的倍数
    这个时候就需要对输入的图片尺寸进行处理 否则会报错

    def LoadImg(imagePath):"""将输入图片长和 宽都变成4的倍数 符合要求"""img = cv2.imdecode(np.fromfile(imagePath,dtype=np.uint8),-1)  # 读取中文命名的图片#img = cv2.imread(imagePath)sp = img.shapeimg = cv2.resize(img, (sp[1]//4*4, sp[0]//4*4))return img
    

    输入时图片的路径 输出是处理好的已经读取的图片

  4. 检测人脸 并 提取人脸特征

    img1 = cv2.imread ("asserts/1.jpg")
    #检测第一张图中的人脸
    res,detectedFaces1 = face_engine.ASFDetectFaces(img1)
    #print(detectedFaces1)  #图片中人脸信息
    if res==MOK:single_detected_face1 = ASF_SingleFaceInfo()single_detected_face1.faceRect = detectedFaces1.faceRect[0]single_detected_face1.faceOrient = detectedFaces1.faceOrient[0]res ,face_feature1= face_engine.ASFFaceFeatureExtract(img1,single_detected_face1)if (res!=MOK):print ("ASFFaceFeatureExtract 1 fail: {}".format(res))
    else:print("ASFDetectFaces 1 fail: {}".format(res))
    

    使用函数 face_engine.ASFDetectFaces()检测人脸
    获取到图片中的人脸坐标(list) 人脸角度(list) 人脸个数(int)

    使用ASFFaceFeatureExtract() 提取人脸特征
    获取到特征 用于人脸比对

  5. 人脸比对

res,score = face_engine.ASFFaceFeatureCompare(face_feature1,face_feature2)
输入的是两个人脸的人脸特征 返回的第一个是状态码 第二个是相似度
普通照片 阈值0.8即可

  1. 年龄 性别等其他
    在初始化引擎时指定的功能内 即是加上 需要添加的功能
    获取年龄
res = face_engine.ASFProcess(img1,detectedFaces1,processMask)
print(processMask)
if res == MOK:# 获取年龄res,ageInfo = face_engine.ASFGetAge()
ageInfo即是检测到的年龄。其他功能获取方式类似 可以参考代码

实时人脸识别

这里面使用到了官方提到的faceID即是 在判断同一个人的情况下就不再多次进行人脸特征提取进行人脸识别
这样就能减少运行时间。

选取的一张运行截图

但是如果第一章faceID判断失误会导致后面的全部判断错。为了防止这种情况发生,在代码里面进行了判断 如果faceID连续出现了5帧 则将进行重新识别。

else

多线程人脸识别还没搞懂 还没尝试怎么做

如果文章有帮助到你,关注 点赞 收藏

研究的其他人脸图像相关博客推荐

  1. 大公司API SDK调用
    基于python、face++实现人脸检测、人脸识别
    基于python、虹软实现人脸检测,人脸识别
    基于python3,百度AI实现人脸检测,人脸识别
  2. 使用现有库函数
    基于python3、 face_recognition 实现人脸检测,人脸识别
    基于Python,dlib实现人脸检测
    基于Python,opencv实现人脸检测
  3. 制作的完整开源项目
    基于海康摄像头进行人脸识别
    python人脸识别、语音合成、智能签到系统
    人脸识别、语音识别系统
    使用树莓派实现的口罩检测

基于python,虹软sdk3.0实现的实时人脸识别相关推荐

  1. 基于Python、Keras和OpenCV的实时人脸活体检测

    作者|Jordan Van Eetveldt 编译|Flin 来源|towardsdatascience 你在互联网上找到的大多数人脸识别算法和研究论文都遭受照片攻击.这些方法在检测和识别来自网络摄像 ...

  2. 活体检测算法 python_基于Python、Keras和OpenCV的实时人脸活体检测

    作者|Jordan Van Eetveldt 编译|Flin 来源|towardsdatascience 你在互联网上找到的大多数人脸识别算法和研究论文都遭受照片攻击.这些方法在检测和识别来自网络摄像 ...

  3. python人脸识别库_基于facenet的实时人脸识别系统

    facenet_facerecognition opencv+mtcnn+facenet+python+tensorflow 实现实时人脸识别 Abstract:本文记录了在学习深度学习过程中,使用o ...

  4. Android基于虹软(ArcSoft)实现从0到1的人脸识别demo

    Android基于虹软(ArcSoft)实现从0到1的人脸识别demo 1.在虹软的开发者中心创建一个自己的应用,将APP_ID与SDK_KEY记录下来,后面会用到.创建完后就可以下载SDK了. 2. ...

  5. Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别

    Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 # -*- codin ...

  6. gpu训练cnn人脸识别准确率_opencv+mtcnn+facenet+python+tensorflow 实现实时人脸识别

    opencv+mtcnn+facenet+python+tensorflow 实现实时人脸识别 Abstract:本文记录了在学习深度学习过程中,使用opencv+mtcnn+facenet+pyth ...

  7. opencv python 人脸识别 相似度_OpenCV+Tensorflow实现实时人脸识别演示

    原标题:OpenCV+Tensorflow实现实时人脸识别演示 Facenet网络介绍 FaceNet是谷歌提出的人脸识别模型,它跟其他人脸识别模型最大的一个不同就是它不是一个中间层输出,而是直接在欧 ...

  8. mtcnn人脸检测python_opencv+mtcnn+facenet+python+tensorflow 实现实时人脸识别

    Abstract:本文记录了在学习深度学习过程中,使用opencv+mtcnn+facenet+python+tensorflow,开发环境为ubuntu18.04,实现局域网连接手机摄像头,对目标人 ...

  9. 基于FaceNet的实时人脸识别训练

    FaceNet人脸特征提取 FaceNet是一种用于提取人脸图像特征的深度神经网络.它由谷歌研究人员 Schroff 等人提出. 论文地址:https://arxiv.org/abs/1503.038 ...

最新文章

  1. SQLite简介与安装
  2. 如何搞垮一个技术大牛?
  3. Mozilla:火狐操作系统是巨大而艰难的一步“
  4. shell获取当前进程pid和上一个进程pid
  5. java响应鼠标滚轮事件_一文读懂鼠标滚轮事件(wheelEvent)
  6. php框架中什么是渲染,thinkPHP5框架渲染模板的3种方式简述
  7. 线性条件随机场代码解读
  8. 软件测试颗粒度,测试用例粒度粗细的划分
  9. Spring读书笔记(一)
  10. MATLAB简介与基础知识
  11. 如何在Cesium中加载谷歌离线影像数据
  12. Matlab GUI设计——文件读取和保存uigetfile,uiputfile
  13. WIN10虚拟机安装教程
  14. win10系统电脑分辨率异常解决办法
  15. 戴维斯分校 计算机硕士,加州大学戴维斯分校计算机研究生录取条件是什么?
  16. Python 实现端口扫描器
  17. Vue前端如何与后端进行数据交互
  18. ora-600汇总Ora-00600 错误的代码含义及常用查询
  19. 融合多策略的黄金正弦黑猩猩优化算法
  20. thermal啥意思_thermal是什么意思?

热门文章

  1. php一维数组的定义,PHP 数组定义、遍历的实现方法
  2. 【数学分析】一致连续的一些证明方法
  3. 异常值 识别与处理方法
  4. 三个案例详解不同网段之间如何互通
  5. 整整26本!由单墫教授主编、葛军等人操刀的高中数学教材都在这里!
  6. java中byte和short类型的相互转换(不是用隐式转换)
  7. 基于C++如何使用EGE做一个简单的坦克大战游戏
  8. 【含源码】用python做游戏有多简单好玩
  9. python数据挖掘课程 十.Pandas、Matplotlib、PCA绘图实用代码补充
  10. 免费论文检测 论文查重 软件 系统 论文免费检测 论文抄袭检测大师