Algoritmo di conteggio dei pedoni


12

Attualmente sto sviluppando un progetto di contatore pedonale (usando OpenCV + QT su Linux). La mia idea sull'approccio è:

  1. Cattura cornici
  2. Sottrazione in background
  3. cancellare i rumori (erodere, dilatare)
  4. trova BLOB (cvBlobslib) - oggetti in primo piano
  5. Per ciascun BLOB, impostare il ROI e cercare i pedoni (LBP con detectMultiScale) in questi BLOB (per prestazioni migliori)
  6. Per ogni pedone trovato fai una ricerca nella parte superiore del corpo nidificata (non sono sicuro) (migliore affidabilità)
  7. Se lo stesso pedone si trova sui fotogrammi continui (forse 3-4 fotogrammi) - aggiungi quell'area al camshift e traccia - segna come pedonale
  8. Escludere le aree tracciate da camshift dal rilevamento BLOB per i fotogrammi successivi
  9. Se un pedone attraversa un numero di incremento di linea

Voglio verificare se sono sulla strada giusta. Hai qualche suggerimento su come migliorare il mio approccio? Se qualcuno lavorasse su qualcosa di simile, apprezzerei eventuali suggerimenti, risorse (e critiche) utili su questo problema.


5
Potresti voler riformulare la tua domanda ed escludere le parti OpenCV. Frase più simile alla domanda concettuale che è realmente (algoritmo per il conteggio e il monitoraggio dei pedoni).
Geerten,

2
Il tuo approccio sembra ragionevole, hai cercato letteratura accademica pertinente? Questo dovrebbe darti un'idea dello stato dell'arte. La sottrazione dello sfondo può essere complicata, gli effetti ambientali e le ombre possono essere un problema.
geometrikal,

Risposte:


8

Vedo una serie di possibili problemi con questo approccio. Parlo qui per la mia esperienza personale nel migliorare un sistema di conteggio dei pedoni con un approccio molto simile, quindi non intendo essere scoraggiante. Al contrario, vorrei avvertirti di possibili ostacoli che potresti dover superare per costruire un sistema preciso e robusto.

In primo luogo, la sottostrazione di sfondo presuppone che gli oggetti di interesse si muoveranno sempre e gli oggetti che non sono interessati a contare rimarranno completamente immobili. Sicuramente, questo può essere il caso nel tuo scenario, ma è ancora un presupposto molto limitante. Ho anche trovato la sottostrazione di sfondo molto sensibile ai cambiamenti nell'illuminazione (sono d'accordo con geometrikal).

Diffida dal presupporre che un blob = una persona , anche se pensi che il tuo ambiente sia ben controllato. Accadde troppo spesso che le chiazze corrispondenti alle persone non venivano rilevate perché non si muovevano o erano troppo piccole, quindi venivano eliminate dall'erosione o da alcuni criteri di soglia (e credetemi, non volete entrare nel " sintonizza le soglie fino a quando tutto funziona "trap. Non funziona;)). Può anche succedere che un singolo blob corrisponda a due persone che camminano insieme o a una singola persona che trasporta una sorta di bagaglio. O un cane. Quindi non fare ipotesi intelligenti sui BLOB.

Fortunatamente, dal momento che menzioni che stai usando LBP per il rilevamento di persone , penso che tu sia sulla buona strada per non commettere errori nel paragrafo sopra. Tuttavia, non posso commentare l'efficacia degli LBP. Ho anche letto che gli HOG (istogrammi di gradienti) sono un metodo all'avanguardia nel rilevamento delle persone, vedi Istogrammi dei gradienti orientati per il rilevamento umano .

La mia ultima lamentela riguarda l'uso di Camshift . Si basa su istogrammi di colore, quindi, da solo, funziona bene quando si traccia un singolo oggetto che è facile da distinguere per colore, purché la finestra di tracciamento sia abbastanza grande e non ci siano occlusioni o brusche modifiche. Ma non appena devi tenere traccia di più target che possono avere descrizioni dei colori molto simili e che si avvicinano molto l'uno all'altro, semplicemente non puoi fare a meno di un algoritmo che in qualche modo ti consente di mantenere ipotesi multiple. Potrebbe trattarsi di un filtro antiparticolato o di un framework come MCMCDA (Markov Chain Monte Carlo Data Association, vedere Markov Chain Monte Carlo Data Association per il monitoraggio di più target). La mia esperienza con l'utilizzo di Meanshift da solo durante il tracciamento di più oggetti è tutto ciò che non dovrebbe accadere con il tracciamento: perdita di traccia, confusione di obiettivi, fissazione in background, ecc. Leggi un po 'su più oggetti di tracciamento e problemi di associazione dei dati, questo potrebbe essere al cuore del conteggio di più persone dopo tutto (dico "potrebbe essere" perché il tuo obiettivo è non contare il monitoraggio, quindi non scartare completamente la possibilità di un approccio intelligente che conta senza il monitoraggio ...)

Il mio ultimo consiglio è: c'è solo così tanto si può fare con un determinato approccio , e si avrà bisogno di cose più elaborato per ottenere prestazioni migliori (così sono d'accordo con user36624 a questo proposito). Ciò può implicare la modifica di un pezzo del tuo algoritmo con qualcosa di più potente o la modifica complessiva dell'architettura. Certo, devi sapere quali cose fantasiose sono davvero utili per te. Ci sono pubblicazioni che tentano di risolvere il problema in linea di principio, mentre altri semplicemente escogitano un algoritmo per un determinato set di dati e si aspettano che tu formi un classificatore che non è davvero adatto al problema in questione, mentre ti richiede di regolare anche alcune soglie. Il conteggio delle persone èricerca in corso, quindi non aspettarti che le cose vengano facilmente. Fai uno sforzo per imparare cose che vanno leggermente oltre le tue capacità, e poi fallo ancora e ancora ...

Riconosco che non ho offerto alcuna soluzione e invece ho solo evidenziato difetti nel tuo approccio (che provengono tutti dalla mia esperienza). Per ispirazione, ti consiglio di leggere alcune ricerche recenti, ad esempio il monitoraggio stabile multi-target nel video di sorveglianza in tempo reale . In bocca al lupo!


9

Penso che ciò che stai chiedendo riguardi la fattibilità del tuo algoritmo pedonale.

Esistono due strategie generali per questo tipo di problemi:

  1. (dal basso verso l'alto) Consideralo come un puro problema di rilevamento, in cui in ogni frame rilevi solo i pedoni. Una volta rilevati, a) contare il loro numero in un frame è abbastanza facile; e b) anche il monitoraggio di uno qualsiasi di essi in frame consecutivi è facile. Pertanto, risolvi tutto.

  2. (dall'alto verso il basso) Consideralo come un problema di riconoscimento dell'azione, in cui rilevi se un ROI in frame consecutivi è pedonale o meno in base alle sue azioni. Una volta risolto questo problema, risolvi i problemi di rilevamento e tracciamento contemporaneamente.

Il tuo algoritmo euristico è nella prima categoria. Non voglio scoraggiarti, ma potresti perdere il punto chiave su come rilevare un pedone. Perché i dati reali possono essere più complicati di quanto si pensasse. Ad esempio, se si tratta di una telecamera della metropolitana, i cui fotogrammi potrebbero essere pieni di pedoni e quindi rimuovere lo sfondo o rilevare i BLOB non aiuta affatto. In questo caso, forse è più ragionevole utilizzare algoritmi di rilevamento e riconoscimento dei volti per risolvere il problema, perché se trovi un viso trovi un pedone. D'altra parte, a seconda della tua definizione di pedone, forse è vero che non tutti sono apparsi in una cornice dovrebbero essere trattati come un pedone. In questo caso, potrebbe essere ragionevole utilizzare algoritmi di riconoscimento dell'azione (la seconda categoria), in cui è possibile definire esplicitamente un pedone in base ai suoi comportamenti.

Ecco alcuni suggerimenti basati sulla mia esperienza:

  1. Atteniti a ciò che sai e a ciò che puoi facilmente raccogliere. Non investire il tuo tempo in qualcosa di lussuoso, ma che richiede molti sfondi che non hai. Fidati di me, tutti questi algoritmi saranno buoni in alcuni casi, ma cattivi in ​​altri. Pertanto, la prima cosa è far funzionare qualcosa, non importa quanto sia buono o cattivo.

  2. Scopri di più sui tuoi dati e quindi determina il tuo metodo. Una descrizione generale di un problema è insufficiente in molti casi.

  3. Se vuoi dimostrare la tua idea, è meglio usare MATLAB e costruire un prototipo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.