Can OpenCV detect pedestrians?

Detecția Pietonilor cu OpenCV: Ghid Complet

10/09/2023

Rating: 4.68 (6040 votes)

Viziunea computerizată este un domeniu fascinant al informaticii, care permite mașinilor să "vadă" și să înțeleagă conținutul vizual. De la recunoașterea facială pe smartphone-uri până la sistemele complexe care ghidează autovehiculele autonome, capacitatea de a interpreta imagini și videoclipuri a devenit esențială. Unul dintre celele mai critice aspecte ale acestei tehnologii este detecția pietonilor, o funcționalitate vitală pentru siguranța publică și dezvoltarea sistemelor inteligente de transport.

Is there a way to use people detection in OpenCV?
So instead of tracking, you might just run the detector in each frame and use its output directly. See src/cvaux/cvhog.cpp for the implementation and samples/python/peopledetect.py for a more complete python example (both in the OpenCV sources). Nick, What you are looking for is not people detection, but motion detection.
Cuprins

Ce este OpenCV și de ce este crucial pentru detecția pietonilor?

OpenCV (Open Source Computer Vision Library) este o bibliotecă open-source de referință în domeniul viziunii computerizate. Dezvoltată inițial de Intel, această bibliotecă este concepută pentru aplicații de viziune computerizată în timp real și este compatibilă cu o multitudine de limbaje de programare, inclusiv Python, C++ și Java. Popularitatea sa derivă din setul său robust de instrumente pentru diverse sarcini de viziune computerizată, cum ar fi recunoașterea facială, detecția mișcării și, desigur, detecția obiectelor.

În contextul detecției pietonilor, OpenCV oferă o soluție remarcabil de eficientă și gata de utilizat. În loc să fie nevoie să antrenăm un model de la zero, OpenCV include un model pre-antrenat bazat pe algoritmul HOG (Histogram of Oriented Gradients) combinat cu o mașină cu vectori suport liniari (Linear SVM). Acest lucru simplifică enorm procesul de implementare, permițând dezvoltatorilor să integreze rapid capabilități de detecție a pietonilor în proiectele lor.

Detecția Pietonilor: O Componentă Cheie a Viziunii Computerizate

Detecția pietonilor nu este doar un exercițiu academic, ci o arie de cercetare cu implicații profunde în lumea reală. Unul dintre cele mai evidente și importante domenii de aplicare este cel al autovehiculelor autonome. Un sistem de protecție a pietonilor eficient, capabil să identifice și să urmărească persoanele din jurul vehiculului, poate preveni accidente și poate salva vieți. Această tehnologie permite mașinilor să "vadă" drumul și împrejurimile, să anticipeze mișcările pietonilor și să reacționeze corespunzător, fie prin frânare, fie prin schimbarea direcției.

Can OpenCV detect people on foot?
We can remove features like head, two arms, two legs, etc, from an image of a human body and pass them to set up an AI model. In the wake of setting up, the model can be used to recognize and follow individuals in pictures and video moves. In any case, OpenCV has an inborn procedure to perceive people on foot.

În mod tradițional, detecția persoanelor ar fi implicat extragerea manuală a unor caracteristici specifice corpului uman (cap, brațe, picioare) dintr-o imagine și apoi utilizarea acestor caracteristici pentru a antrena un model de învățare automată. Cu toate acestea, abordarea integrată a OpenCV, bazată pe HOG + SVM, simplifică considerabil acest proces, oferind o metodă robustă și performantă.

Histograma Gradațiilor Orientate (HOG): Inima Detecției

Pentru a înțelege cum funcționează detecția pietonilor în OpenCV, este esențial să înțelegem principiile din spatele Histogramei Gradațiilor Orientate (HOG). Acest algoritm se concentrează pe analiza intensității luminoase și a direcției acesteia în jurul fiecărui pixel dintr-o imagine. Iată cum funcționează simplificat:

  • Analiza Pixel cu Pixel: Algoritmul examinează fiecare pixel și compară intensitatea sa cu cea a pixelilor învecinați.
  • Calculul Gradațiilor: Pe baza acestor comparații, se determină direcția în care imaginea devine mai întunecată (sau mai luminoasă). Aceste direcții sunt reprezentate adesea ca "săgeți" sau "vectori" și sunt numite gradații.
  • Agregarea Histogramei: Imaginea este împărțită în celule mici, iar pentru fiecare celulă, gradațiile sunt grupate în histogramă, reprezentând distribuția orientărilor gradientului. Aceste histograme sunt apoi normalizate și combinate în blocuri mai mari.
  • Descrierea Caracteristicilor: Rezultatul final este un "descriptor HOG", o reprezentare vectorială a caracteristicilor locale ale imaginii, care surprinde forma și structura obiectelor, făcându-le ideale pentru detecția persoanelor.

Acest descriptor este apoi transmis unui model SVM (Support Vector Machine), care este antrenat să clasifice dacă un anumit descriptor HOG corespunde unei persoane sau nu. Modelul pre-antrenat al OpenCV este deja optimizat pentru această sarcină, oferind rezultate precise.

Aplicații Reale ale Detecției Pietonilor

Dincolo de autovehiculele autonome, detecția pietonilor are o gamă largă de aplicații practice, transformând modul în care interacționăm cu tehnologia și îmbunătățind siguranța:

DomeniuDescriere Aplicație
Autovehicule AutonomeIdentificarea și urmărirea pietonilor pentru a preveni coliziunile și a asigura o navigație sigură. Este fundamentul sistemelor de frânare automată de urgență.
Securitate și SupraveghereMonitorizarea zonelor aglomerate, detectarea comportamentelor suspecte, contorizarea fluxului de persoane în magazine, aeroporturi sau evenimente publice.
Numărarea Persoanelor în MulțimeEstimarea numărului de persoane într-o anumită zonă, utilă pentru managementul evenimentelor, planificarea urbană sau în situații de urgență.
Robotică MobilăPermite roboților să navigheze în medii populate, evitând obstacolele și interacționând în siguranță cu oamenii.
Sisteme de Asistență pentru Persoane VârstniceMonitorizarea mișcării și detectarea căzăturilor în locuințe, oferind asistență rapidă în caz de nevoie.

Implementarea Practică: Detecția Pietonilor în Python cu OpenCV

Vom explora cum se poate implementa un detector de pietoni de bază folosind OpenCV în Python, atât pentru imagini statice, cât și pentru fluxuri video. Procesul este surprinzător de simplu, datorită funcționalităților încorporate ale OpenCV.

Is OpenCV a Python library?
OpenCV is an open-source library written in C/C++, but we can also use it in python. It is one of the most widely used libraries for computer vision tasks like face recognition, motion detection, object detection, etc. OpenCV has a built-in pre-trained HOG + Linear SVM model to perform pedestrian detection.

Cerințe și Instalare

Pentru a rula exemplele de cod, veți avea nevoie de următoarele biblioteci Python:

  • opencv-python (versiunea 3.4.2 sau mai nouă este recomandată, dar și cele mai recente funcționează)
  • imutils (o bibliotecă utilă pentru operații de bază cu imagini, cum ar fi redimensionarea)
  • numpy (necesară pentru manipularea array-urilor, adesea instalată ca dependență a OpenCV)

Puteți instala aceste module folosind pip, managerul de pachete Python:

pip install opencv-python imutils numpy

Asigurați-vă că folosiți un mediu de dezvoltare adecvat (de exemplu, un mediu virtual) și că aveți permisiunile necesare. Rețineți că anumite funcționalități OpenCV, în special cele legate de afișarea ferestrelor grafice, pot funcționa mai bine pe un sistem local decât în medii bazate pe cloud precum Google Colab.

Exemplul 1: Detecția Pietonilor într-o Imagine

Acest program va încărca o imagine, o va redimensiona pentru o procesare mai rapidă și apoi va folosi detectorul HOG pre-antrenat pentru a identifica pietonii, desenând dreptunghiuri în jurul lor.

import cv2 import imutils # 1. Inițializarea detectorului de persoane HOG # Această linie creează un obiect HOGDescriptor. # Apoi, setSVMDetector() încarcă modelul pre-antrenat # pentru detecția persoanelor (HOG_getDefaultPeopleDetector). hog = cv2.HOGDescriptor() hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector()) # 2. Citirea imaginii # Asigură-te că imaginea 'img.png' este în același director cu scriptul tău. image = cv2.imread('img.png') # 3. Redimensionarea imaginii pentru o procesare optimă # imutils.resize() redimensionează imaginea, asigurându-se că lățimea # nu depășește 400 de pixeli, ceea ce ajută la performanță. image = imutils.resize(image, width=min(400, image.shape[1])) # 4. Detectarea tuturor regiunilor din imagine care conțin pietoni # hog.detectMultiScale() este funcția cheie. # - winStride=(4, 4): pasul de glisare al ferestrei de detecție. # - padding=(4, 4): pixeli de umplutură adăugați ferestrei de glisare. # - scale=1.05: factorul de scalare al ferestrei de detecție. # Returnează o listă de regiuni (dreptunghiuri) unde au fost detectați pietoni. (regions, _) = hog.detectMultiScale(image, winStride=(4, 4), padding=(4, 4), scale=1.05) # 5. Desenarea dreptunghiurilor în jurul pietonilor detectați # Iterăm prin fiecare regiune detectată (x, y, lățime, înălțime). # cv2.rectangle() desenează un dreptunghi: # - image: imaginea pe care se desenează. # - (x, y): colțul stânga sus al dreptunghiului. # - (x + w, y + h): colțul dreapta jos al dreptunghiului. # - (0, 0, 255): culoarea dreptunghiului (roșu în format BGR). # - 2: grosimea liniei dreptunghiului. for (x, y, w, h) in regions: cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2) # 6. Afișarea imaginii rezultate cv2.imshow("Imagine cu Pietoni Detectati", image) cv2.waitKey(0) # Așteaptă o apăsare de tastă pentru a închide fereastra cv2.destroyAllWindows() # Închide toate ferestrele OpenCV

Exemplul 2: Detecția Pietonilor într-un Videoclip

Acest script extinde funcționalitatea la videoclipuri, procesând fiecare cadru individual. Este similar cu exemplul pentru imagini, dar adaugă o buclă de procesare a cadrelor și gestionarea fluxului video.

Can OpenCV detect pedestrians?
After training, the model can be used to detect and track humans in images and video streams. However, OpenCV has a built-in method to detect pedestrians. It has a pre-trained HOG (Histogram of Oriented Gradients) + Linear SVM model to detect pedestrians in images and video streams. Histogram of Oriented Gradients
import cv2 import imutils import numpy as np # Importăm numpy pentru non_max_suppression from imutils.object_detection import non_max_suppression # 1. Inițializarea detectorului de persoane HOG hog = cv2.HOGDescriptor() hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector()) # 2. Citirea fluxului video # Asigură-te că fișierul 'vid.mp4' este în același director cu scriptul tău. cap = cv2.VideoCapture('vid.mp4') # 3. Bucla de procesare a cadrelor video while cap.isOpened(): ret, image = cap.read() # Citirea unui cadru # Verificăm dacă citirea a fost reușită if ret: # Redimensionarea cadrului pentru o procesare mai rapidă image = imutils.resize(image, width=min(400, image.shape[1])) # Copie a cadrului original pentru desenare orig_frame = image.copy() # Detectarea pietonilor în cadrul curent # Parametrii winStride, padding și scale pot fi ajustați pentru performanță (regions, weights) = hog.detectMultiScale(image, winStride=(4, 4), padding=(4, 4), scale=1.05) # Aplicarea supresiei non-maximale pentru a elimina dreptunghiurile suprapuse # Aceasta curăță rezultatele, lăsând doar cele mai bune detecții. regions = np.array([[x, y, x + w, y + h] for (x, y, w, h) in regions]) selection = non_max_suppression(regions, probs=None, overlapThresh=0.45) # overlapThresh poate fi ajustat # Desenarea dreptunghiurilor finale pe cadrul original for (x1, y1, x2, y2) in selection: cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2) # Culoare verde # Afișarea cadrului cu detecțiile cv2.imshow("Video cu Pietoni Detectati", image) # Așteaptă 25ms sau până la apăsarea tastei 'q' pentru a ieși if cv2.waitKey(25) & 0xFF == ord('q'): break else: break # Ieșim din buclă dacă nu mai sunt cadre # 4. Eliberarea resurselor cap.release() # Eliberează obiectul VideoCapture cv2.destroyAllWindows() # Închide toate ferestrele OpenCV

Acest cod demonstrează nu doar detecția, ci și o tehnică importantă numită non-maxima suppression (NMS), care este esențială pentru a gestiona multiplele dreptunghiuri de detecție generate pentru același obiect. NMS ajută la consolidarea detecțiilor suprapuse într-un singur dreptunghi, mai precis.

Întrebări Frecvente despre Detecția Pietonilor cu OpenCV

Este OpenCV o bibliotecă Python?

OpenCV este o bibliotecă open-source scrisă în principal în C/C++. Cu toate acestea, este extrem de versatilă și oferă API-uri (interfețe de programare a aplicațiilor) pentru o multitudine de limbaje, inclusiv Python, Java și MATLAB. Această flexibilitate permite dezvoltatorilor să utilizeze puterea OpenCV în mediul lor preferat. Pentru Python, există un "wrapper" care permite apelarea funcțiilor OpenCV ca și cum ar fi funcții native Python, făcând-o una dintre cele mai populare alegeri pentru proiecte de viziune computerizată în Python.

Există o modalitate de a folosi detecția persoanelor în OpenCV?

Absolut! Așa cum am detaliat în acest articol, OpenCV dispune de o metodă încorporată și eficientă pentru detecția persoanelor. Aceasta se bazează pe modelul pre-antrenat HOG (Histogram of Oriented Gradients) + Linear SVM. Este o soluție rapidă pentru a începe, fără a fi nevoie de antrenamente complexe de la zero. Cu toate acestea, este important de menționat că, deși este un punct de plecare excelent, detecția robustă a persoanelor în scenarii complexe (cum ar fi mulțimi aglomerate, condiții de iluminare slabă sau ocluzii parțiale) poate necesita tehnici avansate, cum ar fi rețele neuronale profunde (de exemplu, YOLO, Faster R-CNN) și algoritmi de urmărire multi-obiect. Problema segmentării și identificării persoanelor individuale într-o mulțime este una provocatoare și implică adesea algoritmi mai sofisticați de învățare profundă și urmărire.

How to detect pedestrians in a photo and a video?
In this tutorial, we will write a program to detect pedestrians in a photo and a video using a technique called the Histogram of Oriented Gradients (HOG). We will use the OpenCV computer vision library, which has a built-in pedestrian detection method that is based on the original research paper on HOG .

Poate OpenCV detecta pietoni pe jos?

Da, OpenCV poate detecta pietoni în mers sau staționari. Modelul HOG + SVM este antrenat să recunoască formele generale ale corpului uman, indiferent de starea de mișcare. Ceea ce diferențiază detecția în imagini de cea în videoclipuri este persistența și urmărirea. Într-un videoclip, odată ce un pieton este detectat într-un cadru, se pot folosi algoritmi de urmărire (tracking) pentru a-i monitoriza mișcarea în cadrele ulterioare, chiar dacă detecția individuală în fiecare cadru ar putea fi intermitentă. Această combinație de detecție și urmărire oferă o înțelegere mai completă a prezenței și mișcării pietonilor într-un mediu dinamic.

Concluzie

Detecția pietonilor cu OpenCV este un exemplu elocvent al modului în care viziunea computerizată poate aduce inovație și eficiență în diverse domenii. De la îmbunătățirea siguranței pe șosele prin sistemele de autovehicule autonome, până la optimizarea gestionării spațiilor publice și a securității, capacitatea de a identifica și urmări persoanele este de neprețuit. Prin intermediul algoritmului HOG și a modelului SVM pre-antrenat, OpenCV oferă o soluție accesibilă și puternică, deschizând porți către aplicații complexe și avansate. Pe măsură ce tehnologia continuă să evolueze, ne putem aștepta la sisteme de detecție și mai precise și mai rapide, contribuind la un viitor mai sigur și mai inteligent.

Explorarea și experimentarea cu aceste tehnologii reprezintă un pas important pentru oricine este interesat de inteligența artificială și de impactul său transformator.

Dacă vrei să descoperi și alte articole similare cu Detecția Pietonilor cu OpenCV: Ghid Complet, poți vizita categoria Fitness.

Go up