(19) 树莓派发送微信人脸识别报警

时间:2019-07-03 00:45:03   收藏:0   阅读:391

教程  https://www.yahboom.com/build.html?id=1999&cid=257

项目地址  https://github.com/revotu/ItChat

xp3g

本项目的具体需求是:树莓派启动微信服务和OpenCV服务,OpenCV对摄像头实时视频监控,当检测到人脸后后拍照,将拍摄到的照片通过微信发送给用户的个人好友。

 

本项目中,对于微信的操作,我们需要用到的API是itchat。 itchat是一个微信对于python封装的api,它的功能非常强大,我们可以使用它和python对自己微信的很多信息进行爬取。

 

 技术图片

首先使用pip安装itchat:

Windows用户可以直接打开cmd输入:

pip install itchat

Mac用户由于没有对anaconda的python配置环境变量,需要先在终端输入:

curl https://bootstrap.pypa.io/get-pip.py | python3

 

树莓派版本无需下载pip,直接下载itchat输入:

pip install itchat

pip命令和pip3的区别是:pip3可以直接下载适合python3 使用的package。对于树莓派,我们可以根据spyder中python的版本使用pip2或pip3下载itchat:

pip2 install itchat

 

首先要进行的操作是:

import itchat

itchat.auto_login(hotReload=True)

这两句代码的作用是引入itchat后自动登录,itchat.auto_login()可以自动生成一个二维码,将hotReload设置为True的作用是微信支持本机的热登录,意思是:用户第一次启动程序并扫描二维码登录后,之后再次运行本程序的时候程序将不需要用户重复扫描二维码。

 

之后进行人脸检测,当检测到人脸后通过cv2.imwrite将当前帧保存到out.png中,当前itchat的版本已经不支持直接用itchat.send将消息或文件发送给自己的好友了,但是我们可以用:

itchat.send("@img@%s"%‘out.png‘,"filehelper")

将消息发送给“文件传输助手”,或者直接省略第二个参数将文件发送给自己。本问题的解决方法是利用

itchat.search_friends(name=‘friend1’)这个方法将放回一个昵称为friend1的好友的详细信息的类似json的数组。然后用.send将信息发出。

itchat.send(“@img@%s”%’out.png‘,account[0][‘UserName‘])

除此之外,为了避免同样的图片在短时间内被重复发送,对于本程序,我们在每次发送图片前后都设置时间戳,如果距离上一次发送图片的时间间隔小于10分钟,放弃发送图片。

 

运行效果,程序的源码位于/home/pi/yahboom/wechat_face/wachat_face.py将检测到的人脸视频留帧,发送给好友昵称为“senge”的用户,在图片上记录拍照时间:

 

progressive:上文程序中将照片发送给了“friend1”,微信又一个名为“文件传输助手”的应用,它的“昵称”为“filehelper”。请查阅资料,实现向“filehelper”发送照片

#!/usr/bin/env python2
# -*- coding: utf-8 -*-


from __future__ import division
import cv2
import time
import sys
reload(sys)
sys.setdefaultencoding(‘utf8‘)
import os.path
import itchat
#自动登录,微信会自动生成二维码,可以在屏幕上弹出二维码
#设置hotreload为真,可以热启动,也就是说之后几次
itchat.auto_login(hotReload=True)
#摄像头操作
cap=cv2.VideoCapture(0)
cap.set(3,320)
cap.set(4,320)
face_cascade=cv2.CascadeClassifier(‘123.xml‘)
sendDate=0

while True:
    #人脸识别的模块
    ret,frame=cap.read()
    gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    faces=face_cascade.detectMultiScale(gray)
    max_face=0
    value_x=0
    font=cv2.FONT_HERSHEY_SIMPLEX
    cv2.putText(frame,time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()),(20,20),font,0.8,(255,255,255),1)
    #找到人脸后进行一系列操作
    if len(faces)>0:
        #设置时间戳
        currentDate=time.time()
        for (x,y,w,h) in faces:
            cv2.rectangle(frame,(x,y),(x+h,y+w),(0,255,0),2)
            result=(x,y,w,h)
            x=result[0]
            y=result[1]
        if currentDate-sendDate>600:
            #如果在10分钟内没有发送过图片,
            #将当前帧写入独立png中
            cv2.imwrite("out.png",frame)
            #先通过search_friend爬去friend1的数据
            #因为现在itchat不支持直接通过friend1发送消息
            account=itchat.search_friends(name=‘senge‘)
            print(account[0][‘UserName‘])
            #发送
            itchat.send("@img@%s"%‘out.png‘,account[0][‘UserName‘])
            #记录时间
            sendDate=time.time()
    cv2.imshow("capture",frame)
    if cv2.waitKey(1)==119:
        break
cap.release()
cv2.destroyAllWindows()            
            
            

  

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!