Progetto di sistema di allarme di sicurezza con l'utilizzo di Ultralytics YOLO11
Il progetto del sistema di allarme di sicurezza che utilizza Ultralytics YOLO11 integra funzionalità avanzate di visione computerizzata per migliorare le misure di sicurezza. YOLO11 Il sistema di visione computerizzata, sviluppato da Ultralytics, fornisce il rilevamento di oggetti in tempo reale, consentendo al sistema di identificare e rispondere tempestivamente a potenziali minacce alla sicurezza. Questo progetto offre diversi vantaggi:
- Rilevamento in tempo reale: l 'efficienza di YOLO11 consente al sistema di allarme di rilevare e rispondere agli incidenti di sicurezza in tempo reale, riducendo al minimo i tempi di risposta.
- Precisione: YOLO11 è noto per la sua precisione nel rilevamento degli oggetti, riducendo i falsi positivi e migliorando l'affidabilità del sistema di allarme di sicurezza.
- Capacità di integrazione: Il progetto può essere perfettamente integrato con l'infrastruttura di sicurezza esistente, fornendo un livello superiore di sorveglianza intelligente.
Guarda: Progetto di sistema di allarme di sicurezza con Ultralytics YOLO11 Rilevamento degli oggetti
Codice
Impostare i parametri del messaggio
Nota
La generazione di password per le app è necessaria
- Andare su App Password Generator, assegnare un nome all'applicazione, ad esempio "progetto sicurezza", e ottenere una password di 16 cifre. Copiare la password e incollarla nel campo designato come indicato.
password = ""
from_email = "" # must match the email used to generate the password
to_email = "" # receiver email
Creazione e autenticazione del server
import smtplib
server = smtplib.SMTP("smtp.gmail.com: 587")
server.starttls()
server.login(from_email, password)
Funzione di invio e-mail
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())
Rilevamento di oggetti e invio di avvisi
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("yolo11n.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("YOLO11 Detection", im0)
frame_count += 1
if cv2.waitKey(5) & 0xFF == 27:
break
cap.release()
cv2.destroyAllWindows()
server.quit()
Chiamare la classe Rilevamento oggetti ed eseguire l'inferenza
Tutto qui! Quando si esegue il codice, si riceve una singola notifica sulla propria e-mail se viene rilevato un oggetto. La notifica viene inviata immediatamente, non ripetutamente. Tuttavia, sentitevi liberi di personalizzare il codice per adattarlo alle esigenze del vostro progetto.
Campione di e-mail ricevute
FAQ
In che modo Ultralytics YOLO11 migliora la precisione di un sistema di allarme di sicurezza?
Ultralytics YOLO11 migliora i sistemi di allarme di sicurezza offrendo un rilevamento di oggetti ad alta precisione e in tempo reale. I suoi algoritmi avanzati riducono significativamente i falsi positivi, garantendo che il sistema risponda solo alle minacce reali. Questa maggiore affidabilità può essere perfettamente integrata con l'infrastruttura di sicurezza esistente, migliorando la qualità complessiva della sorveglianza.
È possibile integrare Ultralytics YOLO11 con l'infrastruttura di sicurezza esistente?
Sì, Ultralytics YOLO11 può essere perfettamente integrato con l'infrastruttura di sicurezza esistente. Il sistema supporta varie modalità e offre flessibilità di personalizzazione, consentendo di migliorare la configurazione esistente con funzionalità avanzate di rilevamento degli oggetti. Per istruzioni dettagliate sull'integrazione di YOLO11 nei vostri progetti, visitate la sezione dedicata all'integrazione.
Quali sono i requisiti di archiviazione per l'esecuzione di Ultralytics YOLO11 ?
L'esecuzione di Ultralytics YOLO11 su una configurazione standard richiede in genere circa 5 GB di spazio libero su disco. Questo include lo spazio per memorizzare il modello YOLO11 e tutte le dipendenze aggiuntive. Per le soluzioni basate su cloud, Ultralytics HUB offre una gestione efficiente dei progetti e dei set di dati, che può ottimizzare le esigenze di archiviazione. Per saperne di più sul piano Pro, che offre funzioni avanzate, tra cui uno spazio di archiviazione più ampio.
Cosa rende Ultralytics YOLO11 diverso da altri modelli di rilevamento degli oggetti come Faster R-CNN o SSD?
Ultralytics YOLO11 offre un vantaggio rispetto a modelli come Faster R-CNN o SSD grazie alle sue capacità di rilevamento in tempo reale e alla sua maggiore precisione. La sua architettura unica gli consente di elaborare le immagini molto più velocemente senza compromettere la precisione, rendendolo ideale per le applicazioni sensibili ai tempi, come i sistemi di allarme di sicurezza. Per un confronto completo dei modelli di rilevamento degli oggetti, potete consultare la nostra guida.
Come posso ridurre la frequenza dei falsi positivi nel mio sistema di sicurezza utilizzando Ultralytics YOLO11 ?
Per ridurre i falsi positivi, assicurarsi che il modello Ultralytics YOLO11 sia adeguatamente addestrato con un set di dati diversificato e ben annotato. La messa a punto degli iperparametri e l'aggiornamento regolare del modello con nuovi dati possono migliorare significativamente l'accuratezza del rilevamento. Le tecniche dettagliate di regolazione degli iperparametri sono disponibili nella nostra guida alla regolazione degli iperparametri.