Beveiligingsalarmsysteem project met Ultralytics YOLOv8
Het project Beveiligingsalarmsysteem met Ultralytics YOLOv8 integreert geavanceerde computervisiemogelijkheden om de beveiligingsmaatregelen te verbeteren. YOLOv8 ontwikkeld door Ultralytics, biedt realtime objectdetectie, waardoor het systeem snel potentiële veiligheidsbedreigingen kan identificeren en erop kan reageren. Dit project biedt verschillende voordelen:
- Real-time Detectie: YOLOv8's efficiëntie stelt het Security Alarm System in staat om beveiligingsincidenten in real-time te detecteren en erop te reageren, waardoor de responstijd tot een minimum wordt beperkt.
- Nauwkeurigheid: YOLOv8 staat bekend om zijn nauwkeurigheid bij het detecteren van objecten, het verminderen van vals-positieven en het vergroten van de betrouwbaarheid van het beveiligingsalarmsysteem.
- Integratiemogelijkheden: Het project kan naadloos worden geïntegreerd met bestaande beveiligingsinfrastructuur, waardoor een verbeterde laag van intelligente bewaking ontstaat.
Kijken: Project voor beveiligingsalarmsysteem met Ultralytics YOLOv8 Objectdetectie
Code
Bibliotheken importeren
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
De parameters van het bericht instellen
Opmerking
App wachtwoordgeneratie is noodzakelijk
- Navigeer naar App Password Generator, wijs een app-naam aan zoals "beveiligingsproject" en vraag een 16-cijferig wachtwoord op. Kopieer dit wachtwoord en plak het volgens de instructies in het aangewezen wachtwoordveld.
password = ""
from_email = "" # must match the email used to generate the password
to_email = "" # receiver email
Server aanmaken en verifiëren
Functie voor verzenden per e-mail
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())
Objectdetectie en waarschuwingszender
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 / 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):
"""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):
"""Executes object detection on video frames from a specified camera index, plotting bounding boxes and returning modified frames."""
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()
De klasse Objectdetectie aanroepen en de conclusie uitvoeren
Dat is het! Als je de code uitvoert, ontvang je een enkele melding op je e-mail als er een object wordt gedetecteerd. De melding wordt onmiddellijk verzonden, niet herhaaldelijk. Voel je echter vrij om de code aan te passen aan de vereisten van jouw project.