ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-07-02 22:49:10  阅读:377  来源: 互联网

标签:树莓 人脸识别 itchat 19 微信 frame cv2 time import


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

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

xp3g

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

 

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

 

 image.png

首先使用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()            
            
            

  

标签:树莓,人脸识别,itchat,19,微信,frame,cv2,time,import
来源: https://www.cnblogs.com/kekeoutlook/p/11123647.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有