Bỏ để qua phần nội dung

Dự án hệ thống báo động an ninh sử dụng Ultralytics YOLOv8

Hệ thống báo động an ninh

Dự án hệ thống báo động an ninh sử dụng Ultralytics YOLOv8 Tích hợp khả năng thị giác máy tính tiên tiến để tăng cường các biện pháp bảo mật. YOLOv8, được phát triển bởi Ultralytics, cung cấp khả năng phát hiện đối tượng theo thời gian thực, cho phép hệ thống xác định và ứng phó kịp thời với các mối đe dọa bảo mật tiềm ẩn. Dự án này cung cấp một số lợi thế:

  • Phát hiện thời gian thực: YOLOv8Hiệu quả của nó cho phép Hệ thống báo động an ninh phát hiện và ứng phó với các sự cố an ninh trong thời gian thực, giảm thiểu thời gian phản hồi.
  • Chính xác: YOLOv8 được biết đến với độ chính xác trong việc phát hiện đối tượng, giảm dương tính giả và nâng cao độ tin cậy của hệ thống báo động an ninh.
  • Khả năng tích hợp: Dự án có thể được tích hợp liền mạch với cơ sở hạ tầng an ninh hiện có, cung cấp một lớp giám sát thông minh được nâng cấp.



Xem: Dự án hệ thống báo động an ninh với Ultralytics YOLOv8 Phát hiện đối tượng

Thiết lập các tham số của thư

Ghi

Tạo mật khẩu ứng dụng là cần thiết

  • Điều hướng đến Trình tạo mật khẩu ứng dụng, chỉ định tên ứng dụng như "dự án bảo mật" và lấy mật khẩu gồm 16 chữ số. Sao chép mật khẩu này và dán nó vào trường mật khẩu được chỉ định theo hướng dẫn.
password = ""
from_email = ""  # must match the email used to generate the password
to_email = ""  # receiver email

Tạo và xác thực máy chủ

import smtplib

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

Chức năng gửi email

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())

Phát hiện đối tượng và người gửi cảnh báo

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()

Gọi lớp Object Detection và chạy Inference

detector = ObjectDetection(capture_index=0)
detector()

Đó là nó! Khi bạn thực thi mã, bạn sẽ nhận được một thông báo duy nhất trên email của mình nếu phát hiện bất kỳ đối tượng nào. Thông báo được gửi ngay lập tức, không lặp đi lặp lại. Tuy nhiên, hãy thoải mái tùy chỉnh mã cho phù hợp với yêu cầu dự án của bạn.

Email nhận được mẫu

Email nhận được mẫu

FAQ

Làm thế nào Ultralytics YOLOv8 Cải thiện độ chính xác của hệ thống báo động an ninh?

Ultralytics YOLOv8 Tăng cường hệ thống báo động an ninh bằng cách cung cấp độ chính xác cao, phát hiện đối tượng theo thời gian thực. Các thuật toán tiên tiến của nó làm giảm đáng kể các kết quả dương tính giả, đảm bảo rằng hệ thống chỉ phản ứng với các mối đe dọa thực sự. Độ tin cậy tăng lên này có thể được tích hợp liền mạch với cơ sở hạ tầng an ninh hiện có, nâng cấp chất lượng giám sát tổng thể.

Tôi có thể tích hợp không Ultralytics YOLOv8 với cơ sở hạ tầng bảo mật hiện có của tôi?

Có Ultralytics YOLOv8 có thể được tích hợp liền mạch với cơ sở hạ tầng bảo mật hiện có của bạn. Hệ thống hỗ trợ nhiều chế độ khác nhau và cung cấp sự linh hoạt để tùy chỉnh, cho phép bạn tăng cường thiết lập hiện có của mình với khả năng phát hiện đối tượng nâng cao. Để được hướng dẫn chi tiết về tích hợp YOLOv8 Trong các dự án của bạn, hãy truy cập phần Tích hợp.

Các yêu cầu lưu trữ để chạy là gì Ultralytics YOLOv8?

Chạy Ultralytics YOLOv8 trên một thiết lập tiêu chuẩn thường yêu cầu khoảng 5GB dung lượng đĩa trống. Điều này bao gồm không gian để lưu trữ YOLOv8 mô hình và bất kỳ phụ thuộc bổ sung nào. Đối với các giải pháp dựa trên đám mây, Ultralytics HUB cung cấp khả năng quản lý dự án và xử lý tập dữ liệu hiệu quả, có thể tối ưu hóa nhu cầu lưu trữ. Tìm hiểu thêm về Gói Pro để biết các tính năng nâng cao bao gồm cả bộ nhớ mở rộng.

Điều gì làm cho Ultralytics YOLOv8 khác với các mô hình phát hiện đối tượng khác như R-CNN nhanh hơn hay SSD?

Ultralytics YOLOv8 cung cấp lợi thế so với các mẫu như R-CNN hoặc SSD nhanh hơn với khả năng phát hiện thời gian thực và độ chính xác cao hơn. Kiến trúc độc đáo của nó cho phép nó xử lý hình ảnh nhanh hơn nhiều mà không ảnh hưởng đến độ chính xác, làm cho nó trở nên lý tưởng cho các ứng dụng nhạy cảm với thời gian như hệ thống báo động an ninh. Để so sánh toàn diện các mô hình phát hiện đối tượng, bạn có thể khám phá hướng dẫn của chúng tôi.

Làm cách nào để giảm tần suất dương tính giả trong hệ thống bảo mật của tôi bằng cách sử dụng Ultralytics YOLOv8?

Để giảm dương tính giả, hãy đảm bảo Ultralytics YOLOv8 Mô hình được đào tạo đầy đủ với bộ dữ liệu đa dạng và được chú thích tốt. Tinh chỉnh các siêu tham số và thường xuyên cập nhật mô hình với dữ liệu mới có thể cải thiện đáng kể độ chính xác phát hiện. Các kỹ thuật điều chỉnh siêu tham số chi tiết có thể được tìm thấy trong hướng dẫn điều chỉnh siêu tham số của chúng tôi.



Đã tạo 2023-12-02, Cập nhật 2024-07-05
Tác giả: Glenn-Jocher (7), bạch tuộc tham vọng (1), IvorZhu331 (1), RizwanMunawar (1)

Ý kiến