实时手机检测-通用入门必看:如何对接企业微信/钉钉告警通知
本文介绍了如何在星图GPU平台上自动化部署“实时手机检测-通用”镜像,并实现检测到手机后自动向企业微信或钉钉发送告警通知。该方案基于DAMO-YOLO模型,可快速搭建智能监控系统,适用于生产车间、考场等需要实时识别违规使用手机的场景,打通AI检测与告警的“最后一公里”。
实时手机检测-通用入门必看:如何对接企业微信/钉钉告警通知
想象一下,你部署了一个实时手机检测模型,它能精准识别监控画面中的手机。但当它真的在深夜的生产车间“看”到有人违规使用手机时,如何第一时间通知到值班主管或安全员的手机上?一个强大的AI模型,如果缺少了告警通知这个“最后一公里”,其价值将大打折扣。
本文将带你从零开始,手把手教你如何为“实时手机检测-通用”模型,搭建一个连接企业微信或钉钉的智能告警系统。我们将基于ModelScope和Gradio快速部署模型,并实现检测到手机后,自动发送告警消息到你的工作群。整个过程无需复杂开发,小白也能轻松搞定。
1. 环境准备与模型快速部署
在开始对接告警之前,我们首先需要把手机检测模型跑起来。这里我们使用ModelScope的镜像环境,它能提供开箱即用的AI模型运行环境。
1.1 启动Gradio WebUI界面
根据提供的镜像信息,模型的前端交互界面已经通过Gradio封装好了。你只需要找到并运行指定的脚本即可。
- 进入镜像环境:首先,确保你已经进入了部署了“实时手机检测-通用”模型的ModelScope镜像环境。
- 定位启动脚本:在终端或命令行中,导航到模型所在目录。根据说明,前端代码路径为
/usr/local/bin/webui.py。 - 启动服务:运行以下命令启动Gradio WebUI服务:
python /usr/local/bin/webui.py - 访问界面:命令执行后,终端会输出一个本地URL(通常是
http://127.0.0.1:7860)。在浏览器中打开这个链接,你就能看到模型的交互界面了。
初次加载时,系统需要从网络下载模型权重文件,这可能需要几分钟时间,请耐心等待。加载成功后,界面就会显示出来。
1.2 了解DAMO-YOLO:速度与精度兼备的引擎
我们使用的“实时手机检测-通用”模型,其核心是阿里达摩院开源的DAMO-YOLO检测框架。你可能听说过YOLO系列,它们以快著称。DAMO-YOLO在它们的基础上更进一步,做到了“又快又准”。
它的秘诀在于一个独特的设计:“大脖子,小脑袋”(Large Neck, Small Head)。
- Backbone (MAE-NAS): 这是模型的“眼睛”,负责从原始图像中提取初步特征。
- Neck (GFPN): 这是精心设计的“脖子”,它的任务是把“眼睛”看到的不同层次的信息(比如轮廓细节和整体语义)充分混合、增强。一个强大的“脖子”能让模型理解得更透彻。
- Head (ZeroHead): 这是做出最终判断的“脑袋”。DAMO-YOLO采用了一个更轻量化的头部设计,专注于高效地输出检测结果(框的位置和类别)。
这种结构让DAMO-YOLO在保持极高推理速度的同时,检测精度也超越了众多经典的YOLO模型,非常适合对实时性要求高的工业场景,比如我们的手机检测。
1.3 快速体验模型效果
服务启动后,我们来快速测试一下:
- 在Gradio界面中,找到图片上传区域。
- 点击上传一张包含手机的图片(你可以用手机拍一张桌面照片)。
- 点击“检测手机”或类似的推理按钮。
- 稍等片刻,右侧就会显示结果图片。所有检测到的手机都会被绿色的矩形框标记出来,并显示“cell phone”标签和置信度分数。
至此,一个可交互的实时手机检测服务就已经在本地运行起来了。接下来,我们要为它装上“告警”的翅膀。
2. 构建告警通知的核心逻辑
我们的目标是:当模型在图片中检测到手机时,自动触发一个通知,发送到企业微信或钉钉群。这需要在模型推理的后端逻辑中,添加一个“钩子”(Hook)。
2.1 理解推理流程与告警插入点
Gradio应用通常的工作流程是:用户上传图片 -> 前端将图片传给后端Python函数 -> 函数调用模型进行推理 -> 函数返回结果图片给前端显示。
我们要做的,就是修改这个后端Python函数(通常定义在 webui.py 或相关模块中),在模型推理完成、得到检测结果后,加入一段判断和发送消息的代码。
逻辑伪代码如下:
def detect_phone(image):
# 1. 调用模型进行推理
results = model(image) # 假设model是已加载的检测模型
# 2. 解析结果,获取检测到的手机数量
phone_count = count_phones_from_results(results)
# 3. 判断:如果检测到手机,则触发告警
if phone_count > 0:
send_alert_to_wecom_or_dingtalk(image, results, phone_count)
# 4. 返回标注好的结果图片给Gradio前端
annotated_image = draw_boxes_on_image(image, results)
return annotated_image
2.2 编写告警消息发送函数
这是最关键的一步。我们需要分别编写对接企业微信和钉钉的机器人消息发送函数。两者原理类似,都是通过向一个特定的Webhook URL发送HTTP POST请求来实现。
企业微信机器人配置:
- 在电脑端打开企业微信,进入需要接收告警的群聊。
- 点击右上角
···->添加群机器人->新建。 - 输入机器人名字(如“手机检测告警”),创建完成后,复制Webhook地址。这个地址格式类似:
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx。
钉钉机器人配置:
- 在电脑端打开钉钉,进入需要接收告警的群聊。
- 点击右上角
设置->智能群助手->添加机器人->自定义。 - 设置机器人名字和安全设置(建议选择“自定义关键词”,如“告警”),完成创建后,复制Webhook地址。地址格式类似:
https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx。
下面是一个整合的Python发送函数示例,你可以根据需求选择使用:
import requests
import json
from datetime import datetime
import base64
from io import BytesIO
from PIL import Image
def send_alert(platform, webhook_url, image, results, count):
"""
发送告警消息到企业微信或钉钉。
参数:
platform: 'wecom' 或 'dingtalk'
webhook_url: 机器人的Webhook地址
image: PIL Image对象,原始图片
results: 模型的检测结果
count: 检测到的手机数量
"""
# 准备消息内容
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
title = f"🚨 实时手机检测告警"
text = f"""**发现违规使用手机!**
**时间:** {current_time}
**位置:** 监控区域(可根据实际场景修改)
**检测数量:** {count} 部
请相关责任人及时处理。"""
# 将检测图片转换为base64,用于在消息中展示(部分平台支持)
buffered = BytesIO()
# 这里假设`image`已经是画好框的图片,如果没有,需要先调用画框函数
image.save(buffered, format="JPEG")
img_base64 = base64.b64encode(buffered.getvalue()).decode('utf-8')
if platform == 'wecom':
# 企业微信机器人支持markdown和图片(通过base64)
# 注意:企业微信机器人直接发送图片较复杂,通常先上传素材。这里以发送图文分离消息为例。
data = {
"msgtype": "markdown",
"markdown": {
"content": f"{title}\n\n{text}\n\n"
}
}
elif platform == 'dingtalk':
# 钉钉机器人支持markdown和链接图片
# 钉钉markdown中图片需要是公网URL,本地图片需先上传。这里先发文本,图片作为附件另一种方式发送。
data = {
"msgtype": "markdown",
"markdown": {
"title": title,
"text": f"### {title}\n\n{text}\n\n**检测截图已保存至服务器。**"
}
}
else:
print(f"不支持的平台: {platform}")
return
# 发送HTTP POST请求
headers = {'Content-Type': 'application/json'}
try:
response = requests.post(webhook_url, headers=headers, data=json.dumps(data))
response.raise_for_status() # 检查请求是否成功
print(f"告警消息发送成功到{platform}!")
except requests.exceptions.RequestException as e:
print(f"发送告警消息失败: {e}")
注意:上述代码中图片处理部分(base64)在企业微信网页版可能无法直接显示,钉钉则需要公网URL。对于生产环境,更常见的做法是:
- 将生成的告警图片保存到服务器某个目录。
- 如果有公网IP或OSS服务,生成一个可访问的图片链接放入消息。
- 或者,只发送文本告警,包含时间、位置、数量等信息,图片由运维人员登录服务器查看。
一个更简单可靠的文本告警示例:
def send_simple_alert(webhook_url, count, time):
"""发送简单的文本告警"""
text = f"实时手机检测告警:于{time}在监控区域发现{count}部手机,请及时处理。"
data = {
"msgtype": "text",
"text": {
"content": text
}
}
# ... 发送请求代码同上 ...
3. 集成告警到检测服务
现在,我们需要修改原始的Gradio应用代码,将告警逻辑嵌入进去。你需要找到 webui.py 中处理图片推理的函数。
3.1 定位并修改推理函数
假设原始的推理函数大致如下(你需要根据实际代码调整):
import gradio as gr
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
# 1. 加载模型(通常全局加载一次)
model = pipeline(Tasks.domain_specific_object_detection, model='damo/cv_tinynas_object-detection_damoyolo_phone')
def predict(input_image):
# 2. 执行推理
result = model(input_image)
# 3. 这里,原始代码可能直接返回result或处理后的图片
output_image = visualize_result(input_image, result) # 假设这个函数负责画框
return output_image
# 4. 创建Gradio界面
# ... gr.Interface(...) ...
我们需要修改 predict 函数:
# 在文件开头添加导入和配置
WEBHOOK_URL = "你的企业微信或钉钉机器人Webhook地址" # 请务必替换
PLATFORM = "wecom" # 或 "dingtalk"
def predict(input_image):
# 1. 执行推理
result = model(input_image)
# 2. 解析检测结果,计算手机数量
# 注意:result的结构需要根据模型实际输出调整
# 假设result['boxes']是检测框列表,result['scores']是置信度,result['labels']是标签
phone_count = 0
if 'boxes' in result and len(result['boxes']) > 0:
# 这里简单认为所有检测到的目标都是手机。如果模型能检测多类别,需要过滤label。
phone_count = len(result['boxes'])
# 3. 如果检测到手机,发送告警
if phone_count > 0:
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 发送简单文本告警
send_simple_alert(WEBHOOK_URL, phone_count, current_time)
# 或者,如果你想发送带图片的告警,需要先保存或处理图片
# output_image = visualize_result(input_image, result)
# send_alert(PLATFORM, WEBHOOK_URL, output_image, result, phone_count)
print(f"[告警已发送] 检测到 {phone_count} 部手机。")
# 4. 可视化结果并返回给前端
output_image = visualize_result(input_image, result)
return output_image
3.2 配置与测试
- 替换配置:将代码中的
WEBHOOK_URL和PLATFORM替换成你自己的机器人信息。 - 重启服务:停止之前的Gradio进程,重新运行
python /usr/local/bin/webui.py。 - 功能测试:
- 上传一张有手机的图片进行检测。
- 查看Gradio服务运行的终端日志,应该能看到
[告警已发送]的打印信息。 - 同时,查看你的企业微信或钉钉群,应该会收到一条告警消息。
- 验证无触发:上传一张没有手机的图片,确认不会发送告警。
4. 总结与进阶思考
恭喜你!至此,你已经成功将一个离线的手机检测模型,升级为具备实时告警能力的智能监控节点。我们来回顾一下关键步骤:
- 模型部署:利用ModelScope镜像和Gradio,快速搭建了“实时手机检测-通用”模型的可视化交互服务。
- 告警逻辑:理解了在模型推理后添加业务逻辑(判断手机数量)的方法。
- 通道对接:掌握了通过Webhook方式,调用企业微信或钉钉群机器人发送告警消息的核心代码。
- 系统集成:将告警逻辑无缝嵌入到Gradio应用的后端处理函数中,实现了“检测即告警”的自动化流程。
更进一步:让系统更实用
当前的实现是一个基础版本。要让其真正用于生产环境,你还可以考虑以下优化:
- 告警去重:连续视频流中,同一部手机可能会被连续多帧检测到,导致告警轰炸。可以加入时间窗口判断,比如30秒内同一区域只告警一次。
- 位置信息:如果你的监控摄像头是固定的,可以将检测框的中心坐标映射到实际场景的区域(如“A区生产线”、“B区仓库”),让告警信息更精准。
- 图片存储与追溯:将告警触发时的原始图片和结果图片,连同时间戳一起保存到数据库或文件系统中,方便事后追溯和审核。
- 多通道通知:除了企业微信/钉钉,还可以集成短信、电话、邮件等多种通知方式,确保关键告警必达。
- 部署为服务:将当前脚本部署到云服务器,并设置开机自启和进程守护(如使用systemd或supervisor),让它7x24小时稳定运行。
通过“AI模型+告警通知”的组合拳,你可以将目标检测能力轻松应用到安防监控、生产安全、考场纪律等多种需要实时响应的场景中,让AI真正成为你的“火眼金睛”和“千里传音”。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐

所有评论(0)