当前位置:脚本大全 > > 正文

python写的工具(python调用虹软2.0第三版的具体使用)

时间:2022-01-26 01:01:55类别:脚本大全

python写的工具

python调用虹软2.0第三版的具体使用

这一版,对虹软的功能进行了一些封装,添加了人脸特征比对,比对结果保存到文件,和从文件提取特征进行比对,大体功能基本都已经实现,可以进行下一步的应用开发了

face_class.py

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 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

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 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

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 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

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 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

    标签:
    上一篇下一篇

    猜您喜欢

    热门推荐