微信html人脸识别接口,微信人脸识别可视化的实现:

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

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:\\Users\Administrator\AppData\Local\Programs\Python\Python37\Lib\site-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('\033[33m.\033[0m', end='')

else:

print('\033[34mx\033[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:\windows\fonts\simsun.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()

代码运行效果截图:

3907dd5861fc?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=qq

visual.PNG

微信好友图片下载截图:

3907dd5861fc?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=qq

111.PNG

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值