You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
6.0 KiB
166 lines
6.0 KiB
--- |
|
comments: true |
|
description: Security Alarm System Project Using Ultralytics YOLOv8. Learn How to implement a Security Alarm System Using ultralytics YOLOv8 |
|
keywords: Object Detection, Security Alarm, Object Tracking, YOLOv8, Computer Vision Projects |
|
--- |
|
|
|
# Security Alarm System Project Using Ultralytics YOLOv8 |
|
|
|
<img src="https://github.com/RizwanMunawar/ultralytics/assets/62513924/f4e4a613-fb25-4bd0-9ec5-78352ddb62bd" alt="Security Alarm System"> |
|
|
|
The Security Alarm System Project utilizing Ultralytics YOLOv8 integrates advanced computer vision capabilities to enhance security measures. YOLOv8, developed by Ultralytics, provides real-time object detection, allowing the system to identify and respond to potential security threats promptly. This project offers several advantages: |
|
|
|
- **Real-time Detection:** YOLOv8's efficiency enables the Security Alarm System to detect and respond to security incidents in real-time, minimizing response time. |
|
- **Accuracy:** YOLOv8 is known for its accuracy in object detection, reducing false positives and enhancing the reliability of the security alarm system. |
|
- **Integration Capabilities:** The project can be seamlessly integrated with existing security infrastructure, providing an upgraded layer of intelligent surveillance. |
|
|
|
<p align="center"> |
|
<br> |
|
<iframe width="720" height="405" src="https://www.youtube.com/embed/_1CmwUzoxY4" |
|
title="YouTube video player" frameborder="0" |
|
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" |
|
allowfullscreen> |
|
</iframe> |
|
<br> |
|
<strong>Watch:</strong> Security Alarm System Project with Ultralytics YOLOv8 Object Detection |
|
</p> |
|
|
|
### Code |
|
|
|
#### Import Libraries |
|
|
|
```python |
|
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 |
|
``` |
|
|
|
#### Set up the parameters of the message |
|
|
|
???+ tip "Note" |
|
|
|
App Password Generation is necessary |
|
|
|
- Navigate to [App Password Generator](https://myaccount.google.com/apppasswords), designate an app name such as "security project," and obtain a 16-digit password. Copy this password and paste it into the designated password field as instructed. |
|
|
|
```python |
|
password = "" |
|
from_email = "" # must match the email used to generate the password |
|
to_email = "" # receiver email |
|
``` |
|
|
|
#### Server creation and authentication |
|
|
|
```python |
|
server = smtplib.SMTP('smtp.gmail.com: 587') |
|
server.starttls() |
|
server.login(from_email, password) |
|
``` |
|
|
|
#### Email Send Function |
|
|
|
```python |
|
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()) |
|
``` |
|
|
|
#### Object Detection and Alert Sender |
|
|
|
```python |
|
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() |
|
``` |
|
|
|
#### Call the Object Detection class and Run the Inference |
|
|
|
```python |
|
detector = ObjectDetection(capture_index=0) |
|
detector() |
|
``` |
|
|
|
That's it! When you execute the code, you'll receive a single notification on your email if any object is detected. The notification is sent immediately, not repeatedly. However, feel free to customize the code to suit your project requirements. |
|
|
|
#### Email Received Sample |
|
|
|
<img width="256" src="https://github.com/RizwanMunawar/ultralytics/assets/62513924/db79ccc6-aabd-4566-a825-b34e679c90f9" alt="Email Received Sample">
|
|
|