计算机视觉 【第三篇】微信公众平台开发运动传感器

计算机视觉 【第三篇】微信公众平台开发运动传感器

 

1 微信公众后-发送客服消息

import json
import requests

# 我们可以接受定义的复杂,但是不能接受调用的复杂
# 把代码从面向函数改成面向对象

class WxTools():
    
    def __init__(self, app_id, app_secret):
        self.app_id = app_id
        self.app_secret = app_secret
       
    def get_access_token(self): # 获取access_token
        url = f'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={self.app_id}&secret={self.app_secret}'
        resp = requests.get(url).json()
        access_token = resp.get('access_token')
        return access_token


    def send_wx_customer_msg(self, opend_id, msg="有人闯入了你的家"): # 发送文本消息
        url = f'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={self.get_access_token()}'
        req_data = {
            "touser": opend_id,
            "msgtype":"text",
            "text":
            {
                  "content": msg
            }
        }
        requests.post(url, data=json.dumps(req_data, ensure_ascii=False).encode('utf-8'))


if __name__ == "__main__":
    app_id = 'wx7f23641379450a'
    app_secret = '2bfecd48e13964d00b4a1b0bf26b0a'
    wx_tools = WxTools('wx7f23641379450a28', '2bfecd48e13964d00b4a1b0bf26b0acb')
    wx_tools.send_wx_customer_msg("oqtB6wXelAcohf9rasCA7VLHNk9c")

 

2 运用差分法 -- 开发运动传感器

import cv2
import datetime

from demo05_wx_notice_03 import WxTools
from demo06_settings import app_id, app_secret

camera = cv2.VideoCapture(0)
background = None
es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 4))
is_send_msg = False

while True:
    grabbed, frame = camera.read()

    gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    gray_frame = cv2.GaussianBlur(gray_frame, (25, 25), 3) # 消除噪点

    if background is None:
        background = gray_frame
        continue

    diff = cv2.absdiff(background, gray_frame)
    diff = cv2.threshold(diff, 50, 255, cv2.THRESH_BINARY)[1]
    diff = cv2.dilate(diff, es, iterations=3)

    contours, hierarchy = cv2.findContours(diff.copy(), cv2.RETR_EXTERNAL,
                                           cv2.CHAIN_APPROX_SIMPLE)
    is_detected = False
    for c in contours:
        if cv2.contourArea(c) < 2000:
            continue
        (x, y, w, h) = cv2.boundingRect(c)
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
        is_detected = True
        if not is_send_msg:
            is_send_msg = True
            wx_tools = WxTools(app_id, app_secret)
            wx_tools.send_wx_customer_msg('oJ3nX591TD5ri1IJPhsDCSv6-3Gc', '王华,有人闯入了你的家,请留意')

    if is_detected:
        show_text = "Motion: Detected"
        show_color = (0, 0, 255)
    else:
        show_text = "Motion: Undetected"
        show_color = (0, 255, 0)

    cv2.putText(frame, show_text, (10, 20),
                cv2.FONT_HERSHEY_SIMPLEX, 0.5, show_color, 2)
    cv2.putText(frame,
                datetime.datetime.now().strftime("%A %d %B %Y %I:%M:%S%p"),
                (10, frame.shape[0] - 10), cv2.FONT_HERSHEY_SIMPLEX,
                0.35, show_color, 1)

    cv2.imshow('video', frame)
    cv2.imshow('diff', diff)

    key = cv2.waitKey(1) & 0xFFf
    if key == ord('q'):
        break

camera.release()
cv2.destroyAllWindows()

 

posted @ 2021-08-31 13:02  风hua  阅读(100)  评论(0)    收藏  举报