python监控视频图像识别人物-自动发送钉钉-附源码

本文介绍如何使用Python结合TensorFlow进行实时视频人物识别,并通过钉钉自定义机器人将识别结果发送到群聊。内容包括钉钉机器人的接入步骤、阿里云OSS的文件上传以及ImageAI库的图像识别应用。
摘要由CSDN通过智能技术生成

python监控视频图像识别人物-自动发送钉钉-附源码

钉钉机器人自动发送消息

涉及到的点

  1. 钉钉消息自动发送;
  2. 监控图片上传阿里云OSS;
  3. 监控视频图像识别;

使用python读取监控视频流,每秒截图一帧进行图像识别,识别出人物的图像进行保存并上传阿里云OSS,将图像URL通过钉钉机器人发送到钉钉群

钉钉

自定义机器人接入

步骤一:获取自定义机器人webhook

  1. 打开机器人管理页面。以PC端为例,打开PC端钉钉,点击头像,选择机器人管理
    在这里插入图片描述
  2. 在机器人管理页面选择自定义机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像,*勾选 “加签” *
    在这里插入图片描述
  3. 完成必要的安全设置,勾选我已阅读并同意《自定义机器人服务及免责条款》,然后单击完成
  • 加签:
    i. 把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。
参数 说明
timestamp 当前时间戳,单位是毫秒,与请求调用时间误差不能超过1小时。
secret 密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串。

签名计算代码示例(Python)

#python 3.8 
import time
import hmac
import hashlib
import base64
import urllib.parse

timestamp = str(round(time.time() * 1000))
secret = 'this is secret'
secret_enc = secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
print(timestamp)
print(sign)

ii. 把 timestamp和第一步得到的签名值拼接到URL中

 https://oapi.dingtalk.com/robot/send?access_token=XXXXXX&timestamp=XXX&sign=XXX
参数 说明
timestamp 第一步使用到的时间戳。
sign 第一步得到的签名值。

在这里插入图片描述

  1. 完成安全设置后,复制出机器人的Webhook地址,可用于向这个群发送消息,格式如下:

     https://oapi.dingtalk.com/robot/send?access_token=XXXXXX
    

注意 请保管好此Webhook 地址,不要公布在外部网站上,泄露后有安全风险

步骤二:使用自定义机器人

获取到Webhook地址后,用户可以向这个地址发起HTTP POST 请求,即可实现给该钉钉群发送消息.

注意

  • 发起POST请求时,必须将字符集编码设置成UTF-8。
  • 每个机器人每分钟最多发送20条。消息发送太频繁会严重影响群成员的使用体验,大量发消息的场景 (譬如系统监控报警)可以将这些信息进行整合,通过markdown消息以摘要的形式发送到群里

当前自定义机器人支持文本 (text)、链接 (link)、markdown(markdown)、ActionCard、FeedCard消息类型,请根据自己的使用场景选择合适的消息类型,达到最好的展示样式。

自定义机器人发送消息时,可以通过手机号码指定“被@人列表”。在“被@人列表”里面的人员收到该消息时,会有@消息提醒。免打扰会话仍然通知提醒,首屏出现“有人@你”。

步骤三:测试自定义机器人

curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx' \
   -H 'Content-Type: application/json' \
   -d '{"msgtype": "text","text": {"content": "我就是我, 是不一样的烟火"}}'

钉钉部分源码

def sendmgs2ding(objectname):
    #print (objectname)
    def ding_sign():
        timestamp = str(round(time.time() * 1000))
        secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'
        secret_enc = secret.encode('utf-8')
        string_to_sign = '{}\n{}'.format(timestamp, secret)
        string_to_sign_enc = string_to_sign.encode('utf-8')
        hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
        sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
        #print (timestamp)
        #print (sign)
        return timestamp,sign

    ding_sign = ding_sign()
    
    get_timestamp = ding_sign[0]
    get_sign = ding_sign[1]

    ss = requests.session()

    baseurl = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxx"
    paramsurl = "&timestamp="+str(get_timestamp)+"&sign="+str(get_sign)
    uurl = baseurl+paramsurl
    baseheaders = {
   
        'Content-Type': 'application/json'
        }
    baseparams = {
   
        'timestamp': get_timestamp,
        'sign': get_sign
        }
    basedata = {
   
         "msgtype": "markdown",
         "markdown": {
   
             "title": "视频监控告警",
             "text": "#### 视频监控告警 \n> 视频监控检测到人物 \n>"
             "![screenshot]("+objectname+")\n>"
         },
          "at": {
   
              "atMobiles": [
                  "136xxxxx"
              ],
              "isAtAll": "false"
          }
     }

    response = ss.post(uurl,headers=baseheaders,data=json.dumps(basedata))
    print (response.status_code)
    #print (response.url)
    print (response.text)
    if response.status_code == 200:
        response = response.json()

https://developers.dingtalk.com/document/app/custom-robot-access

阿里云OSS

OSS文件上传

上传本地文件
OSS将本地文件视为文件对象(File Object),上传时必须以二进制方式打开(如rb模式),示例代码如下:

# -*- coding: utf-8 -*-
import oss2

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值