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

这一版作废,新版已发出:https://www.cnblogs.com/wxt51/p/10122106.html

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

 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',MRECT*50),(u'faceOrient',c_int32*50),(u'faceNum',c_int32)]
#人脸特征 人脸特征,人脸特征长度
class ASF_FaceFeature(Structure):
_fields_=[('feature',c_byte),('featureSize',c_int32)]
#年龄信息 0=未知 >0则检测出年龄 ,人脸数
class ASF_AgeInfo(Structure):
_fields_=[('ageArray',c_int32),('num',c_int32)]
#性别 0=男 1=女 -1未知,人脸数
class ASF_GenderInfo(Structure):
_fields_=[('genderArray',c_int32),('num',c_int32)]
 #调用dll需要引入ctypes
from ctypes import *
from face_class import *
import io
from PIL import Image
import cv2
dll=CDLL('d:\python\Test\Face\lib\X64\libarcsoft_face.dll')
Facedll=CDLL('d:\python\Test\Face\lib\X64\libarcsoft_face_engine.dll')
#由于dll是c,所以字符串要做类型转换,否则,激活失败,APPID无效
Appkey=c_char_p(b'自己去注册')
SDKey=c_char_p(b'自己去注册')
# ASF_VERSION a=Facedll.ASFActiviation(Appkey,SDKey)
vs=Facedll.ASFActivation
#激活函数返回0,初始化成功,返回90114已激活,其他则为失败 ,重新激活需删除asf_install.dat 文件
ret=Facedll.ASFActivation(Appkey,SDKey)
print('激活:',ret)
#初始化引擎
ASF_OP_0_ONLY = 0x1
ASF_DETECT_MODE_VIDEO = 0x00000000
ASF_DETECT_MODE_IMAGE = 0xFFFFFFFF
r=c_void_p()
#初始化引擎
a=Facedll.ASFInitEngine(c_long(ASF_DETECT_MODE_IMAGE),c_int32(ASF_OP_0_ONLY),c_int32(16),c_int32(50),c_int8(ASF_OP_0_ONLY),byref(r))
print('初始化',a)
print('初始化返回',r)
c_ubyte_p = POINTER(c_ubyte)
ASVL_PAF_I420 = 0x601
ASVL_PAF_RGB24_B8G8R8 = 0x201
img1=cv2.imread('e:/5.jpg')
sp=img1.shape
#调整图片大小,正好是4的倍数,否则会报错
img=cv2.resize(img1,(sp[1]//4*4,sp[0]//4*4))
# img=cv2.cvtColor(img,cv2.COLOR_BGR2YUV_I420)
# img=cv2.cvtColor(img,cv2.COLOR_BGRA2YUV_I420)
# img=cv2.cvtColor(img,cv2.COLOR_BGR2YUV_IYUV)
sp=img.shape
wd=sp[1]
he=sp[0]
print('宽高',wd,he)
# cv2.imshow('1',img)
# cv2.waitKey(0)
#内存指针返回ASF_MultiFaceInfo类型--回调函数
tz=POINTER(ASF_MultiFaceInfo)()
#图片转换成字字节
b=bytes(img)
#强转为C++的byte类型
d=cast(b,c_ubyte_p)
#调用多人人脸识别
a=Facedll.ASFDetectFaces(r,c_int32(wd),c_int32(he),c_int32(ASVL_PAF_RGB24_B8G8R8),d,byref(tz))
print('返回特征',tz)
print('返回值',a)
if a==0:
tezheng=tz.contents
print(tezheng.faceNum)
for i in range(0,50):
# cv2.rectangle(img,(tezheng.faceRect[1].left1,tezheng.faceRect[1].top1),(tezheng.faceRect[1].right1,tezheng.faceRect[1].bottom1),(255,0,0),2)
cv2.rectangle(img,(tezheng.faceRect[i].left1,tezheng.faceRect[i].top1),(tezheng.faceRect[i].right1,tezheng.faceRect[i].bottom1),(255,0,0),2)
cv2.imshow('',img)
cv2.waitKey(0)

python调用虹软2.0(全网首发)-更新中的更多相关文章

  1. python调用虹软2.0

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

  2. python调用虹软2.0第二版

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

  3. python调用虹软2.0第三版

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

  4. 《Python自然语言处理》中文版-纠错【更新中。。。】

    最近在看<Python自然语言处理>中文版这本书,可能由于是从py2.x到py3.x,加上nltk的更新的原因,或者作者的一些笔误,在书中很多代码都运行不能通过,下面我就整理一下一点有问题 ...

  5. python模块详解 | selenium(持续更新中)

    目录: 关于selenium Selenium 安装Selenium 安装浏览器驱动 配置环境变量 selenium方法详解 定位元素 元素操作 浏览器操作 鼠标事件 浏览器事件 设置元素等待 多表单 ...

  6. How ASP.NET Web API 2.0 Works?[持续更新中…]

    一.概述 RESTful Web API [Web标准篇]RESTful Web API [设计篇] 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用 二.路由 ...

  7. Hexo-butterfly-magicv3.0.1(持续更新中....)

    介绍 Hexo-butterfly魔改v3.0.1 软件架构 本项目是基于Hexo静态博客的个性主题---蝴蝶主题魔改版 安装教程 克隆 安装依赖 hexo命令生成public文件夹 启动hexo-s ...

  8. python调用C++实例:用C++对numpy执行BFS(广度优先搜索)

    下文的代码可能展示不全,详情请下载文件:用cpp遍历ndarray.rar 问题背景: 现在我有一张二值图test.npy,需要对其闭区域进行孔洞填充,如下图所示: 文件下载链接:用cpp遍历ndar ...

  9. 【大盛】全网首发HTC One/M7 最新本地化TrickDroid9.0/固件升级/永久root/高级,快速设置/稳定,流畅经典ROM

    了解更多请关注:点击打开链接 ROM版本 HTC One/M7_TrickDroid9.0.0 ROM作者 雪狼团队-大盛   http://weibo.com/DaShengdd Android版本 ...

随机推荐

  1. SVN导出Maven项目

    1.从SVN检出项目 -> 作为工作空间中的项目检出 2.转换成Maven project 3.将Maven Project 转化成 Maven app 右击项目-> Properties ...

  2. J.U.C Atomic(二)基本类型原子操作

    java.util.concurrent.atomic包中对基本类型进行原子操作的类有:AtomicInteger.AtomicBoolean.AtomicLong. 下面通过一个测试程序来验证一下A ...

  3. 在Windows控制台应用程序中使用CString

    CString是在windows平台下开发中经常使用的字符串类, CString已从MFC中剥离出来了,可以单独使用,只需引用atlstr.h头文件即可. include "stdafx.h ...

  4. iOS 定位方式 iOSNsPredicateString 详解

    原文地址https://segmentfault.com/a/1190000010205649 前言 由于使用id.className.AccessibilityId定位方式较为简单,多数情况下,在同 ...

  5. Vue组件的定义方式

    1.使用template标签定义组件 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  6. jQuery动态效果学习笔记

    资料来源 W3Cschool 1.元素的显示与隐藏 1.1显示元素show() 语法 $(selector).show(speed,callback); 显示已经设置隐藏的元素 1.2隐藏元素hide ...

  7. HttpClient使用详解(转)

    http://blog.csdn.net/wangpeng047/article/details/19624529

  8. JVM类加载机制(转)

    原文出自:http://www.cnblogs.com/ityouknow/p/5603287.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运 ...

  9. RabbitMQ、Memcache、Redis RabbitMQ

    RabbitMQ 解释RabbitMQ,就不得不提到AMQP(Advanced Message Queuing Protocol)协议. AMQP协议是一种基于网络的消息传输协议,它能够在应用或组织之 ...

  10. python 字符串的一些操作

    name = "my \tname is {name} and i am {year} old" print(name.capitalize()) #将首字母都大写 print(n ...