查看: 4691|回复: 2

[大赛作品提交] 【进阶七】家庭陪伴小机器人微信安防推送技能

[复制链接]
  • TA的每日心情
    开心
    2018-9-6 15:08
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2018-1-10 11:36:15 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 ky123 于 2018-1-31 14:03 编辑

    感谢E络盟提供的助赛基金。

          安防技能实际上是指家里无人后,通过摄像头监测到异常后实时通知主人!实现这个功能的方法有很多,例如比较热门的运动侦测,当对比两帧不同的图片,当数据差异较大时判断为异常闯入,该方法很高大上,但难度很大,当环境光发生变化时会误判断,需要算法滤波处理!最重要的是对处理器要求很高,用树莓派实现时还需要修改swap缓存,同时占用资源过大,不仅占用CPU,实时拍摄占用硬盘空间,最后功耗也比较大!不太适合本项目中的小车这种电池供电的产品!


           因此,采用比较廉价也比较简单的人体热释电(PIR)+摄像头拍照的方案!本方案的思路是PIR检测到发热体(不受环境光变化影响)产生脉冲信号,树莓派检测到信号后启动摄像头拍照,并实时推送给主人,是不是很easy!如果主人比较关心家庭情况,也可web远程视频查看具体情况!(由于未申请到花生壳路由器暂支持),暂用微信消息控制拍照替代,本项目中的图片会不断被替换刷新,不会占据过大硬盘空间。

         
    •      信号检测:RPi.GPIO
    •      拍照:uvccapture,
    •      图片推送:python版微信wxpy
    •      编程语音:python2.7

    硬件部分:
    本设计中选用BOARD中的引脚8,即BCM编码中引脚14,作为PIR脉冲信号的检测口;
    4.jpg
    软件部分的程序分两大部分:拍照和推送;

    首先讲推送部分

    1.1 安装wxpy
    项目使用的python 是3.5版本的,因此语法会和2.x版本有所区别,wxpy 支持python3.4-3.6 以及python2.7版本
    在这里默认大家以及安装好了pip,我们需要安装wxpy 以及wechat_sender 两个包;
    1. sudo pip install wxpy -i "https://pypi.doubanio.com/simple/"
    2. sudo pip install wechat_sender -i "https://pypi.doubanio.com/simple/"
    复制代码
    以上安装过程中可能会报错,
    1. error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1
    复制代码
    1.png
    该问题的含义是指,gcc未找到<Python.h>头文件,所以需要通过依赖安装来安装该支持库。
    然后是按照python应用开发包,已安装的可以跳过!
    python2.x:
    1. sudo apt-get install python-dev
    2. sudo apt-get install libevent-dev
    复制代码
    1.2 wxpy 登陆

    wxpy 使用起来非常简单,我们只需要创建一个bot 对象,程序运行后,会弹出二维码,扫描二维码后显示登陆成功。
    桌面版的树莓派可以通过显示器或者远程界面,查看二维码图片并扫描登录!
    有些情况下,可能不能通过终端打开图片(例如部署在服务器上时),我们可以通过参数选择在终端内显示二维码,这样代码会变为:
    1. from wxpy import *
    2. bot = Bot(console_qr=True)
    复制代码
    2.png
    如果你认为每次都需要扫描二维码很麻烦,可以启用缓存,来保存自己的登录状态:
    1. bot = Bot(console_qr=True, cache_path=True)
    复制代码
    该缓存设置可以在一段时间内避免重复扫码登录,但当超时是还需再扫描二维码重新登录~
    重头戏来了!首先实现微信发消息触发摄像头拍照并发送照片,关于自动处理信息的更多内容参考请见这里
    1. # -*- coding: utf-8 -*-

    2. # 这样也行
    3. # coding:utf-8

    4. from wxpy import *
    5. import picamera

    6. import  RPi.GPIO as GPIO
    7. import sys
    8. import time
    9. # import pigpio

    10. # pi = pigpio.pi()
    11. # for BCD.GPIO      
    12. # PIR_GPIO = 0
    13. # pi.set_mode(PIR_GPIO, pigpio.INPUT)

    14. #初始化GPIO
    15. GPIO.setmode(GPIO.BOARD)
    16. PIR_GPIO = 8
    17. GPIO.setup(PIR_GPIO,GPIO.IN)

    18. #初始化微信机器人,扫码登录
    19. bot = Bot(console_qr=True,cache_path=True)
    20. # 获取所有好友
    21. friends = bot.friends()

    22. # 遍历输出好友名称
    23. for friend in friends:
    24.     print(friend)

    25. my_friend = bot.friends().search('smilecat')[0]
    26. #初始化图灵机器人
    27. tuling = Tuling(api_key='b48696865a5346e79dcd466355ebabbd')
    28. # 自动回复my_friend所有文字消息
    29. @bot.register(my_friend,msg_types=TEXT)
    30. def pir_send_image():
    31.         if GPIO.input(PIR_GPIO) == True:
    32.                 my_friend.send_image('image.jpg')
    33.                 print('send image')
    34.         time.sleep(5)

    35. while True:
    36.         pir_send_image()
    37.         time.sleep(5)
    38. # 开始运行
    39. bot.join()
    复制代码
    以上程序依次实现了微信的登录(微信号A)、查找好友smilecat(这个是我的微信大号),当收到信号时将照片发给这个微信号smilecat!(本项目需要两个微信账号)图灵机器人是一个聊天小机器人,本项目中用来检测文本信息然后实现远程控制摄像头功能,也附带福利闲聊功能!其api_key可以在图灵官网注册!
    消息拍照.jpg

    然后讲拍照部分
    安装uvccapture:
    1. sudo apt-get install uvccapture
    复制代码
    开始拍照:
    1. uvccapture -B120 -C100 -S100 -x640 -y480 -m -o/home/pi/car/wechar/image.jpg
    复制代码
    uvccapture携带的参数较多,其中,“-x,-y”为图像分辨率,“-B”为亮度(Brightness),"-C"为对比度(Contrast),“-S”为饱和度(Saturation),"-o"输出图像文件路径,"image.jpg"为保存的照片文件名,默认保存在"/home/pi"目录下,注意要与推送的图片同路径和同名称
      当水平图像分辨率(x)超过960像素时,当垂直图像分辨率(y)超过720像素时,还需要使用YUYV方式进行拍照,此时相比于上述方式,除了需要修改像素参数意外,还要额外增加一个参数“-m”。
    像素标准2:1280*720
    6.jpg
    最后将拍照和推送融合
    拍照是终端指令,而推送是python程序,直接在python中添加执行/home/pi/car/wechar/camera.sh会报语法错误!通过以下方式将两者融合!
    首先将以上指令封装在shell脚本中camera.sh;
    1. #!/bin/bash
    2. #利用echo输出一些提示语句
    3. uvccapture -B120 -C100 -S100 -x640 -y480 -m -o/home/pi/car/wechar/image.jpg
    4. echo 拍照中.....
    复制代码
    然后将将脚本用os.system调用!(执行的命令,相当于在Windows的cmd窗口中输入的命令)
    1. os.system('camera.sh')
    复制代码
    最终的程序如下:
    1. # -*- coding: utf-8 -*-

    2. # 这样也行
    3. # coding:utf-8

    4. #引入shell指令
    5. import os  
    6. import commands  

    7. from wxpy import *
    8. # import picamera

    9. import  RPi.GPIO as GPIO
    10. import sys
    11. import time
    12. # import pigpio

    13. # pi = pigpio.pi()
    14. # for BCD.GPIO      
    15. # PIR_GPIO = 0
    16. # pi.set_mode(PIR_GPIO, pigpio.INPUT)

    17. #初始化GPIO
    18. GPIO.setmode(GPIO.BOARD)
    19. PIR_GPIO = 8
    20. GPIO.setup(PIR_GPIO,GPIO.IN)

    21. #初始化微信机器人,扫码登录
    22. bot = Bot(console_qr=True,cache_path=True)
    23. # 获取所有好友
    24. friends = bot.friends()

    25. # 遍历输出好友名称
    26. for friend in friends:
    27.     print(friend)

    28. my_friend = bot.friends().search('smilecat')[0]
    29. #初始化图灵机器人
    30. tuling = Tuling(api_key='b48696865a5346e79dcd466355ebabbd')
    31. # 自动回复my_friend所有文字消息
    32. @bot.register(my_friend,msg_types=TEXT)
    33. def pir_send_image():
    34.         if GPIO.input(PIR_GPIO) == True:
    35.         os.system('/home/pi/car/wechar/camera.sh')
    36.                 my_friend.send_image('image.jpg')
    37.                 print('send image')
    38.         time.sleep(5)

    39. while True:
    40.         pir_send_image()
    41.         time.sleep(5)
    42. # 开始运行
    43. bot.join()
    复制代码
    回复

    使用道具 举报

    该用户从未签到

    发表于 2018-1-10 15:24:53 | 显示全部楼层
    阿莫斯v5,后面还有进阶几
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-9-6 15:08
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

     楼主| 发表于 2018-1-11 09:19:43 | 显示全部楼层
    噗噗熊 发表于 2018-1-10 15:24
    阿莫斯v5,后面还有进阶几

    今天活动截止了,开始汇总暂不进阶了!以后有优化和补充再加了!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-16 15:12 , Processed in 0.131607 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.