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. C#版-Redis缓存服务器在Windows下的使用

    Redis缓存服务器是一款key/value数据库,读110000次/s,写81000次/s,因为是内存操作所以速度飞快,常见用法是存用户token.短信验证码等 官网显示Redis本身并没有Wind ...

  2. Spark2.0 特征提取、转换、选择之二:特征选择、文本处理,以中文自然语言处理(情感分类)为例

    特征选择 RFormula RFormula是一个很方便,也很强大的Feature选择(自由组合的)工具. 输入string 进行独热编码(见下面例子country) 输入数值型转换为double(见 ...

  3. 图层的使用要点(CALayer)

    A,图层和路径 基本图层 CALayer 动画的主角 形状图层 CAShapeLayer 绘制不规则图形 渐变图层 CAGradientLayer 颜色渐变.阴影 复制图层 CAReplicatorL ...

  4. PKU 2002 Squares(二维点哈希+平方求余法+链地址法)

    题目大意:原题链接 给定平面上的N个点,求出这些点一共可以构成多少个正方形. 解题思路: 若正方形为ABCD,A坐标为(x1, y1),B坐标为(x2, y2),则很容易可以推出C和D的坐标.对于特定 ...

  5. java的TimeUtils或者DateUtils的编写心得

    一.几种常见的日期和时间类介绍 介绍时间工具类不可避免必须要去触碰几个常见的日期和时间类,所以就简单介绍一下. 1.jdk1.8之前的日期时间类 a.Date类 我们可以通过new的方式生成一个Dat ...

  6. PL/SQL编程-块编程

    (1). 简单分类                           |————过程(存储过程)                           |                        ...

  7. PHP引入框架包

    引入包 之后 在写代码的时候会有提示. 流程: 项目名称右击->包含目录->TAB页签选择库-> add external source folder 找到需要的包.

  8. SQL学习笔记之简易ORM

    0x00 前言 1 .我在实例化一个user对象的时候,可以user=User(name='lqz',password='123') 2 .也可以 user=User() user['name']=' ...

  9. 基于Node.js的爬虫工具 – Node Crawler

    Node Crawler的目标是成为最好的node.js爬虫工具,目前已经停止维护. 我们来抓取光合新知博客tech栏目中的文章信息.访问http://dev.guanghe.tv/category/ ...

  10. RocEDU.阅读.写作《乌合之众》(三)

    第二卷 群体的意见与信念 第三章 群体领袖及其说服的手法 群体领袖 领袖对于群体十分重要,他是群体形成意见并取得一致的核心.他常常是个实干家而非思想家,信念极其坚定并且有自我牺牲的倾向.领袖具有非常专 ...