微信官方的人脸识别接口,微信在哪里进行人脸识别认证
实现方式主要通过以下模块实现:
DateFromWebChat(从网页版微信窗口下载好友头像)
AI(识别模块,主要用于识别好友头像是否是人脸,并计算人脸数量和头像总数并返回)
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。字体属性来设置文本显示模式)
知识分析:
需要导入的包数
导入itchat
导入操作系统
导入cv2
将matplotlib.pyplot作为plt导入
导入matplotlib.font_manager
导入系统
#DateFromWebChat模块完整代码
class DataFromWebchat:
def __init__(self,facedir):
Self.facedir=facedir #接收图像文件的目录
及格
def downloadFriendFaces(self):
打印(开始登录.)
it chat . auto _ log in(hot reload=True)
打印(开始获取好友列表. )
friends=itchat.get_friends()
打印(开始下载朋友的头像.)
计数=0
对于朋友中的朋友:
打印(.,end=“”)
if (count 1)`==0:
打印()
sys.stdout.flush()
用户名=朋友[用户名]
filename=self . facedir faced . png %(count)#设置文件名
用open(文件名, wb )作为fd:
face date=it chat . Get _ head _ img(username=username)#获取头像
fd.write(faceDate)
计数=1
打印(‘朋友’头像下载!)
#完整的人脸识别代码如下
AI类:
def __init__(self,facedir):
#创建一个分类器并初始化它
self.facedir=facedir
self.classtool=cv2。cascade classifier( C: Users Administrator AppData Local Programs Python Python 37 Lib site-packages cv2 data Haar cascade _ frontal face _ alt . XML )
#请注意,面部分类器的参数道路强度必须是绝对道路强度,而不是相对道路强度,否则会出错
定义识别(自我):
Sum=0 #记录的头像总数
Facenum=0 #记录的面孔总数
#遍历图像以识别它是否是人脸
打印(开始识别是否是人脸.....................
files=OS . listdir(self . facedir)#获取路径下的所有文件
对于文件中的文件:
if (sum 1) % 60==0:
打印()
file=self.facedir文件
if os.path.splitext(file)[1]==。png :
Img=cv2.imread(file) #图像灰度处理
# print(img=,img)
faces=self . class tool . detect multi scale(image=img,scaleFactor=1.2,minNeighbors=5)
#第一个参数是传入的灰度图像,第二个是我的小矩形的缩放比例,第三个是确定要满足的小矩形数量。
如果镜头(面)为0:
facenum=1
打印( 33[33m。 33[0m ,end= )
否则:
print( 33[34mx 33[0m ,end= )
sys.stdout.flush()
总和=1
打印(‘头像识别完成!)
Return (sum,facenum)# return参数由DateVisual模块使用
#完整的可视化模块如下
类别可视日期:
def __init__(self):
self . font=matplotlib . font _ manager。font properties(fname=r c: windows fonts simsun . TTC )
plt.figure(figsize=(9,6),dpi=80)
plt.axes(aspect=1) #设置此项,图形为圆形,否则为椭圆形
打印(数据可视化。)
def visualround(自身,数据):
sum=data[0]
facenum=data[1]
Pie=plt.pie ((100.0 * facenum/sum,100.0 * (sum-facenum)/sum),#计算饼图出现的频率
Labels=(用人脸做头像,不用人脸做头像),#设置图形边界的描述标签。
Colors=(yellow , purple ),# color设置饼图的
Labeldistance=1.1,#设置标签距中心点的距离。
Pct=% 5.2f%% ,#设置频率的数字格式
Shadow=False,#设置是否有阴影。
Startangle=0,#绘图的实际角度
Pctdistance=0.6) #设置饼图离原点的距离。
对于饼图[1]中的温度:
temp . set _ font properties(self . font)#提取标签元组元素来设置字符集。
plt.title(微信好友使用人脸头像情况(总数=%d) % data[0],fontproperties=self.font)#设置图形标题
plt.show()#显示图形
#工会模块完整代码如下
班级联盟:
date=DataFromWebchat(FECEDIR) #实例化类
MyAi=AI(FECEDIR) #实例化人工智能类
visual=VisualDate()#实例化类
定义分析(自我):
self.date.downloadFriendFaces()
sum,facenum=self .MyAi.recognize()#提取参数
self.visual.visualround((sum,facenum))
打印(sum,facenum)
run=union()
run.analysis()
代码运行效果截图:
视觉100 . PNG
微信好友图片下载截图:
111.PNG