python写的工具(python调用虹软2.0第三版的具体使用)
类别:脚本大全 浏览量:108
时间:2022-01-26 01:01:55 python写的工具
python调用虹软2.0第三版的具体使用这一版,对虹软的功能进行了一些封装,添加了人脸特征比对,比对结果保存到文件,和从文件提取特征进行比对,大体功能基本都已经实现,可以进行下一步的应用开发了
face_class.py
|
from ctypes import * #人脸框 class MRECT(Structure): _fields_ = [(u 'left1' ,c_int32),(u 'top1' ,c_int32),(u 'right1' ,c_int32),(u 'bottom1' ,c_int32)] #版本信息 版本号,构建日期,版权说明 class ASF_VERSION(Structure): _fields_ = [( 'Version' ,c_char_p),( 'BuildDate' ,c_char_p),( 'CopyRight' ,c_char_p)] #单人人脸信息 人脸狂,人脸角度 class ASF_SingleFaceInfo(Structure): _fields_ = [( 'faceRect' ,MRECT),( 'faceOrient' ,c_int32)] #多人人脸信息 人脸框数组,人脸角度数组,人脸数 class ASF_MultiFaceInfo(Structure): # _fields_=[('faceRect',POINTER(MRECT)),('faceOrient',POINTER( c_int32)),('faceNum',c_int32)] _fields_ = [(u 'faceRect' ,POINTER(MRECT)),(u 'faceOrient' ,POINTER(c_int32)),(u 'faceNum' , c_int32)] # _fields_=[(u'faceRect',MRECT*50),(u'faceOrient',c_int32*50),(u'faceNum',c_int32)] #人脸特征 人脸特征,人脸特征长度 class ASF_FaceFeature(Structure): _fields_ = [( 'feature' ,c_void_p),( 'featureSize' ,c_int32)] #自定义图片类 class IM: def __init__( self ): self .filepath = None self .date = None self .width = 0 self .height = 0 |
face_dll.py
|
from ctypes import * from face_class import * wuyongdll = CDLL( 'd:\python\Test\Face\lib\X64\libarcsoft_face.dll' ) dll = CDLL( 'd:\python\Test\Face\lib\X64\libarcsoft_face_engine.dll' ) dllc = cdll.msvcrt ASF_DETECT_MODE_VIDEO = 0x00000000 ASF_DETECT_MODE_IMAGE = 0xFFFFFFFF c_ubyte_p = POINTER(c_ubyte) #激活 jihuo = dll.ASFActivation jihuo.restype = c_int32 jihuo.argtypes = (c_char_p,c_char_p) #初始化 chushihua = dll.ASFInitEngine chushihua.restype = c_int32 chushihua.argtypes = (c_long,c_int32,c_int32,c_int32,c_int32,POINTER(c_void_p)) #人脸识别 shibie = dll.ASFDetectFaces shibie.restype = c_int32 shibie.argtypes = (c_void_p,c_int32,c_int32,c_int32,POINTER(c_ubyte),POINTER(ASF_MultiFaceInfo)) #特征提取 tezheng = dll.ASFFaceFeatureExtract tezheng.restype = c_int32 tezheng.argtypes = (c_void_p,c_int32,c_int32,c_int32,POINTER(c_ubyte),POINTER(ASF_SingleFaceInfo),POINTER(ASF_FaceFeature)) #特征比对 bidui = dll.ASFFaceFeatureCompare bidui.restype = c_int32 bidui.argtypes = (c_void_p,POINTER(ASF_FaceFeature),POINTER(ASF_FaceFeature),POINTER(c_float)) malloc = dllc.malloc free = dllc.free memcpy = dllc.memcpy malloc.restype = c_void_p malloc.argtypes = (c_size_t, ) free.restype = None free.argtypes = (c_void_p, ) memcpy.restype = c_void_p memcpy.argtypes = (c_void_p, c_void_p, c_size_t) |
face_function.py
|
import face_dll,face_class from ctypes import * import cv2 from io import BytesIO # from Main import * Handle = c_void_p() c_ubyte_p = POINTER(c_ubyte) # 激活函数 def JH(appkey,sdkey): ret = face_dll.jihuo(appkey,sdkey) return ret # 初始化函数 def CSH(): # 1:视频或图片模式,2角度,3最小人脸尺寸推荐16,4最多人脸数最大50,5功能,6返回激活句柄 ret = face_dll.chushihua( 0xFFFFFFFF , 0x1 , 16 , 50 , 5 ,byref(Handle)) # Main.Handle=Handle return ret,Handle # cv2记载图片并处理 def LoadImg(im): img = cv2.imread(im.filepath) sp = img.shape img = cv2.resize(img,(sp[ 1 ] / / 4 * 4 ,sp[ 0 ] / / 4 * 4 )) sp = img.shape im.data = img im.width = sp[ 1 ] im.height = sp[ 0 ] return im def RLSB(im): faces = face_class.ASF_MultiFaceInfo() img = im.data imgby = bytes(im.data) imgcuby = cast(imgby,c_ubyte_p) ret = face_dll.shibie(Handle,im.width,im.height, 0x201 ,imgcuby,byref(faces)) return ret,faces # 显示人脸识别图片 def showimg(im,faces): for i in range ( 0 ,faces.faceNum): ra = faces.faceRect[i] cv2.rectangle(im.data,(ra.left1,ra.top1),(ra.right1,ra.bottom1),( 255 , 0 , 0 ,), 2 ) cv2.imshow( 'faces' ,im.data) cv2.waitKey( 0 ) #提取人脸特征 def RLTZ(im,ft): detectedFaces = face_class.ASF_FaceFeature() img = im.data imgby = bytes(im.data) imgcuby = cast(imgby,c_ubyte_p) ret = face_dll.tezheng(Handle,im.width,im.height, 0x201 ,imgcuby,ft,byref(detectedFaces)) if ret = = 0 : retz = face_class.ASF_FaceFeature() retz.featureSize = detectedFaces.featureSize #必须操作内存来保留特征值,因为c++会在过程结束后自动释放内存 retz.feature = face_dll.malloc(detectedFaces.featureSize) face_dll.memcpy(retz.feature,detectedFaces.feature,detectedFaces.featureSize) # print('提取特征成功:',detectedFaces.featureSize,mem) return ret,retz else : return ret #特征值比对,返回比对结果 def BD(tz1,tz2): jg = c_float() ret = face_dll.bidui(Handle,tz1,tz2,byref(jg)) return ret,jg.value #单人特征写入文件 def writeFTFile(feature,filepath): f = BytesIO(string_at(feature.feature,feature.featureSize)) a = open (filepath, 'wb' ) a.write(f.getvalue()) a.close() #从多人中提取单人数据 def getsingleface(singleface,index): ft = face_class.ASF_SingleFaceInfo() ra = singleface.faceRect[index] ft.faceRect.left1 = ra.left1 ft.faceRect.right1 = ra.right1 ft.faceRect.top1 = ra.top1 ft.faceRect.bottom1 = ra.bottom1 ft.faceOrient = singleface.faceOrient[index] return ft #从文件获取特征值 def ftfromfile(filepath): fas = face_class.ASF_FaceFeature() f = open ( 'd:/1.dat' , 'rb' ) b = f.read() f.close() fas.featureSize = b.__len__() fas.feature = face_dll.malloc(fas.featureSize) face_dll.memcpy(fas.feature,b,fas.featureSize) return fas |
Main1.py
|
import face_dll,face_class from ctypes import * import cv2 import face_function as fun Appkey = b'' SDKey = b'' # 激活 ret = fun.JH(Appkey,SDKey) if ret = = 0 or ret = = 90114 : print ( '激活成功:' ,ret) else : print ( '激活失败:' ,ret) pass # 初始化 ret = fun.CSH() if ret[ 0 ] = = 0 : print ( '初始化成功:' ,ret, '句柄' ,fun.Handle) else : print ( '初始化失败:' ,ret) # 加载图片 im = face_class.IM() im.filepath = 'e:/2.jpg' im = fun.LoadImg(im) print (im.filepath,im.width,im.height) # cv2.imshow('im',im.data) # cv2.waitKey(0) print ( '加载图片完成:' ,im) ret = fun.RLSB(im) if ret[ 0 ] = = - 1 : print ( '人脸识别失败:' ,ret) pass else : print ( '人脸识别成功:' ,ret) # 显示人脸照片 # showimg(im,ret) #提取单人1特征 ft = fun.getsingleface(ret[ 1 ], 0 ) tz1 = fun.RLTZ(im,ft)[ 1 ] #提取单人2特征 ft = fun.getsingleface(ret[ 1 ], 1 ) tz2 = fun.RLTZ(im,ft)[ 1 ] #特征保存到文件 # fun.writeFTFile(tz1,'d:/1.dat') # fun.writeFTFile(tz2,'d:/2.dat') #文件获取特征 tz = fun.ftfromfile( 'd:/1.dat' ) jg = fun.BD(tz1,tz) print (jg[ 1 ]) #结果比对 # jg=fun.BD(tz1,tz2) # print(jg[1]) |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
原文链接:https://www.cnblogs.com/wxt51/p/10125460.html
您可能感兴趣
- wxpython控件如何移动(基于wxPython的GUI实现输入对话框1)
- python time模块是什么(python中时间模块的基本使用教程)
- python基本运算符编程(对Python3 * 和 ** 运算符详解)
- python图片识别文字代码(python批量识别图片指定区域文字内容)
- pythonjpg转pdf格式(Python使用到第三方库PyMuPDF图片与pdf相互转换)
- python获取特定时间日期的数据(Python提取特定时间段内数据的方法实例)
- python使用aes加密解密(python实现AES和RSA加解密的方法)
- python怎么做图像识别(Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例)
- python环境怎么安装pip(python2.7 安装pip的方法步骤管用)
- python中怎么查看函数的用法(Python中函数的基本定义与调用及内置函数详解)
- python用于机器人(python实现nao机器人身体躯干和腿部动作操作)
- python数据表教程(详解Python sys.argv使用方法)
- python排序方法简单(快速排序的四种python实现推荐)
- pythonide使用教程(对Python Pexpect 模块的使用说明详解)
- python 微信发天气信息(python微信聊天机器人改进版定时或触发抓取天气预报、励志语录等,向好友推送)
- pythonsvr时序预测(利用Python半自动化生成Nessus报告的方法)
- 老弄堂里的市井味道(老弄堂里的市井味道)
- 小米音乐可绑定QQ音乐, QQ音乐 真的会消失在小米的设备上吗(小米音乐可绑定QQ音乐)
- 小米Watch S1评测 或许能成为小米冲击高端可穿戴设备的里程碑(小米WatchS1评测或许能成为小米冲击高端可穿戴设备的里程碑)
- 手机QQ与小米路由器在一起 明天揭晓,敬请期待(手机QQ与小米路由器在一起)
- 小米音乐与 QQ 音乐合作,便捷迁移会员(小米音乐与QQ音乐合作)
- 小米推出米兔儿童电话手表奥特曼版,799 元,支持微信 QQ(小米推出米兔儿童电话手表奥特曼版)
热门推荐
- SQL Server中row_number的用法
- nginx给需要转发的链接添加参数(Nginx 根据URL带的参数转发的实现)
- python类中的数据封装(基于python生成器封装的协程类)
- python爬虫并保存excel实例(Python实现爬取亚马逊数据并打印出Excel文件操作示例)
- 阿里云rds移动数据库(阿里云跨区域服务器迁移镜像迁移,RDS数据库迁移图文教程)
- 修改docker镜像的环境变量(解决docker加载新的镜像后repository和tag名称都为none的问题)
- python 3.10 循环语法(Python3.4学习笔记之常用操作符,条件分支和循环用法示例)
- sqlserver使用说明(SQL Server视图的讲解)
- sql取整数函数(SQL中位数函数实例)
- sql转字符串函数(sql中的常用的字符串处理函数大全)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9