欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python調(diào)用虹軟2.0第三版的具體使用

 更新時間:2019年02月22日 14:09:10   作者:隔壁的王  
這篇文章主要介紹了python調(diào)用虹軟2.0第三版的具體使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

這一版,對虹軟的功能進行了一些封裝,添加了人臉特征比對,比對結(jié)果保存到文件,和從文件提取特征進行比對,大體功能基本都已經(jīng)實現(xiàn),可以進行下一步的應(yīng)用開發(fā)了

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)]
#版本信息   版本號,構(gòu)建日期,版權(quán)說明
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)]
#多人人臉信息 人臉框數(shù)組,人臉角度數(shù)組,人臉數(shù)
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) 
# 激活函數(shù)
def JH(appkey,sdkey):
  ret=face_dll.jihuo(appkey,sdkey)
  return ret
# 初始化函數(shù)
def CSH():# 1:視頻或圖片模式,2角度,3最小人臉尺寸推薦16,4最多人臉數(shù)最大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
    #必須操作內(nèi)存來保留特征值,因為c++會在過程結(jié)束后自動釋放內(nèi)存
    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
#特征值比對,返回比對結(jié)果
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()
#從多人中提取單人數(shù)據(jù)
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])
#結(jié)果比對
# jg=fun.BD(tz1,tz2)
# print(jg[1])

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python GUI庫圖形界面開發(fā)之PyQt5不規(guī)則窗口實現(xiàn)與顯示GIF動畫的詳細方法與實例

    python GUI庫圖形界面開發(fā)之PyQt5不規(guī)則窗口實現(xiàn)與顯示GIF動畫的詳細方法與實例

    這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5不規(guī)則窗口與顯示GIF動畫的詳細方法與實例,需要的朋友可以參考下
    2020-03-03
  • python實現(xiàn)圖片二值化及灰度處理方式

    python實現(xiàn)圖片二值化及灰度處理方式

    今天小編就為大家分享一篇python實現(xiàn)圖片二值化及灰度處理方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python可視化Tkinter進階grid布局詳情

    Python可視化Tkinter進階grid布局詳情

    這篇文章主要介紹了Python可視化Tkinter進階grid布局詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • 使用python更改Word文檔字體的操作代碼

    使用python更改Word文檔字體的操作代碼

    更改文字字體是編輯和美化Word文檔時的一項常見需求,使用合適的字體不僅可以提升文檔的整體視覺效果,還能突顯關(guān)鍵信息,本文將介紹如何通過Python代碼更改Word文檔字體,實現(xiàn)批量操作與自動化,需要的朋友可以參考下
    2024-08-08
  • python tkinter組件擺放方式詳解

    python tkinter組件擺放方式詳解

    這篇文章主要介紹了python tkinter組件擺放方式詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • python實現(xiàn)0到1之間的隨機數(shù)方式

    python實現(xiàn)0到1之間的隨機數(shù)方式

    這篇文章主要介紹了python實現(xiàn)0到1之間的隨機數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Django實現(xiàn)基于類的分頁功能

    Django實現(xiàn)基于類的分頁功能

    這篇文章主要為大家詳細介紹了Django實現(xiàn)基于類的分頁功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python機器學(xué)習(xí)應(yīng)用之基于LightGBM的分類預(yù)測篇解讀

    Python機器學(xué)習(xí)應(yīng)用之基于LightGBM的分類預(yù)測篇解讀

    這篇文章我們繼續(xù)學(xué)習(xí)一下GBDT模型的另一個進化版本:LightGBM,LigthGBM是boosting集合模型中的新進成員,由微軟提供,它和XGBoost一樣是對GBDT的高效實現(xiàn),原理上它和GBDT及XGBoost類似,都采用損失函數(shù)的負梯度作為當前決策樹的殘差近似值,去擬合新的決策樹
    2022-01-01
  • Python列表生成器的循環(huán)技巧分享

    Python列表生成器的循環(huán)技巧分享

    這篇文章主要介紹了Python列表生成器的循環(huán)技巧分享,本文講解了列表生成器中一個循環(huán)和二個循環(huán)的不同寫法,需要的朋友可以參考下
    2015-03-03
  • python用selenium打開瀏覽器后秒關(guān)閉瀏覽器的解決辦法

    python用selenium打開瀏覽器后秒關(guān)閉瀏覽器的解決辦法

    最近朋友在學(xué)Selenium的時候遇到一個問題,當執(zhí)行完selenium程序后,瀏覽器會閃退也就是自動關(guān)閉,這篇文章主要給大家介紹了關(guān)于python用selenium打開瀏覽器后秒關(guān)閉瀏覽器的解決辦法,需要的朋友可以參考下
    2023-07-07

最新評論