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

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

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

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

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



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

Код

Импортные библиотеки

import torch
import numpy as np
import cv2
from time import time
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

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

Примечание

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

  • Перейди в раздел App Password Generator, укажи название приложения, например "security project", и получи 16-значный пароль. Скопируй этот пароль и вставь его в указанное поле для ввода пароля, как указано в инструкции.
password = ""
from_email = ""  # must match the email used to generate the password
to_email = ""  # receiver email

Создание сервера и аутентификация

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

Функция отправки электронной почты

def send_email(to_email, from_email, object_detected=1):
    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())

Обнаружение объектов и отправка оповещений

class ObjectDetection:
    def __init__(self, capture_index):
        # default parameters
        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):
        results = self.model(im0)
        return results

    def display_fps(self, im0):
        self.end_time = time()
        fps = 1 / np.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):
        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:  # 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, если будет обнаружен какой-либо объект. Уведомление отправляется сразу, а не многократно. Однако не стесняйся настраивать код в соответствии с требованиями твоего проекта.

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

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



Создано 2023-12-02, Обновлено 2024-02-03
Авторы: glenn-jocher (2), RizwanMunawar (1)

Комментарии