Algoritma penghitungan pejalan kaki

12

Saat ini saya sedang mengembangkan proyek penghitung pejalan kaki (menggunakan OpenCV + QT di Linux). Ide saya tentang pendekatan ini adalah:

  1. Tangkap Bingkai
  2. Lakukan Pengurangan Latar Belakang
  3. membersihkan suara (mengikis, melebar)
  4. find blobs (cvBlobslib) - objek foreground
  5. Untuk setiap gumpalan, atur ROI dan cari pejalan kaki (LBP dengan detectMultiScale) di gumpalan ini (untuk kinerja yang lebih baik)
  6. Untuk setiap pejalan kaki yang ditemukan lakukan pencarian tubuh bagian atas bersarang (Tidak yakin) (keandalan lebih baik)
  7. Jika pejalan kaki yang sama ditemukan pada frame yang berkelanjutan (mungkin 3-4 frame) - tambahkan area itu ke camshift dan lacak - tandai sebagai pejalan kaki
  8. Kecualikan area yang dilacak camshift dari deteksi gumpalan untuk frame berikutnya
  9. Jika pejalan kaki melewati angka kenaikan garis

Saya ingin memeriksa apakah saya berada di jalur yang benar. Apakah Anda punya saran tentang cara meningkatkan pendekatan saya? Jika seseorang mengerjakan sesuatu yang serupa, saya akan menghargai tip, sumber daya (dan kritik) yang berguna untuk masalah ini.

bahadir
sumber
5
Anda mungkin ingin mengulangi pertanyaan Anda, dan tinggalkan bagian OpenCV. Frasa itu lebih seperti pertanyaan konseptual yang sebenarnya (Algoritma untuk penghitungan dan pelacakan pejalan kaki).
Geerten
2
Pendekatan Anda terdengar masuk akal, sudahkah Anda mencari literatur akademik yang relevan? Itu seharusnya memberi Anda gambaran tentang keadaan seni. Pengurangan latar belakang bisa rumit, efek lingkungan serta bayangan bisa menjadi masalah.
geometrikal

Jawaban:

8

Saya dapat melihat sejumlah masalah yang mungkin terjadi dengan pendekatan ini. Saya berbicara dari pengalaman saya sendiri di sini dari memperbaiki sistem penghitungan pejalan kaki dengan pendekatan yang sangat mirip, jadi saya tidak bermaksud mengecilkan hati. Sebaliknya, saya ingin memperingatkan Anda tentang kemungkinan rintangan yang mungkin harus Anda atasi untuk membangun sistem yang akurat dan kuat.

Pertama, substraksi latar belakang mengasumsikan bahwa objek yang menarik akan selalu bergerak, dan objek yang tidak Anda minati akan tetap diam. Tentunya, ini mungkin terjadi dalam skenario Anda, tetapi itu masih merupakan asumsi yang sangat terbatas. Saya juga menemukan substraksi latar belakang sangat sensitif terhadap perubahan pencahayaan (saya setuju dengan geometrikal).

Berhati-hatilah dalam membuat asumsi bahwa satu gumpalan = satu orang , bahkan jika Anda berpikir bahwa lingkungan Anda terkontrol dengan baik. Itu terjadi terlalu sering sehingga gumpalan yang sesuai dengan orang tidak terdeteksi karena mereka tidak bergerak atau terlalu kecil, sehingga mereka dihapus oleh erosi atau oleh beberapa kriteria ambang batas (dan percayalah, Anda tidak ingin masuk ke dalam " menyetel ambang sampai semuanya bekerja "menjebak. Tidak berhasil;)). Bisa juga terjadi bahwa gumpalan tunggal berkorespondensi dengan dua orang yang berjalan bersama, atau satu orang membawa barang bawaan. Atau seekor anjing. Jadi jangan membuat asumsi pintar tentang gumpalan.

Untungnya, karena Anda menyebutkan bahwa Anda menggunakan LBP untuk deteksi orang , saya pikir Anda berada di jalur yang benar untuk tidak membuat kesalahan dalam paragraf di atas. Saya tidak bisa berkomentar tentang efektivitas LBP pada khususnya. Saya juga membaca bahwa HOG (histogram gradien) adalah metode canggih dalam deteksi orang, lihat Histogram Gradien Berorientasi untuk Deteksi Manusia .

Keluhan terakhir saya terkait dengan penggunaan Camshift . Ini didasarkan pada histogram warna, jadi, dengan sendirinya, ia bekerja dengan baik ketika melacak satu objek yang mudah dibedakan berdasarkan warna, selama jendela pelacakan cukup besar dan tidak ada oklusi atau perubahan mendadak. Tetapi segera setelah Anda harus melacak beberapa target yang mungkin memiliki deskripsi warna yang sangat mirip dan yang akan bergerak sangat dekat satu sama lain, Anda tidak dapat melakukannya tanpa algoritma yang entah bagaimana memungkinkan Anda mempertahankan beberapa hipotesis. Ini bisa berupa filter partikel atau kerangka kerja seperti MCMCDA (Asosiasi Data Monte Carlo Markov Chain , lihat Asosiasi Data Markov Chain Monte Carlo untuk Pelacakan Multi-Target). Pengalaman saya menggunakan Meanshift sendirian ketika melacak beberapa objek adalah segala sesuatu yang tidak boleh terjadi dengan pelacakan: kehilangan jejak, target membingungkan, memperbaiki di latar belakang, dll. Baca sedikit tentang beberapa objek pelacakan dan masalah asosiasi data, ini mungkin di Bagaimanapun, hati menghitung banyak orang (saya katakan "mungkin" karena tujuan Anda menghitung tidak melacak, jadi saya tidak sepenuhnya membuang kemungkinan beberapa pendekatan pintar yang diperhitungkan tanpa pelacakan ...)

Nasihat terakhir saya adalah: hanya ada begitu banyak yang dapat Anda lakukan dengan pendekatan yang diberikan , dan Anda akan melakukan membutuhkan hal-hal yang lebih bagus untuk mencapai kinerja yang lebih baik (jadi saya tidak setuju dengan user36624 dalam hal ini). Ini bisa berarti mengubah sepotong algoritme Anda dengan sesuatu yang lebih kuat, atau mengubah arsitektur secara keseluruhan. Tentu saja, Anda harus tahu barang mewah mana yang benar-benar berguna bagi Anda. Ada publikasi yang berupaya memecahkan masalah dengan cara berprinsip, sementara yang lain hanya menghasilkan algoritme untuk kumpulan data yang diberikan dan mengharapkan Anda untuk melatih classifier yang tidak benar-benar cocok dengan masalah yang dihadapi, sambil meminta Anda untuk sesuaikan juga beberapa ambang batas. Penghitungan orang adalah penelitian, jadi jangan berharap hal-hal akan datang dengan mudah. Berusahalah untuk mempelajari hal-hal yang sedikit di luar kemampuan Anda, dan kemudian lakukan lagi dan lagi ...

Saya mengakui bahwa saya belum menawarkan solusi apa pun dan sebaliknya hanya menunjukkan kekurangan dalam pendekatan Anda (yang semuanya berasal dari pengalaman saya sendiri). Untuk inspirasi, saya sarankan Anda membaca beberapa penelitian terbaru, misalnya Stable Multi-Target Tracking dalam Video Surveillance Real-Time . Semoga berhasil!

Jong Bor Lee
sumber
9

Saya pikir apa yang Anda tanyakan adalah tentang kelayakan algoritma pejalan kaki Anda.

Ada dua strategi umum untuk masalah seperti ini:

  1. (bawah-ke-atas) Anggap itu sebagai masalah deteksi murni, di mana di setiap bingkai Anda hanya mendeteksi pejalan kaki. Setelah Anda mendeteksi mereka, a) menghitung jumlah mereka dalam bingkai cukup mudah; dan b) melacaknya dalam frame yang berurutan juga mudah. Karena itu, Anda menyelesaikan semuanya.

  2. (atas ke bawah) Anggap itu sebagai masalah pengenalan tindakan, di mana Anda mendeteksi apakah ROI dalam frame berturut-turut adalah pejalan kaki atau tidak sesuai dengan tindakannya. Setelah Anda memecahkan masalah ini, maka Anda memecahkan masalah deteksi dan pelacakan secara bersamaan.

Algoritma heuristik Anda berada di kategori pertama. Saya tidak ingin membuat Anda kecil hati, tetapi Anda mungkin kehilangan poin kunci bagaimana mendeteksi pejalan kaki. Karena data nyata bisa lebih rumit daripada yang Anda pikirkan. Misalnya, jika ini adalah kamera kereta bawah tanah, yang bingkainya mungkin penuh dengan pejalan kaki dan dengan demikian menghilangkan latar belakang atau mendeteksi gumpalan tidak membantu sama sekali. Dalam hal ini, mungkin lebih masuk akal untuk menggunakan deteksi wajah dan algoritma pengenalan wajah untuk menyelesaikan masalah, karena jika Anda menemukan wajah, Anda menemukan pejalan kaki. Di sisi lain, tergantung pada definisi Anda tentang pejalan kaki, mungkin benar bahwa tidak semua orang muncul dalam bingkai harus diperlakukan sebagai pejalan kaki. Dalam hal ini, mungkin masuk akal untuk menggunakan algoritme pengenalan tindakan (kategori kedua), di mana Anda dapat secara eksplisit mendefinisikan pejalan kaki berdasarkan perilakunya.

Berikut beberapa tips berdasarkan pengalaman saya:

  1. Tetap pada apa yang Anda ketahui dan apa yang dapat Anda ambil dengan mudah. Jangan menginvestasikan waktu Anda pada sesuatu yang mewah tetapi membutuhkan banyak latar belakang yang tidak Anda miliki. Percayalah, semua algoritme ini akan bagus dalam beberapa kasus tetapi buruk pada beberapa lainnya. Oleh karena itu, hal pertama adalah membuat sesuatu berfungsi, tidak peduli seberapa baik atau buruknya itu.

  2. Ketahui lebih banyak tentang data Anda dan kemudian tentukan metode Anda. Gambaran umum tentang masalah tidak cukup dalam banyak kasus.

  3. Jika Anda ingin menunjukkan ide Anda, lebih baik menggunakan MATLAB dan membuat prototipe.

batu sandungan
sumber