Перейти к содержимому

Проект системы охранной сигнализации с использованием Ultralytics YOLOv8

Система охранной сигнализации

Проект системы охранной сигнализации, использующий Ultralytics YOLOv8, интегрирует передовые возможности компьютерного зрения для усиления мер безопасности. YOLOv8, разработанная компанией Ultralytics, обеспечивает обнаружение объектов в режиме реального времени, что позволяет системе оперативно выявлять потенциальные угрозы безопасности и реагировать на них. Этот проект обладает рядом преимуществ:

  • Обнаружение в реальном времени: эффективность YOLOv8 позволяет системе охранной сигнализации обнаруживать и реагировать на инциденты безопасности в режиме реального времени, сводя время реагирования к минимуму.
  • Точность: YOLOv8 известен своей точностью в обнаружении объектов, уменьшая количество ложных срабатываний и повышая надежность системы охранной сигнализации.
  • Возможности интеграции: Проект может быть легко интегрирован в существующую инфраструктуру безопасности, обеспечивая модернизированный уровень интеллектуального наблюдения.



Смотри: Проект системы охранной сигнализации с помощью Ultralytics YOLOv8 обнаружения объектов

Код

Настройте параметры сообщения

Примечание

Генерация паролей для приложений необходима

  • Перейди в раздел App Password Generator, укажи название приложения, например "security project", и получи 16-значный пароль. Скопируй этот пароль и вставь его в указанное поле для ввода пароля, как указано в инструкции.
password = ""
from_email = ""  # must match the email used to generate the password
to_email = ""  # receiver 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):
    """Sends an email notification indicating the number of objects detected; defaults to 1 object."""
    message = MIMEMultipart()
    message["From"] = from_email
    message["To"] = to_email
    message["Subject"] = "Security Alert"
    # Add in the message body
    message_body = f"ALERT - {object_detected} objects has been 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):
        """Initializes an ObjectDetection instance with a given camera index."""
        self.capture_index = capture_index
        self.email_sent = False

        # model information
        self.model = YOLO("yolov8n.pt")

        # visual information
        self.annotator = None
        self.start_time = 0
        self.end_time = 0

        # device information
        self.device = "cuda" if torch.cuda.is_available() else "cpu"

    def predict(self, im0):
        """Run prediction using a YOLO model for the input image `im0`."""
        results = self.model(im0)
        return results

    def display_fps(self, im0):
        """Displays the FPS on an image `im0` by calculating and overlaying as white text on a black rectangle."""
        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):
        """Plots bounding boxes on an image given detection results; returns annotated image and class IDs."""
        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):
        """Run object detection on video frames from a camera stream, plotting and showing the results."""
        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:  # Only send email If not sent before
                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("YOLOv8 Detection", im0)
            frame_count += 1
            if cv2.waitKey(5) & 0xFF == 27:
                break
        cap.release()
        cv2.destroyAllWindows()
        server.quit()

Вызови класс "Обнаружение объектов" и выполни умозаключение

detector = ObjectDetection(capture_index=0)
detector()

Вот и все! Когда ты выполнишь код, то получишь одно уведомление на свой email, если будет обнаружен какой-либо объект. Уведомление отправляется сразу, а не многократно. Однако не стесняйся настраивать код в соответствии с требованиями твоего проекта.

Образец полученного электронного письма

Образец полученного электронного письма

ВОПРОСЫ И ОТВЕТЫ

Как Ultralytics YOLOv8 повышает точность системы охранной сигнализации?

Ultralytics YOLOv8 улучшает работу систем охранной сигнализации, обеспечивая высокую точность обнаружения объектов в режиме реального времени. Его продвинутые алгоритмы значительно снижают количество ложных срабатываний, гарантируя, что система реагирует только на реальные угрозы. Эта повышенная надежность может быть легко интегрирована в существующую инфраструктуру безопасности, повышая общее качество видеонаблюдения.

Можно ли интегрировать Ultralytics YOLOv8 в существующую инфраструктуру безопасности?

Да, Ultralytics YOLOv8 может быть легко интегрирована в твою существующую инфраструктуру безопасности. Система поддерживает различные режимы и обеспечивает гибкость настройки, позволяя тебе усовершенствовать существующую установку с помощью расширенных возможностей обнаружения объектов. Подробные инструкции по интеграции YOLOv8 в твои проекты ты найдешь в разделе "Интеграция".

Каковы требования к хранилищу для запуска Ultralytics YOLOv8 ?

Запуск Ultralytics YOLOv8 на стандартной установке обычно требует около 5 Гб свободного дискового пространства. Сюда входит место для хранения модели YOLOv8 и всех дополнительных зависимостей. Для облачных решений Ultralytics HUB предлагает эффективное управление проектами и работу с наборами данных, что позволяет оптимизировать потребности в хранении. Узнай больше о тарифном плане Pro Plan для расширенных возможностей, включая увеличенное хранилище.

Чем Ultralytics YOLOv8 отличается от других моделей обнаружения объектов, таких как Faster R-CNN или SSD?

Ultralytics YOLOv8 обеспечивает преимущество перед такими моделями, как Faster R-CNN или SSD, благодаря возможностям обнаружения в реальном времени и более высокой точности. Его уникальная архитектура позволяет ему обрабатывать изображения гораздо быстрее без ущерба для точности, что делает его идеальным для чувствительных ко времени приложений, таких как системы охранной сигнализации. Для всестороннего сравнения моделей обнаружения объектов ты можешь изучить наше руководство.

Как уменьшить частоту ложных срабатываний в системе безопасности, используя Ultralytics YOLOv8 ?

Чтобы уменьшить количество ложных срабатываний, убедись, что твоя модель Ultralytics YOLOv8 адекватно обучена на разнообразном и хорошо проаннотированном наборе данных. Тонкая настройка гиперпараметров и регулярное обновление модели новыми данными могут значительно повысить точность обнаружения. Подробные техники настройки гиперпараметров можно найти в нашем руководстве по настройке гиперпараметров.



Создано 2023-12-02, Обновлено 2024-07-05
Авторы: glenn-jocher (7), ambitious-octopus (1), IvorZhu331 (1), RizwanMunawar (1)

Комментарии