Skip to content

使用Ultralytics YOLO11的安防报警系统项目

Security Alarm System

利用Ultralytics YOLO11的安防报警系统项目集成了先进的计算机视觉能力,以增强安全措施。YOLO11由Ultralytics开发,提供实时物体检测,使系统能够及时识别和响应潜在的安全威胁。该项目提供以下几个优势:

  • 实时检测: YOLO11的高效性使安防报警系统能够实时检测和响应安全事件,最小化响应时间。
  • 准确性 YOLO11以其物体检测的准确性著称,减少误报,提高安防报警系统的可靠性。
  • 集成能力: 该项目可以无缝集成现有安防基础设施,提供升级的智能监控层。



观看: 使用Ultralytics YOLO11的安防报警系统项目 物体检测

代码

设置消息参数

Note

需要生成应用密码

  • 导航至应用密码生成器,指定一个应用名称,例如“安全项目”,并获取一个16位密码。复制此密码并按照指示粘贴到指定的密码字段中。
password = ""
from_email = ""  # 必须与用于生成密码的邮箱匹配
to_email = ""  # 接收者邮箱

服务器创建和认证

import smtplib

server = smtplib.SMTP("smtp.gmail.com: 587")
server.starttls()
server.login(from_email, password)

发送邮件函数

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText


def send_email(to_email, from_email, object_detected=1):
    """发送一封电子邮件通知,指示检测到的物体数量;默认检测到一个物体。"""
    message = MIMEMultipart()
    message["From"] = from_email
    message["To"] = to_email
    message["Subject"] = "安全警报"
    # 添加消息正文
    message_body = f"警报 - 已检测到{object_detected}个物体!!"

    message.attach(MIMEText(message_body, "plain"))
    server.sendmail(from_email, to_email, message.as_string())

物体检测和警报发送器

from time import time

import cv2
import torch

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors


class ObjectDetection:
    def __init__(self, capture_index):
        """初始化一个带有指定摄像头索引的ObjectDetection实例。"""
        self.capture_index = capture_index
        self.email_sent = False

        # 模型信息
        self.model = YOLO("yolo11n.pt")

        # 视觉信息
        self.annotator = None
        self.start_time = 0
        self.end_time = 0

        # 设备信息
        self.device = "cuda" if torch.cuda.is_available() else "cpu"

    def predict(self, im0):
        """使用YOLO模型对输入图像`im0`进行预测。"""
        results = self.model(im0)
        return results

    def display_fps(self, im0):
        """在图像`im0`上显示FPS,通过计算并叠加为白色文本在黑色矩形上。"""
        self.end_time = time()
        fps = 1 / round(self.end_time - self.start_time, 2)
        text = f"FPS: {int(fps)}"
        text_size = cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, 1.0, 2)[0]
        gap = 10
        cv2.rectangle(
            im0,
            (20 - gap, 70 - text_size[1] - gap),
            (20 + text_size[0] + gap, 70 + gap),
            (255, 255, 255),
            -1,
        )
        cv2.putText(im0, text, (20, 70), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 0), 2)

    def plot_bboxes(self, results, im0):
        """在图像上绘制边界框,给定检测结果;返回带注释的图像和类别ID。"""
        class_ids = []
        self.annotator = Annotator(im0, 3, results[0].names)
        boxes = results[0].boxes.xyxy.cpu()
        clss = results[0].boxes.cls.cpu().tolist()
        names = results[0].names
        for box, cls in zip(boxes, clss):
            class_ids.append(cls)
            self.annotator.box_label(box, label=names[int(cls)], color=colors(int(cls), True))
        return im0, class_ids

    def __call__(self):
        """从摄像头流中对视频帧运行对象检测,绘制并显示结果。"""
        cap = cv2.VideoCapture(self.capture_index)
        assert cap.isOpened()
        cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
        cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
        frame_count = 0
        while True:
            self.start_time = time()
            ret, im0 = cap.read()
            assert ret
            results = self.predict(im0)
            im0, class_ids = self.plot_bboxes(results, im0)

            if len(class_ids) > 0:  # 仅在之前未发送时发送电子邮件
                if not self.email_sent:
                    send_email(to_email, from_email, len(class_ids))
                    self.email_sent = True
            else:
                self.email_sent = False

            self.display_fps(im0)
            cv2.imshow("YOLO11 Detection", im0)
            frame_count += 1
            if cv2.waitKey(5) & 0xFF == 27:
                break
        cap.release()
        cv2.destroyAllWindows()
        server.quit()

调用对象检测类并运行推理

detector = ObjectDetection(capture_index=0)
detector()

就是这样!当你执行代码时,如果检测到任何物体,你将收到一封电子邮件通知。通知会立即发送,不会重复。不过,欢迎根据项目需求自由定制代码。

收到的邮件示例

收到的邮件示例

常见问题

Ultralytics YOLO11如何提高安防报警系统的准确性?

Ultralytics YOLO11通过提供高精度、实时的物体检测来增强安防报警系统。其先进的算法显著减少了误报,确保系统仅对真实威胁做出响应。这种提高的可靠性可以无缝集成到现有的安防基础设施中,提升整体监控质量。

我可以将Ultralytics YOLO11与现有的安防基础设施集成吗?

是的,Ultralytics YOLO11可以无缝集成到您现有的安防基础设施中。该系统支持多种模式,并提供灵活的自定义选项,使您能够通过先进的物体检测功能增强现有设置。有关在项目中集成YOLO11的详细说明,请访问集成部分

运行Ultralytics YOLO11需要多少存储空间?

在标准设置上运行Ultralytics YOLO11通常需要大约5GB的可用磁盘空间。这包括存储YOLO11模型和任何额外依赖项的空间。对于基于云的解决方案,Ultralytics HUB提供了高效的项目管理和数据集处理,可以优化存储需求。了解更多关于Pro计划的信息,包括扩展存储等增强功能。

Ultralytics YOLO11与其他物体检测模型(如Faster R-CNN或SSD)有何不同?

Ultralytics YOLO11在实时检测能力和更高精度方面优于Faster R-CNN或SSD等模型。其独特的架构使其能够在不牺牲精度的情况下更快地处理图像,非常适合安防报警系统等对时间敏感的应用。有关物体检测模型的全面比较,您可以查看我们的指南

如何使用Ultralytics YOLO11减少安防系统中的误报频率?

要减少误报,请确保您的Ultralytics YOLO11模型使用多样且标注良好的数据集进行充分训练。微调超参数并定期使用新数据更新模型可以显著提高检测精度。详细的超参数调优技术可以在我们的超参数调优指南中找到。


📅 Created 10 months ago ✏️ Updated 8 days ago

Comments