基于python、虹软实现人脸检测,人脸识别
2019独角兽企业重金招聘Python工程师标准>>>
虹软的人脸识别技术也是很强的,重要的是他免费提供了离线的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 timeAPPID = 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 = Truedef doFaceDetection(hFDEngine, inputImg): #对图像中的人脸进行定位faceInfo = []pFaceRes = POINTER(AFD_FSDK_FACERES)()ret = AFD_FSDK_StillImageFaceDetection(hFDEngine, byref(inputImg), byref(pFaceRes))
#ret 为0if ret != 0:print(u'AFD_FSDK_StillImageFaceDetection 0x{0:x}'.format(ret))return faceInfofaceRes = pFaceRes.contentsprint('******')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 faceInfodef loadImage(filePath):inputImg = ASVLOFFSCREEN()if bUseBGRToEngine: #truebufferInfo = ImageLoader.getBGRFromFile(filePath)inputImg.u32PixelArrayFormat = ASVL_COLOR_FORMAT.ASVL_PAF_RGB24_B8G8R8inputImg.i32Width = bufferInfo.widthinputImg.i32Height = bufferInfo.heightinputImg.pi32Pitch[0] = bufferInfo.width*3inputImg.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_I420inputImg.i32Width = bufferInfo.widthinputImg.i32Height = bufferInfo.heightinputImg.pi32Pitch[0] = inputImg.i32WidthinputImg.pi32Pitch[1] = inputImg.i32Width // 2inputImg.pi32Pitch[2] = inputImg.i32Width // 2inputImg.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.bufferreturn inputImgif __name__ == u'__main__':t=time.time()print(u'#####################################################')# init EnginepFDWorkMem = 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 为0if 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 DetectfaceInfos = 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 Enginecv2.imshow('tuxiang',frame)cv2.waitKey(1)print('所用时间为{} '.format(time.time()-t)) #不进行保存图片 0.12s 保存图片0.16stime.sleep(1)CLibrary.free(pFDWorkMem)print(u'#####################################################')
运行结果
运行时间0.14800000190734863
底层是c写的所以运行起来还是比较快的 使用的是离线的sdk配置需要动态链接库fd (官网有)
对于虹软的这个 我只会用 里面的代码很大一部分都是不懂的,因为那些函数都被封装起来了,定义看不到也看不懂。
opencv就是用来显示照片以及标框 time用来测时间和暂停
对于虹软的人脸识别,是使用了另一种动态链接库fr,跟这个类似,代码有些差别,等做出来基于虹软的实时的人脸识别再分享出来。
转载于:https://my.oschina.net/u/3970172/blog/3032564
基于python、虹软实现人脸检测,人脸识别相关推荐
- 基于opencv的人脸检测与识别(python)(1)
基于opencv的人脸检测与识别(python语言)(1) 人脸检测和识别技术就目前而言,已经相对成熟,各类算法层出不穷,这都归功于各位奋斗在一线的大佬的努力(站在巨人的肩膀上的感觉就是爽).本文是参 ...
- python人脸识别库_基于Python的face_recognition库实现人脸识别
Python Python开发 Python语言 基于Python的face_recognition库实现人脸识别 一.face_recognition库简介 face_recognition是Pyt ...
- mtcnn人脸检测python_基于mtcnn和facenet的实时人脸检测与识别系统开发
简介:本文主要介绍了实时人脸检测与识别系统的详细方法.该系统基于python/opencv2/tensorflow环境,实现了从摄像头读取视频,检测人脸,识别人脸的功能.本系统代码地址:real ti ...
- python识别人脸多种属性_人脸检测及识别python实现系列(4)——卷积神经网络(CNN)入门...
人脸检测及识别python实现系列(4)--卷积神经网络(CNN)入门 上篇博文我们准备好了2000张训练数据,接下来的几节我们将详细讲述如何利用这些数据训练我们的识别模型.前面说过,原博文给出的训练 ...
- 人脸检测和识别的开源库总结
背景 人脸相关的任务有以下几种: 人脸检测(将图片中包含的人脸进行初步定位,以及关键点如眼睛.鼻子.嘴巴等更精细的定位,文章封面即为典型人脸检测结果): 人脸跟踪(视频中跟踪人脸位置变化): 人脸验证 ...
- 树莓派4B-Python-四种人脸检测/人脸识别
关于人脸检测/人脸识别 本人目前用树莓派4B仅了解到了人脸检测/人脸识别的四种方法: 使用OpenCV 使用OpenMV 使用face_recognition库 使用百度智能云的人脸识别 树莓派4B- ...
- 腾讯AI Lab刷新人脸检测与识别两大测评国际记录,技术日调用超六亿
来源:腾讯AI实验室 概要:人脸检测是让机器找到图像视频中所有人脸并精准定位其位置信息,人脸识别是基于人脸图像自动辨识其身份,两者密切相关,前者是后者的前提和基础. 腾讯AI Lab在国际最大.最难的 ...
- 测一测!中科视拓免费开放口罩人脸检测与识别技术
全民抗疫形势下,口罩已成为复工复产的标配.对于人脸识别技术厂商而言,两个应用需求应运而生: 1.检测人脸是否佩戴口罩: 2.在戴口罩的情况下依旧能够实现高精度人脸识别. 疫情初期,中科视拓紧急研发口罩 ...
- (转)如何应用MTCNN和FaceNet模型实现人脸检测及识别
https://zhuanlan.zhihu.com/p/37705980 人脸检测与人脸识别 人脸检测是对人脸进行识别和处理的第一步,主要用于检测并定位图片中的人脸,返回高精度的人脸框坐标及人脸特征 ...
- 目标人脸检测与识别(计算机视觉)
一.实验目的 通过python 语言编程设计人脸检测算法,以此人脸作为训练样本,训练目标人脸模型,进一步实现目标人脸的识别.通过上述编程促进学生理解并掌握人脸检测及识别的相关原理,同时培养学生的编程能 ...
最新文章
- Java面试题大全带答案 110道(持续更新)
- MSSQL2005 手工盲注详解
- adb devices unauthorized解决方法
- Qt CMake命令参考
- string.h包含哪些函数_Excel进行数据分析常用方法及函数汇总—【杏花开生物医药统计】...
- MySQL2索引优化
- Netty工作笔记0083---通过自定义协议解决粘包拆包问题1
- 关于手机端适配的问题(rem,页面缩放)
- 利用css和js实现页面的标签效果。(标签个数可以动态变化)
- iis如何连接mysql_iis怎么连接数据库
- 图像处理ORL--训练集及测试集建立--Matlab实现
- jQuery中的siblings()的用法
- 2018级《程序设计基础(B)I》期末上机考试 重现(第二场)
- 百度对网站就像西门庆对潘金莲
- 信息安全工程第四章网络安全体系与网络安全模型要点小结
- java银器锁,银器保值吗?S925、S990、S999又是什么银……
- 弘辽科技:淘宝如何提升店铺流量?需要准备什么?
- GJM : 使用浏览器的计算力,对抗密码破解 [转载]
- 2021年高考大连8中成绩查询,2021年新高考适应性考试成绩怎么查?八省联考成绩可以保留吗?...
- 如何使用remix编写solidity智能合约并部署上链