第一版踩了无数的坑,终于第二版把坑全添了,这次更新可以正常获取人脸数,角度,代码可读性更高,继续更新中

第三版已发出 https://www.cnblogs.com/wxt51/p/10125460.html

face_class.py
 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 ASF_VERSION(Structure):
7 _fields_=[('Version',c_char_p),('BuildDate',c_char_p),('CopyRight',c_char_p)]
8 #单人人脸信息 人脸狂,人脸角度
9 class ASF_SingleFaceInfo(Structure):
10 _fields_=[('faceRect',MRECT),('faceOrient',c_int32)]
11 #多人人脸信息 人脸框数组,人脸角度数组,人脸数
12 class ASF_MultiFaceInfo(Structure):
13 # _fields_=[('faceRect',POINTER(MRECT)),('faceOrient',POINTER( c_int32)),('faceNum',c_int32)]
14 _fields_=[(u'faceRect',POINTER(MRECT)),(u'faceOrient',POINTER(c_int32)),(u'faceNum', c_int32)]
15 # _fields_=[(u'faceRect',MRECT*50),(u'faceOrient',c_int32*50),(u'faceNum',c_int32)]
16 #人脸特征 人脸特征,人脸特征长度
17 class ASF_FaceFeature(Structure):
18 _fields_=[('feature',c_void_p),('featureSize',c_int32)]
19 #自定义图片类
20 class IM:
21 def __init__(self):
22 self.filepath=None
23 self.date=None
24 self.width=0
25 self.height=0

  face_dll.py

 1 from ctypes import *
2 from face_class import *
3 wuyongdll=CDLL('d:\python\Test\Face\lib\X64\libarcsoft_face.dll')
4 dll=CDLL('d:\python\Test\Face\lib\X64\libarcsoft_face_engine.dll')
5 ASF_DETECT_MODE_VIDEO = 0x00000000
6 ASF_DETECT_MODE_IMAGE = 0xFFFFFFFF
7 c_ubyte_p = POINTER(c_ubyte)
8 #激活
9 jihuo=dll.ASFActivation
10 jihuo.restype = c_int32
11 jihuo.argtypes = (c_char_p,c_char_p)
12 #初始化
13 chushihua=dll.ASFInitEngine
14 chushihua.restype=c_int32
15 chushihua.argtypes=(c_long,c_int32,c_int32,c_int32,c_int32,POINTER(c_void_p))
16 #人脸识别
17 shibie=dll.ASFDetectFaces
18 shibie.restype=c_int32
19 shibie.argtypes=(c_void_p,c_int32,c_int32,c_int32,POINTER(c_ubyte),POINTER(ASF_MultiFaceInfo))

  main.py

1 import face_dll,face_class
2 from ctypes import *
3 import cv2
4 Appkey=b''
5 SDKey=b''
6 Handle=c_void_p() #全局句柄
7 c_ubyte_p = POINTER(c_ubyte)
8 # 激活函数
9 def JH():
10 ret=face_dll.jihuo(Appkey,SDKey)
11 return ret
12 # 初始化函数
13 def CSH():# 1:视频或图片模式,2角度,3最小人脸尺寸推荐16,4最多人脸数最大50,5功能,6返回激活句柄
14 ret=face_dll.chushihua(0xFFFFFFFF,0x1,16,50,5,byref(Handle))
15 return ret
16 # cv2记载图片并处理
17 def LoadImg(im):
18 img=cv2.imread(im.filepath)
19 sp=img.shape
20 img=cv2.resize(img,(sp[1]//4*4,sp[0]//4*4))
21 sp=img.shape
22 im.data=img
23 im.width=sp[1]
24 im.height=sp[0]
25 return im
26 def RLSB(im):
27 faces=face_class.ASF_MultiFaceInfo()
28 img=im.data
29 imgby=bytes(im.data)
30 imgcuby=cast(imgby,c_ubyte_p)
31 ret=face_dll.shibie(Handle,im.width,im.height,0x201,imgcuby,byref(faces))
32 # print('ret',faces.faceNum)
33 # for i in range(0,faces.faceNum):
34 # rr=faces.faceRect[i]
35 # print('range',rr.left1)
36 # print('jd',faces.faceOrient[i])
37 if ret==0:
38 return faces
39 else:
40 return ret
41 # 激活
42 ret=JH()
43 if ret==0 or ret==90114:
44 print('激活成功:',ret)
45 else:
46 print('激活失败:',ret)
47 pass
48 # 初始化
49 ret=CSH()
50 if ret==0:
51 print('初始化成功:',ret,'句柄',Handle)
52 else:
53 print('初始化失败:',ret)
54 # 显示人脸识别图片
55 def showimg(im,faces):
56 for i in range(0,faces.faceNum):
57 ra=faces.faceRect[i]
58 cv2.rectangle(im.data,(ra.left1,ra.top1),(ra.right1,ra.bottom1),(255,0,0,),2)
59 cv2.imshow('faces',im.data)
60 cv2.waitKey(0)
61 # 加载图片
62 im=face_class.IM()
63 im.filepath='e:/4.jpg'
64 im=LoadImg(im)
65 print(im.filepath,im.width,im.height)
66 # cv2.imshow('im',im.data)
67 # cv2.waitKey(0)
68 print('加载图片完成:',im)
69
70 ret=RLSB(im)
71 if ret==-1:
72 print('人脸识别失败:',ret)
73 pass
74 else:
75 print('人脸识别成功:',ret)
76 # 显示人脸照片
77 showimg(im,ret)

  

python调用虹软2.0的更多相关文章

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

    python调用虹软2.0目前没有任何demo可以参考,自己研究了2个晚上终于把第一步做出来了,使用了opencv来加载和显示图片,龟速更新中 这一版作废,新版已发出:https://www.cnbl ...

  2. python调用虹软2.0第三版

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

  3. python调用虹软2.0第二版

    第一版踩了无数的坑,终于第二版把坑全添了,这次更新可以正常获取人脸数,角度,代码可读性更高,继续更新中 第三版已发出 https://www.cnblogs.com/wxt51/p/10125460. ...

  4. 【初学python】使用python调用monkey测试

    目前公司主要开发安卓平台的APP,平时测试经常需要使用monkey测试,所以尝试了下用python调用monkey,代码如下: import os apk = {'j': 'com.***.test1 ...

  5. python调用py中rar的路径问题。

    1.python调用py,在py中的os.getcwd()获取的不是py的路径,可以通过os.path.split(os.path.realpath(__file__))[0]来获取py的路径. 2. ...

  6. python调用其他程序或脚本方法(转)

    python运行(调用)其他程序或脚本 在Python中可以方便地使用os模块运行其他的脚本或者程序,这样就可以在脚本中直接使用其他脚本,或者程序提供的功能,而不必再次编写实现该功能的代码.为了更好地 ...

  7. python调用c\c++

    前言 python 这门语言,凭借着其极高的易学易用易读性和丰富的扩展带来的学习友好性和项目友好性,近年来迅速成为了越来越多的人们的首选.然而一旦拿python与传统的编程语言(C/C++)如来比较的 ...

  8. python调用zabbix接口实现Action配置

    要写这篇博客其实我的内心是纠结的,老实说,我对zabbix的了解实在不多.但新公司的需求不容置疑,当我顶着有两个头大的脑袋懵懵转入运维领域时,面前摆着两百多组.上千台机器等着写入zabbix监控的需求 ...

  9. python调用ggsci.exe程序

    需求:通过python调用windows server 2008下的ogg同步程序,实现图形化控制. 简单GUI

随机推荐

  1. 使用Selenium和openCV对HTML5 canvas游戏进行自动化功能测试(一)

    上一篇讲了HTML5 canvas游戏的基本工作原理,接下来讲如何进行自动化功能测试. Selenium是一个跨平台的跨浏览器的对网页进行自动化测试的工具.从Selenium 2.0开始Seleniu ...

  2. Prometheus监控学习笔记之教程推荐

    最近学习K8S和基于容器的监控,发现了如下的教程质量不错,记录下来以备参考 1. K8S最佳实战(包括了K8S的Prometheus监控和EFK日志搜集) https://jimmysong.io/k ...

  3. linux的/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow—关于用户和组的配置文件

    1./etc/passwd  存储用户信息 [root@oldboy ~]# head /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bi ...

  4. maven执行单元测试失败后,继续生成Jacoco&Sonar报告

    为保证生成单元测试覆盖 sonarqube或者jacoco与maven集成时,如果pom文件配置了sonarqube或者Jacoco的相关配置, 那么在pom文件所在目录执行mvn clean ins ...

  5. Python3 解析excel文件

    Python3 解析读取excel文件 一.第三方库 import xlrd 二.代码示例 import xlrd ''' 读取Excel每个sheet的第一列和第二列的值,拼接成json串,写入文件 ...

  6. Linux - TCP编程相关配置2

    100万并发连接服务器笔记之处理端口数量受限问题 第二个遇到的问题:端口数量受限 一般来说,单独对外提供请求的服务不用考虑端口数量问题,监听某一个端口即可.但是向提供代理服务器,就不得不考虑端口数量受 ...

  7. 【题解】Luogu P3203 [HNOI2010]弹飞绵羊

    原题传送门 这题用Link-Cut-Tree解决,Link-Cut-Tree详解 预处理:从一个点弹到另一个点就在lct里从\(i\)连边到\(i+k_i\),如果绵羊被弹飞了就从\(i\)连边到\( ...

  8. InstallShield安装包在Win7下权限问题的解决方案 (转载)

    转载:http://blog.csdn.net/wuzhengqing1/article/details/6570149 转载:http://blog.csdn.net/brikoff/article ...

  9. 【python041--构造方法:构造和析造】

    一.魔法方法 1.魔法方法总是被双下划线包围,例如:__init__ 2.为什么在类实例化的时候,有时候需要构造__init__,有时候不需要呢 举例说明: #定义一个矩形的类,需要长和宽两个参数,计 ...

  10. django基础 -- 1. 前奏 web框架的本质

    一. http协议 1.请求方法(get和post) 1.GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test ...