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

时间: 2024-10-17 20:13:20

python调用虹软2.0第三版的相关文章

python调用虹软2.0(全网首发)-更新中

python调用虹软2.0目前没有任何demo可以参考,自己研究了2个晚上终于把第一步做出来了,使用了opencv来加载和显示图片,龟速更新中 1 from ctypes import * 2 #人脸框 3 class MRECT(Structure): 4 _fields_=[(u'left1',c_int32),(u'top1',c_int32),(u'right1',c_int32),(u'bottom1',c_int32)] 5 #版本信息 版本号,构建日期,版权说明 6 class A

Python调用C/C++程序

编程中会遇到调用其他语言到库,这里记录一下Python调用C++. Python底层是C, 所以调用C还是比较方便.调用C++有些麻烦. Python提供了ctypes, 方便将Python类型转为C类型,实现传参数.函数返回类型的对应.ctypes网址:https://docs.python.org/2/library/ctypes.html 使用Python调用C/C++主要有三步: (1) 编写好C/C++函数 (2) 把C/C++函数打包成库文件 (3) Python加载库文件并调用 代

Python基础教程(第三版)(六) 抽象

一个菜鸡的挣扎 就总结下 and 如果有大佬不小心看到了发现了错误,就欢迎指正 6.1懒惰是一种美德 通过创建函数以调用之可以减少代码量 6.2 抽象和结构 抽象是程序能够被人理解的关键所在(无论对编写程序还是阅读来说,这都至关重要) 函数封装了人不需要关心的实现细节,从而更容易被使用和理解 6.3 自定义函数 6.3.1 给函数编写文档 在def后面添加字符串,相当于给整个函数添加注释,以确保被人理解 __doc_ _是函数的一个属性,可用它来访问函数的文档字符串 我自己的练习: def la

Python黑帽编程3.0 第三章 网络接口层攻击基础知识

3.0 第三章 网络接口层攻击基础知识 首先还是要提醒各位同学,在学习本章之前,请认真的学习TCP/IP体系结构的相关知识,本系列教程在这方面只会浅尝辄止. 本节简单概述下OSI七层模型和TCP/IP四层模型之间的对应关系,最后是本章教程需要的几个核心Python模块. 3.0.1 TCP/IP分层模型 国际标准化组织(ISO)在1978年提出了"开放系统互联参考模型",即著名的OSI/RM模型(Open System Interconnection/Reference Model).

python 调用shell命令三种方法

#!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器: #!/usr/bin/env python这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里. python调用shell命令的方法有许多 1.1   os.system(command) 在一个子shell中运行command命令,并返回command命令执行完毕后的退出状态.这实际上是使用C标准库函数system()实现的.这个函数在执行comman

测试:python调用cmd命令三种方法

目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码,高位为脚本的退出状态码,即脚本中"exit 1"的代码执行后,os.system函数返回值的高位数则是1,如果低位数是0的情况下,则函数的返回值是0×100,换算为10进制得到256. 如果我们需要获得os.system的正确返回值,那使用位移运算可以还原返回值: >>>

python 中调用windows系统api操作剪贴版

# -*- coding: utf-8 -*- ''' Created on 2013-11-26 @author: Chengshaoling ''' import win32clipboard as w32 import win32con class OperateClipboard(object): def __init__(self): # print "OperateClipboard" pass def getText(self): w32.OpenClipboard()

分享《Python核心编程(第三版)》(高清中文版PDF+高清英文版PDF+源代码)

下载:https://pan.baidu.com/s/1-6muQ-DPjNu_1Rqg5kRHzQ <Python核心编程(第三版)>(高清中文版PDF+高清英文版PDF+源代码) 高清中文版667页,带目录和书签,文字能够复制粘贴. 高清英文版886页,带目录和书签,文字能够复制粘贴. 配套源代码. 其中高清中文版如图 原文地址:http://blog.51cto.com/14050756/2319076

分享《Python核心编程(第三版)》+PDF+源码+Wesley Chun+孙波翔 李斌 李晗

下载:https://pan.baidu.com/s/1ilaTxGsh4_Ko--5oU2zvKA 更多资料分享:http://blog.51cto.com/14087171 <Python核心编程(第三版)>(高清中文版PDF+高清英文版PDF+源代码) 高清中文版667页,带目录和书签,文字能够复制粘贴. 高清英文版886页,带目录和书签,文字能够复制粘贴. 配套源代码. 其中高清中文版如图 原文地址:http://blog.51cto.com/14087171/2321611