微信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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓手机端运行的adb工具_MQTT通信手机端接收生产车间设备运行信息3

应用场景:对车间重点设备的运行参数进行实时跟踪。比如烘干炉的烟囱温度、TNV的出口温度、喷漆室的温湿度、小时产量等等信息。以前这些信息的获取都需要在电脑端获取、相对比较繁琐。这里我们选择在手机端实现获取这些信息。尤其是对于作者这样的设备负责人而言&am…

Linux 命令之 tree -- 以树状图列出目录的内容/查看目录内容

文章目录一、命令介绍二、常用选项三、命令示例(一)按树形结构显示当前目录下的内容(二)按树状图显示当前目录下的所有目录名称而非文件(三)列出指定目录下的第一层级的文件和目录名称(四&#…

jsf 项目_您将在下一个项目中使用JSF吗?

jsf 项目上周有一篇很棒的stackoverflow博客文章,主题是“ Javascript框架的残酷生命周期” 。 这篇文章是关于Javascript UI框架(angularjs,angular,jquery和react)的流行和流行的速度。 这篇文章的关键指标是每月关于…

html 定时刷新 数据,js中,设置定时器 每隔几秒刷新一次页面数据

页面加载进来,查询 然后设置定时器 每隔五秒刷新一次页面数据fnSearch();var interval3setInterval(function(){fnSearch();},5000);function fnSearch(){searchjson.search$(".iptsearch").val();$.ajax({url:/movecheck/getCheckInfo,data:searchjson,…

查询varchar实际大小_微服务和VUE(11): mybatis 动态查询

1. 新建class表和student表:CREATE TABLE class ( class_id varchar(20) NOT NULL, class_name varchar(50) DEFAULT NULL, headmaster_name varchar(20) DEFAULT NULL, headmaster_tel varchar(20) DEFAULT NULL, PRIMARY KEY (class_id)) ENGINEInnoDB …

Linux 中 ctime,mtime,atime 的区别

文章目录改变和修改的区别ctimemtimeatime查看文件时间关于 relatime改变和修改的区别 改变和修改之间的区别在于是改变文件的属性还是改变文件的内容。如果有人说 chmod a-w myfile(删除所有用户对文件 myfile 的写权限),那么这叫改变&…

java迭代器删除两个_两个迭代器的故事

java迭代器删除两个当您查看最流行的Java面试问题时,您可能会遇到有关故障快速和故障安全迭代器的问题: 故障快速迭代器和故障安全迭代器之间有什么区别? 简化的答案是: 如果在迭代过程中修改了集合,则快速失败迭代器…

Linux 命令之 stat -- 显示文件的状态信息

文章目录一、命令介绍二、命令语法三、常用选项四、命令示例(一)显示文件的状态信息(二)以简洁方式输出文件的状态信息(三)显示文件所属的文件系统状态信息一、命令介绍 用于显示文件的状态信息。stat命令…

python tkinter滚动条不起作用_Tkinter滚动条不工作

我有一段运行在python3.4上的tkinter代码,它是一个放在画布上的带有垂直滚动条的大框架,但是滚动条是灰色的,似乎没有与框架的大小相关联。我使用的代码基本上是:class EntryWindow:def __init__(self, master):self.master mast…

大工17秋《计算机文化基础》在线测试1,大工17秋《组织行为学》在线测试1答案...

大工17秋《组织行为学》在线测试1一、单选题:1.根据气质的分类,较适合做推销工作的人员的气质类型是( )。 (满分:3)A.胆汁质B.多血质C.抑郁质D.黏液质正确答案:[hide]——B——[/hide]2.组织行为学在中观层面所要研究的主要内容是( )。 (满分:3)A.个体心…

java分页中显示更多_早期更多失败– Java 8

java分页中显示更多快速失败或早期失败是一种软件工程概念,旨在通过在不应该发生的事情发生时立即停止执行来防止复杂问题的发生。 在之前的博客文章和演示中,我将详细介绍这种方法的优点,在此博客文章中,我将详细介绍Java 8中该思…

计算机组装与维修单招,单招职二 计算机组装与维修试卷.doc

单招职二 计算机组装与维修试卷高二 计算机组装与维修试卷一、填空题(每空1分,共计30分)1.一个完整的计算机系统是由______________和______________两部分组成的。2.为了更好的为CPU散热,在安装风扇前,先在CPU芯片的顶部均匀地涂抹上一层___…

普通人学python好吗_有人问,普通人学python真的有意义吗?看看大家都是怎么说的吧...

普通人学python有意义吗?现在随着python越来越火,尤其是它成为了人工智能的第一编程语言,还被纳入了中小学的教育中。并且python的应用范围很广泛,可以解决很多专业或非专业的问题。但python真的适合普通人学习吗?我个…

Linux 如何安装程序的源代码软件包/源码程序包/源码包?

文章目录一、安装源码包的三个步骤(一)执行命令 configure,进行配置/检测(二)执行命令 make,编译源码(三)执行命令 make install,安装软件二、源码包安装示例&#xff08…

大文件拆分小文件求top_将文件拆分为流

大文件拆分小文件求top上周,我讨论了类Pattern新的(since 1.8)方法splitAsStream只能根据流的需要从字符序列中读取字符序列,并且不能继续进行模式匹配以创建所有可能的元素并返回它作为流。 这种行为是流的本质,它是支…

如何取消ie.html,IE浏览器安全警告怎么关闭

部分用户在使用IE浏览器打开某些页面的时候,可能会出现一个“安全警告”的对话框,虽然影响不大,但是每次出现都让人很烦闷,这个时候你就可以根据下面的操作去关闭这个功能。自从百度近日开启了HTTPS安全网页功能之后,每…

sql 计算两个小数乘积_数学篇|学会这些数学计算技巧,想不满分都难!

计算是小学数学的基础,四则运算和混合运算是计算要考察的重点。在这里我们总结了小学用到的所有计算定律和简便方法,包括运算定律、运算法则、运算顺序和速算技巧四大部分,帮助小学生牢固掌握数学知识点。先赞后看,收获满满&#…

Linux 如何关闭防火墙

一、使用 System V init 作为初始化系统的 Linux(例如:CentOS 6.x) 关闭防火墙的命令: chkconfig iptables off或 service iptables stop二、使用 systemd 作为初始化系统的 Linux(例如:CentOS 7.x&#…

java学习2018年_Java 20年

java学习2018年二十年前,在苏黎世的一间公寓里发生了两件事。 我的女儿迈出了第一步,一位年轻的博士后研究员(她的父亲)迈出了使用Java的第一步。 很难完全了解当时的Java。 在这些时代,TCL盛行,Java时代与…

html 不透明阴影,CSS_css box-shadow阴影不透明的解决办法,如下面示例: 复制代码代码如 - phpStudy...

如下面示例:复制代码代码如下:phpStudy.shadow{width:120px;height:120px;border:1px solid #ccc;background:#fff;font-size:12px;padding:10px;-moz-box-shadow:0 4px 4px #999;-webkit-box-shadow:0 4px 4px #999;box-shadow:0 4px 4px #999;*filter: progid:DXI…