首页 > 编程知识 正文

微信设置人脸识别,人脸识别微信认证接口

时间:2023-05-05 02:31:54 阅读:272066 作者:1251

实现方式主要通过以下模块实现:

DateFromWebChat (从网页版微信窗口下载好友头像)

AI (识别模块,主要用于识别好友头像是否为人脸,并且计算人脸的数量与头像的总数且return)

DateVisul (数据可视化模块,用与AI模块返回参数的可视化)

union(将整合以上三个模块的顶层模块)

知识准备:

python中opencv图像处理模块的使用(主要是CascadeClassifier级联图像分类器与 detectMultiScale人脸识别函数的使用)

python中os模块的使用(主要涉及os.imread灰度图像处理与os.listdir(path)获取路径下文件这两个函数的使用)

sys模块的使用(sys.stdout.flush()缓冲器一次返回一个值)

python中Matplotlib图形框架的使用(涉及饼图plt.pie的使用与使用matplotlib.font_manager.FontProperties设置文字显示方式)

知识解析:

#需要导入的包

import itchat

import os

import cv2

import matplotlib.pyplot as plt

import matplotlib.font_manager

import sys

#DateFromWebChat模块完整代码

class DataFromWebchat:

def __init__(self,facedir):

self.facedir = facedir #接收图像文件目录

pass

def downloadFriendFaces(self):

print('开始登陆.......')

itchat.auto_login(hotReload=True)

print('开始获取好友列表.....')

friends = itchat.get_friends()

print('开始下载好友头像.....')

count = 0

for friend in friends:

print('.',end='')

if (count+1)%60==0:

print()

sys.stdout.flush()

username = friend['UserName']

filename = self.facedir + 'face%05d.png'%(count)#设置文件名

with open(filename,'wb') as fd:

faceDate = itchat.get_head_img(userName=username)#获取头像

fd.write(faceDate)

count+=1

print('好友头像下载完毕!')

#完整人脸识别代码如下

class AI:

def __init__(self,facedir):

# 创建一个分类器并且初始化

self.facedir = facedir

self.classtool = cv2.CascadeClassifier('C:\UsersAdministratorAppDataLocalProgramsPythonPython37Libsite-packages\cv2\data\haarcascade_frontalface_alt.xml')

#注意人脸分类器的参数路劲必须是绝对路劲不能是相对路劲否则error

def recognize(self):

sum = 0 #记录头像总数

facenum = 0 #记录人脸总数

# 遍历图像识别是否为人脸

print('开始识别是否为人脸.........')

files = os.listdir(self.facedir)#获取路径下所有文件

for file in files:

if (sum + 1) % 60 == 0:

print()

file = self.facedir + file

if os.path.splitext(file)[1]== '.png':

img = cv2.imread(file) #图像灰度处理

# print('img=',img)

faces = self.classtool.detectMultiScale(image=img, scaleFactor=1.2, minNeighbors=5)

#第一个参数为传入灰度图像,第二个我小矩形放缩比率,第三个为,确定小矩形需满足的数目

if len(faces) > 0:

facenum += 1

print('33[33m.33[0m', end='')

else:

print('33[34mx33[0m', end='')

sys.stdout.flush()

sum +=1

print('头像识别完毕!!!!!')

return (sum,facenum) #返回参数用于DateVisual模块使用

#完整可视化模块如下

class VisualDate:

def __init__(self):

self.font = matplotlib.font_manager.FontProperties(fname=r'c:windowsfontssimsun.ttc')

plt.figure(figsize=(9,6),dpi=80)

plt.axes(aspect=1) # set this , Figure is round, otherwise it is an ellipse

print('数据可视化。。。。')

def visualround(self,data):

sum = data[0]

facenum = data[1]

pie = plt.pie((100.0*facenum/sum,100.0*(sum-facenum)/sum),#计算圆饼图频率

labels=('使用人脸做头像','不使用人脸做头像'),#设置图形边界的说明标签

colors=('yellow','purple'),#颜色设置饼图的

labeldistance=1.1,#设置标签距离中心点的距离

autopct='%5.2f%%',#设置频率的数字格式

shadow=False, #设置是否有阴影

startangle=0, #画图的其实角度

pctdistance=0.6) #设置饼图距离原点的距离

for temp in pie[1]:

temp.set_fontproperties(self.font)#把标签元组元素提取出来设置字符集

plt.title('微信好友使用人脸头像情况(总数=%d)' % data[0], fontproperties=self.font)#设置图形标题

plt.show()#显示图形

#union模块完整代码如下

class union:

date = DataFromWebchat(FECEDIR) #实例化类

MyAi = AI(FECEDIR) #实例化AI类

visual = VisualDate()#实例化类

def analysis(self):

self.date.downloadFriendFaces()

sum,facenum = self.MyAi.recognize()#提取参数

self.visual.visualround((sum,facenum))

print(sum,facenum)

run = union()

run.analysis()

代码运行效果截图:

visual.PNG

微信好友图片下载截图:

111.PNG

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。