コンテンツへスキップ

セキュリティアラームシステム・プロジェクト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()

それだけだ!コードを実行すると、何らかのオブジェクトが検出された場合、メールに1回通知が届きます。通知は繰り返し送信されるのではなく、即座に送信されます。しかし、あなたのプロジェクトの要件に合わせてコードを自由にカスタマイズしてください。

Eメール受信サンプル

Eメール受信サンプル

よくあるご質問

Ultralytics YOLOv8 セキュリティアラームシステムの精度はどのように向上するのか?

Ultralytics YOLOv8 は、高精度のリアルタイム物体検知を実現することで、セキュリティアラームシステムを強化します。その高度なアルゴリズムは誤検知を大幅に減らし、システムが本物の脅威にのみ反応することを保証します。この信頼性の向上により、既存のセキュリティ・インフラとシームレスに統合でき、全体的な監視品質を向上させることができます。

Ultralytics YOLOv8 を既存のセキュリティ・インフラと統合できますか?

Ultralytics YOLOv8 は、既存のセキュリティ・インフラとシームレスに統合できます。システムは様々なモードをサポートし、カスタマイズの柔軟性を提供するため、高度なオブジェクト検出機能で既存のセットアップを強化することができます。YOLOv8 をプロジェクトに統合する詳細な手順については、統合セクションをご覧ください。

Ultralytics YOLOv8 を実行するために必要なストレージは?

標準的なセットアップでUltralytics YOLOv8 を実行するには、通常約5GBのディスク空き容量が必要です。これには、YOLOv8 モデルと追加の依存関係を保存するためのスペースが含まれる。クラウドベースのソリューションでは、Ultralytics HUB が効率的なプロジェクト管理とデータセット処理を提供し、ストレージのニーズを最適化します。拡張ストレージを含む拡張機能のプロプランについては、こちらをご覧ください。

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)

コメント