虹软的人脸识别技术也是很强的,重要的是他免费提供了离线的sdk,还提供了实例,这个是目前几家研究人脸识别的大公司里面少有的。识别能力正常用还是可以的。我这个代码是调用的离线sdk实现的

```
from arcsoft import CLibrary, ASVL_COLOR_FORMAT, ASVLOFFSCREEN,c_ubyte_p,FaceInfo
from arcsoft.utils import BufferInfo, ImageLoader
from arcsoft.AFD_FSDKLibrary import *
from ctypes import *
import traceback
import cv2
import time APPID = c_char_p(b'your id')
FD_SDKKEY = c_char_p(b'your key')
FD_WORKBUF_SIZE = 20 * 1024 * 1024
MAX_FACE_NUM = 50
bUseYUVFile = False
bUseBGRToEngine = True def doFaceDetection(hFDEngine, inputImg): #对图像中的人脸进行定位
faceInfo = [] pFaceRes = POINTER(AFD_FSDK_FACERES)()
ret = AFD_FSDK_StillImageFaceDetection(hFDEngine, byref(inputImg), byref(pFaceRes))
#ret 为0 if ret != 0:
print(u'AFD_FSDK_StillImageFaceDetection 0x{0:x}'.format(ret))
return faceInfo
faceRes = pFaceRes.contents
print('******') facecont=faceRes.nFace #faceRes 是一个对象所以 输出会是一个地址值 而他的一个属性nface是表示的是人脸的个数
print('%d 个人脸' %facecont) if faceRes.nFace > 0:
for i in range(0, faceRes.nFace):
rect = faceRes.rcFace[i]
orient = faceRes.lfaceOrient[i]
faceInfo.append(FaceInfo(rect.left,rect.top,rect.right,rect.bottom,orient)) return faceInfo def loadImage(filePath): inputImg = ASVLOFFSCREEN() if bUseBGRToEngine: #true
bufferInfo = ImageLoader.getBGRFromFile(filePath)
inputImg.u32PixelArrayFormat = ASVL_COLOR_FORMAT.ASVL_PAF_RGB24_B8G8R8
inputImg.i32Width = bufferInfo.width
inputImg.i32Height = bufferInfo.height
inputImg.pi32Pitch[0] = bufferInfo.width*3
inputImg.ppu8Plane[0] = cast(bufferInfo.buffer, c_ubyte_p)
inputImg.ppu8Plane[1] = cast(0, c_ubyte_p)
inputImg.ppu8Plane[2] = cast(0, c_ubyte_p)
inputImg.ppu8Plane[3] = cast(0, c_ubyte_p)
else:
bufferInfo = ImageLoader.getI420FromFile(filePath)
inputImg.u32PixelArrayFormat = ASVL_COLOR_FORMAT.ASVL_PAF_I420
inputImg.i32Width = bufferInfo.width
inputImg.i32Height = bufferInfo.height
inputImg.pi32Pitch[0] = inputImg.i32Width
inputImg.pi32Pitch[1] = inputImg.i32Width // 2
inputImg.pi32Pitch[2] = inputImg.i32Width // 2
inputImg.ppu8Plane[0] = cast(bufferInfo.buffer, c_ubyte_p)
inputImg.ppu8Plane[1] = cast(addressof(inputImg.ppu8Plane[0].contents) + (inputImg.pi32Pitch[0] * inputImg.i32Height), c_ubyte_p)
inputImg.ppu8Plane[2] = cast(addressof(inputImg.ppu8Plane[1].contents) + (inputImg.pi32Pitch[1] * inputImg.i32Height // 2), c_ubyte_p)
inputImg.ppu8Plane[3] = cast(0, c_ubyte_p)
inputImg.gc_ppu8Plane0 = bufferInfo.buffer return inputImg if __name__ == u'__main__':
t=time.time()
print(u'#####################################################') # init Engine
pFDWorkMem = CLibrary.malloc(c_size_t(FD_WORKBUF_SIZE))
hFDEngine = c_void_p()
ret = AFD_FSDK_InitialFaceEngine(APPID, FD_SDKKEY, pFDWorkMem, c_int32(FD_WORKBUF_SIZE), byref(hFDEngine), AFD_FSDK_OPF_0_HIGHER_EXT, 32, MAX_FACE_NUM)
#ret 为0
if ret != 0:
CLibrary.free(pFDWorkMem)
print(u'AFD_FSDK_InitialFaceEngine ret 0x{:x}'.format(ret))
exit(0)
#--------------------------------以上部分两个函数以及主函数的几条语句不变----------------------------------------------------------- filePath = '001.jpg'
inputImg = loadImage(filePath) #调用loadImage函数 返回一种格式(目前还不知道这种格式是什么) frame=cv2.imread(filePath)
# do Face Detect faceInfos = doFaceDetection(hFDEngine, inputImg) #调用dofaceDetection函数 进行图像处理检测人脸
#print('faceInfos %s'% faceInfos[0]) for i in range(0, len(faceInfos)):
rect = faceInfos[i]
print(u'{} ({} {} {} {}) orient {}'.format(i, rect.left, rect.top, rect.right, rect.bottom, rect.orient))
cv2.rectangle(frame, (rect.left, rect.top), (rect.right, rect.bottom), (0, 0, 255), 2)
cropimg=frame[rect.top:rect.bottom,rect.left:rect.right]# 使用opencv裁剪照片 把人脸的照片裁剪下来
cv2.imwrite('crop-photo/'+str(i)+'.jpg',cropimg) # 把人脸照片保存下来 AFD_FSDK_UninitialFaceEngine(hFDEngine) # release Engine
cv2.imshow('tuxiang',frame)
cv2.waitKey(1)
print('所用时间为{} '.format(time.time()-t)) #不进行保存图片 0.12s 保存图片0.16s
time.sleep(1) CLibrary.free(pFDWorkMem)
print(u'#####################################################')

  

运行结果
![](https://oscimg.oschina.net/oscnet/7fc55619ab96c8fae01e434bb040cb2269d.jpg)

运行时间0.14800000190734863

底层是c写的所以运行起来还是比较快的  使用的是离线的sdk配置需要动态链接库fd (官网有)

对于虹软的这个 我只会用 里面的代码很大一部分都是不懂的,因为那些函数都被封装起来了,定义看不到也看不懂。

opencv就是用来显示照片以及标框  time用来测时间和暂停

对于虹软的人脸识别,是使用了另一种动态链接库fr,跟这个类似,代码有些差别,等做出来基于虹软的实时的人脸识别再分享出来。

基于python Arcface 实现人脸检测和识别的更多相关文章

  1. 人脸检测及识别python实现系列(3)——为模型训练准备人脸数据

    人脸检测及识别python实现系列(3)——为模型训练准备人脸数据 机器学习最本质的地方就是基于海量数据统计的学习,说白了,机器学习其实就是在模拟人类儿童的学习行为.举一个简单的例子,成年人并没有主动 ...

  2. 人脸检测及识别python实现系列(1)——配置、获取实时视频流

    人脸检测及识别python实现系列(1)——配置.获取实时视频流 1. 前言 今天用多半天的时间把QQ空间里的几篇年前的旧文搬到了这里,算是完成了博客搬家.QQ空间里还剩下一些记录自己数学学习路线的学 ...

  3. ArcFace Android 人脸检测与人脸识别集成分享

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

  4. 人脸检测及识别python实现系列(2)——识别出人脸

    人脸检测及识别python实现系列(2)——识别出人脸 http://www.cnblogs.com/neo-T/p/6430583.html

  5. 人脸检测及识别python实现系列(6)——终篇:从实时视频流识别出“我”

    人脸检测及识别python实现系列(6)——终篇:从实时视频流识别出“我” 终于到了最后一步,激动时刻就要来临了,先平复一下心情,把剩下的代码加上,首先是为Model类增加一个预测函数: #识别人脸 ...

  6. 人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型

    人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型 经过前面稍显罗嗦的准备工作,现在,我们终于可以尝试训练我们自己的卷积神经网络模型了.CNN擅长图像处理,keras库的te ...

  7. 人脸检测及识别python实现系列(4)——卷积神经网络(CNN)入门

    人脸检测及识别python实现系列(4)——卷积神经网络(CNN)入门 上篇博文我们准备好了2000张训练数据,接下来的几节我们将详细讲述如何利用这些数据训练我们的识别模型.前面说过,原博文给出的训练 ...

  8. 基于OpenCv的人脸检测、识别系统学习制作笔记之三

    1.在windows下编写人脸检测.识别系统.目前已完成:可利用摄像头提取图像,并将人脸检测出来,未进行识别. 2.在linux下进行编译在windows环境下已经能运行的代码. 为此进行了linux ...

  9. 基于Haar特征Adaboost人脸检测级联分类

    基于Haar特征Adaboost人脸检测级联分类 基于Haar特征Adaboost人脸检测级联分类,称haar分类器. 通过这个算法的名字,我们能够看到这个算法事实上包括了几个关键点:Haar特征.A ...

随机推荐

  1. AngularJS中angular.min.js:80 Error: [ng:areq] http://errors.angularjs.org/1.2.9/ng/areq

    报出来的时候,出现这种错误,是因为在引入控制器的时候没有引入成功,我遇到这个错误是在因为没有将父控制器引入到子控制器中.

  2. Django自定义装饰器

    装饰器模板: def decorator(func): def wrapper(*args,**kwargs): return func(*args,**kwargs) return wrapper ...

  3. curl命令基本使用小总结

    curl 下载文件 -o:将文件保存为命令行中指定的文件名的文件中 -O:使用URL中默认的文件名保存文件到本地 --limit-rate:限速 -C:对大文件使用断点续传功能 --silent:不显 ...

  4. Python3 freetds.conf odbcinst.ini odbc.ini 之间的关系

    Python3 freetds.conf odbcinst.ini odbc.ini 之间的关系 三者分别是FreeTDS和UnixODBC的配置文件: 1,FreeTDS中的freetds.conf ...

  5. 【题解】Luogu P2157 [SDOI2009]学校食堂

    原题传送门:P2157 [SDOI2009]学校食堂 一看题目就知道是状压dp 设f[i][j][k]表示第1到i-1个人都吃完了饭,第i个人以及后面的7个人是否打饭的状态为j,当前最后打饭的人的编号 ...

  6. Bootstrap3基础 form-horizontal 表单元素横向布局 简单示例

      内容 参数   OS   Windows 10 x64   browser   Firefox 65.0.2   framework     Bootstrap 3.3.7   editor    ...

  7. 【BZOJ2724】【Violet 6】蒲公英

    蒲公英/分块入门九Byhzwer 辣鸡我复制粘贴题面格式极其丑陋,各位看原题面啦. [题目描述] 在乡下的小路旁种着许多蒲公英,而我们的问题正是与这些蒲公英有关. 为了简化起见,我们把所有的蒲公英看成 ...

  8. Python hasattr() 函数 // python中hasattr()、getattr()、setattr()函数的使用

    http://www.runoob.com/python/python-func-hasattr.html https://www.cnblogs.com/zanjiahaoge666/p/74752 ...

  9. ZOJ 3963 Heap Partition(multiset + stl自带二分 + 贪心)题解

    题意:给你n个数字s1~sn,要你把它们组成一棵棵二叉树,对这棵二叉树来说,所有节点来自S,并且父节点si<=子节点sj,并且i<j,问你树最少几棵二叉数.树 思路:贪心.我们往multi ...

  10. 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T4(模拟)

    随便模拟下就过了qwq 然后忘了特判WA了QwQ #include <cstdio> #include <algorithm> #include <cstring> ...