Автор Тема: OpenCV / обучаване на Haar cascade класификатори  (Прочетена 31345 пъти)

4096bits

  • Напреднали
  • *****
  • Публикации: 3300
    • Профил
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #105 -: Jun 05, 2015, 11:04 »
Import tkinter си го пиша. Реве. Ще се разровя още в нета, че нямах време да търся, как става.
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #106 -: Jun 05, 2015, 12:36 »
Ем виж тогава дали библиотеката ти е в PYTHONPATH-а.

Активен

"Knowledge is power" - France is Bacon

NorthBridge

  • Напреднали
  • *****
  • Публикации: 177
  • Distribution: Slackware-current
  • Window Manager: Enlightenment E17
  • Mad Tinkerer
    • Профил
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #107 -: Jun 05, 2015, 14:50 »
Ще прощавате за офтопика, ама...
https://t.co/LYWIf6EsPL

Това да шофираш в София е като руска рулетка с 5 патрона. ???
Активен

I did a 'zcat vmlinuz > /dev/audio' and I think I heard God...

remotexx

  • Напреднали
  • *****
  • Публикации: 811
    • Профил
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #108 -: Jun 05, 2015, 21:20 »
Нещо подобно но в "умален" мащаб
http://blog.qt.io/blog/2015/06/04/qt-5-5-computer-vision-and-the-nitrogen6x/
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #109 -: Jun 23, 2015, 00:18 »
Нали разправях че някой ден ще се захвана с проследяването на обекти с PTZ камера. Покрай другите занимания с ANPR разпознаването и покрай уеб-базираното домашно видеонаблюдение, нямах време да си играя. Днес обаче си поиграх малко и резултатът е това:

https://www.youtube.com/watch?v=fwhAwcsAJyI

Изводът е че това е далеч по-сложен проблем, отколкото съм очаквал. Едно е да проследяващ движещи се обекти от неподвижна камера, съвсем различно е от такава, която може да се врътка и сцената да се изменя достатъчно добре. "Обичайните" алгоритми за проследяване на обекти (camshift / optical flow дивотии / комбинация от двете) се сдухват жестоко, въобще не им понасят големи промени в сцената. Та докато измисля какво да направя, реших да реализирам нещо просто - алгоритъмът е просто да изваждам всички движещи се обекти, да вземам най-големият от тях и да се опитвам да го държа в зрителното поле на камерата (това не значи да го фиксирам в центъра на камерата, а в някакви рамки - като почне да излиза от тях, засилвам PTZ команда да врътне камерата, за да стои там).

Това е тъпо и не работи супер добре, поради дефиницията за "най-голям обект". която е "локална" за кадъра и на следващият кадър, друг обект може да се окаже по-голям. Допълнително, моментът с местенето на камерата довежда до "огромен брой обекти които се местят", което всъщност не е така, просто се променя ъгълът от който камерата вижда. Та трябва да игнорираме сцените с голямо движение. Не можем просто да не правим сметки докато камерата се движи, защото PTZ заявката връща резултат веднага, но камерата се врътка механично известно време след това (а и мрежовата латентност особено на wifi връзката е убийствена - реакция често след половин-една секунда).

Има ужасно голям мегдан за подобрения и аз имам няколко идеи. А иначе, съвсем различен подход (и до голяма степен независим от местенето) е вместо да търсим движение, да използваме Haar каскадни класификатори, за да търсим движещи се хора или автомобили. Това ще е доста по-изчислително тежко, но ще е доста по-ефективно, в крайна сметка камерата няма нужда да се врътка, за да проследява някаква скапана муха, която прелита близко до нея.

Според мен това нещо може да стане съвсем истинско и работещо. И би било доста полезно в сценариите когато нахлуват разни крадци или нещо от сорта, защото ще максимизира времето, когато въпросните са регистрирани и записани от камерите.

П.П всъщност съвсем механично, pan/tilt стъпката е контролируема и ако се възползвам от това, мога дори да насиля обекта да е в центъра на камерата, ама за целите на видеонаблюдението, това изглежда грозно. Ако заедно с камерата беше монтирана и картечница дето стреля, сигурно щеше да има други изисквания. Чисто идиотска тролщина, ама добре че такива неща не е имало по хитлеристко време, защото тогава на някой naistina щеше да му хрумне да направи наистина нещо такова с монтирана картечница и да търси примерно циг...роми по някакъв признак, примерно хистограма и да ги стреля. Доста тролско, но щяха да го донаправят психопатите.
« Последна редакция: Jun 23, 2015, 02:12 от gat3way »
Активен

"Knowledge is power" - France is Bacon

4096bits

  • Напреднали
  • *****
  • Публикации: 3300
    • Профил
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #110 -: Jun 23, 2015, 22:20 »
Примитивно, но това пуснато докато те няма и да праща по кадър на секунда някъде в облака, ако влезе непознат.... Какво като е примитивно  ;)
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #111 -: Jun 24, 2015, 00:57 »
Аз не съм много убеден че това има голяма стойност за видеонаблюдение в апартамент. Някаква файда има единствено в големи стаи когато обектът е поне на едно 5-6 метра от камерата. Виж, за дворове и открити пространства е много идейно. А ако се доработи малко алгоритъма и да zoom-ва вместо само да се върти, тогава възможностите наистина са големи. Това има негативни страни (увеличавайки върху нещо, губим евентуално важни събития, които могат да възникнат в същото време встрани), както и чисто като логика е доста сложно - например какъв да е "обикновения" zoom level, колко да zoom-ваме, кога да възтановяваме "обикновения" zoom level - след фиксирано време е тъпо, защото примерно ако е крадец, който се суети около нещо и не мърда много, да го отебем е глупава стратегия . Дори само с въртенето има любопитни моменти, като например дали след проследяването да се връщаме в началното състояние на камерата, дали да я оставим да "патрулира" - т.е да се врътка наляво-надясно докато засече движещ се обект. Сценарии много, а оптимална стратегия май няма, зависи си от ситуацията.

За жалост, камерата ми не подържа zoom и следователно тази част от забавата няма как да се сблъскам с нея. А на открито, това би дало доста забавни възможности, комбинирайки го с други....feature-и. Примерно ако се комбинира с ANPR, може да zoom-ва върху далечни автомобили, за да им прочетем и логнем номера. Може да се комбинира с лицево разпознаване и да се разпознават хора в далечината. Дори да не се разпознава, може да използваме само лицево откриване с Haar модел и да се стремим да държим лицето на фокус. Наскоро нали убиха едно момче в Борисовата градина и заподозряния е някакъв бръснат тип, уловен на записи от камера. Имаше из медиите изображение от тази камера, заподозреният там в далечината и като добавим и кофти резолюцията и размазването заради движението, лицето му не е особено разпознаваемо. Но с PTZ камера с някакъв алгоритъм за проследяване и zoom-ване върху лица, може би нещата щяха да са доста различни сега. А може би не - ако е имало повече движещи се обекти, вероятно дори нямаше да го регистрира, щеше да е zoom-нало върху нещо друго.

Но да не говорим за такива негативни неща, би било забавно упражнение да си направиш проследяване на кацащи самолети примерно, при положение че живееш близо до летището (аз понеже навремето живях известно време и бях свикнал да гледам самолетите докато кацат, понеже минаваха достатъчно ниско не ми беше проблем да идентифицирам авиокомпанията). С камера дето проследява и zoom-ва, това може да стане автоматично и би било забавно като експеримент, не че има ужасно практична стойност.
« Последна редакция: Jun 24, 2015, 01:47 от gat3way »
Активен

"Knowledge is power" - France is Bacon

4096bits

  • Напреднали
  • *****
  • Публикации: 3300
    • Профил
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #112 -: Jun 24, 2015, 12:13 »
Това с проследяването на камерата, ако се приложи върху инфрачервена камера. Ама инфрачервена, плюс алгоритъмчето за разпознаване на лица, но приложено към определени твърди предмети, няма ли да е забавно, да си личи през дрехите, кой какво носи по джобовете си и, ако е нещо опасно и евентуално нелегално, да алармира?!  :)
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #113 -: Jun 25, 2015, 22:28 »
Тия камери струват много пари. Иначе и мен ми е забавно да гледам видеа снимани с термокамера, някои неща са напълно прозрачни - примерно черни найлонови торбички. Имаше дори някакъв пич дето четеше татуировката на една жена изпод блузата й, което ме навежда на странната мисъл че боята в татуировката поглъща по-добре инфрачервения спектър в сравнение с дрехата.  Предполагам има материи, които са далеч по-прозрачни за инфрачервените вълни, отколкото за тези във видимия спектър. Що се отнася до предметите в джоба, не знам дали това въобще е надеждно.

Във всеки случай не с тези камерки с нощен режим и IR ледове за осветяване на сцената. Пак казвам, това работи в горния край на IR спектъра и част от видимия и далеч не е толкова чувствително. Плюс това, това което се регистрира до голяма степен са отразени инфрачервени вълни, а не термалното излъчване от човешкото тяло - което е хубаво, защото добре се виждат контурите на осветените предмети и за целите на видеонаблюдението това много вероятно е по-важно, защото важното в крайна сметка е как засечените хора взаимодействат със средата. Може би трябва да направя няколко снимки в нощен режим на тъмно за да се убедиш че далеч не е толкова холивудско, колкото звучи, но пък предполагам из нета е пълно с такива.

Но пък предполагам това е и една от причините лицевото разпознаване да работи в нощен режим на такива камери, защото лицевите характеристики се запазват до голяма степен (макар че изглеждат изродено, хората напомнят малко на извънземни или елфи). С истинска термокамера поне повечето изображения на човешки лица които съм виждал са просто едни размазани контури силно контрастиращи с околната среда, но е доста по-трудно да се различат характерните лицеви контури.
« Последна редакция: Jun 25, 2015, 22:35 от gat3way »
Активен

"Knowledge is power" - France is Bacon

4096bits

  • Напреднали
  • *****
  • Публикации: 3300
    • Профил
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #114 -: Jun 25, 2015, 23:19 »
Горния край на инфрачервения спектър не са ли 50 000 нанометра?! Това не е ли твърде голям диапазон за всеки сензор? Ако го хваща, а също и част от видимия.... Браво! Някои хора са магьосници.
Иначе холивудските изпълнения ги зная и зная, че действителността е друга. А как стои въпросът с ултравиолетовата светлина? Тя е с по-къса дължина и би трябвало да не е толкова размазано? Или не си се интересувал.
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #115 -: Jun 25, 2015, 23:28 »
Всъщност, наистина има доста снимки правени из нета. Мога да потвърдя, че при мен нещата изглеждат горе-долу по същия начин:



Що се отнася до ултравиолетовия спектър, вероятно матрицата "регистрира" долната част от него, близо до видимия. Все пак железарията не е точно като човешкото око и frequency response-а и е по-различен. Но предполагам стъклото в лещата служи като естествен филтър за голяма част от него. Между другото, същата е историята и с инфрачервената светлина, огромна част от камерките имат IR филтър, защото иначе изображенията изглеждат неестествени. Специално тази за видеонаблюдението доколкото разбирам освен че пуска LED-овете, "премахва" и филтъра, чисто физически, чува се едно "щрак" когато минава от дневен в нощен режим. Това е и вероятно причината светлината от дистанционното да се вижда бледо в дневен режим, но да "заслепява" камерата в нощен режим.


Хах, апропо открих нещо забавно. Евтинката IP камера d-link 5020l която имам по принцип има motion detection, но той може да се конфигурира или да праща мейлове или да качва видеа някъде, тези неща сами по себе си са неизползваеми за сървър за видеонаблюдение, защото няма как да знаеш в реално време кога се е случило движението, за да вземеш мерки (да вдигнеш аларма, да почнеш да записваш и т.н.).  ONVIF решава това като дефинира механизъм за HTTP-базирани нотификации. Но камерката е евтина и не подържа ONVIF.  Най-забавното е че има някакво закътано старо API за d-link, с някакви cgi команди. Половината не работят, но се оказва че точно endpoint-а за event нотификациите работи. Първоначално не ми регистрираше движение, но се оказа че трябва да го инициализирам със заявка, която е доста специфична за модела. В крайна сметка дори с евтинията сега си имам edge motion detection, вместо да смятам с opencv. Резултатът е покъртителен - там където преди изяждах 40% от процесорното време на едно ядро, сега изяждам по-малко от 20% (това включва запис на видео и регистриране на event-и които в случая идват от камерата). Това в крайна сметка означава че на моята скромна десктоп машинка спокойно биха и понесли до около 15-20 навързани такива камерки, с хардуерен motion detection преди да почне да губи кадри и да се дави заради ограничените процесорни ресурси. Голяма забава. Апропо, понеже има и микрофон и съвсем лесно мога да приемам и нотификации за регистриран звук над някакви децибели (но пък не записвам и не мисля да записвам звук). Въпреки това, би било полезна функционалност, в случай че се трошат стъкла и се разбиват врати.

В крайна сметка, според мен е много реална идеята чисто софтуерно и с евтини камери да се реализира интелигентно видеонаблюдение за малки обекти.
« Последна редакция: Jun 25, 2015, 23:56 от gat3way »
Активен

"Knowledge is power" - France is Bacon

remotexx

  • Напреднали
  • *****
  • Публикации: 811
    • Профил
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #116 -: Jul 06, 2015, 22:47 »
Докъде стигна с това?
А склонен ли си да се върнеш пак към C/C++?

https://www.youtube.com/watch?v=8KShQnKgnms

Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #117 -: Jul 06, 2015, 23:54 »
Ами в общи линии занимавам се още, неприятната част е че прекалено много вземане-даване имам с уеб фронтенд глупостите покрай това и нито разбирам от тях, нито ми е приятно. Иначе видеостриймването и записите и IVS алгоритмите съм ги интегрирал вече (с едно изключение - motion tracking-а, защото чакам читав 3.0 release с добре документиран python интефейс - понеже сегашния алгоритъм който ползвам там е реализиран изцяло на C и едно дето ще е по-бърз и две дето вероятно ще е по-читав). Освен което злите езици говорят че OpenCL ускорението ще е достъпно и за питонския код - ама все още няма никаква документация по въпроса и не знам.

Това което не съм направил и имам чисто философски проблем как да го измисля е с "алармите" и това е понеже ми се въртят разни сложни схеми и трябва да ги опростя, за да е използваемо. Идеята ми е грубо да разделя това на няколко неща - събития (които и сега логвам и обработвам), правила (кое събитие от коя камера колко е критично и какво да се случи ако настъпи) и действия (примерно мейл нотификация). Та правилата не мога да ги измисля като хората (като ORM обекти). Значи за тези правила, първото важно е множество от камери за които това ще важи. Второто важно е severity на събитието. Третото е какво действие да се изпълни. И последното, което не мога да навържа е времето за което това правило да важи - примерно всеки ден от 9 до 18 часа. Това е важно, защото ако примерно реша за всяко засечено движение да се изпраща SMS нотификация, определено не искам да се оспамвам сутринта или вечерта като се върна от работа, а варианта ръчно да ровя из уеб интерфейса да преконфигурирам всеки ден е малоумен. Обаче как най-лесно и като реализация и като за пред потребителя това да стане още не съм измислил.

Та философските драми ще ги реша защото излизам в отпуска скоро и ще ми остане време да дращя по листи разни гениални идеи. Ама бъхтенето по шибаните HTML темплейти, js код и CSS неща ми къса нервите и доста ме демотивира.

Ммм иначе на C не бих го портнал посмъртно. Може би единственото нещо, което бих написал на C е частта с прекодирането на стрийма от камерата и записа във видеофайл, защото OpenCV не е мислен за целта и е недъгав, а няма някаква читава питонска библиотека за целта, а и да има, няма да е достатъчно бърза. Та евентуално някой ден като свършат по-важните драми, с цел оптимизация, може да разпиша един демон който ползва на ffmpeg библиотеките за целта.

Иначе като за толкова малко време прилично доста неща успях да направя, което е радостно. Ако всичко това трябваше да го пиша на C, щеше да отнеме месеци, сигурно години. Автоматично откриване на камери по UpNP (евентуално и по ONVIF след време), IVS нещата, напълно функциониращ admin интерфейс и (засега) лимитиран потребителски интерфейс - има grid view (но пък стана ДОСТА добре, горд съм с тези спагети), както и event timeline. Тепърва ще се правят търсенето на събития, ровенето из видеоархиви и т.н. екстри. Всъщност, дори realtime event нотификация си имам за събития в grid view-то (което можеш да си подреждаш и мащабираш както си искаш). Камерите на които се случва събитие в реално време се ограждат в червена рамка, дори мога аудио да стриймвам в браузъра (примерно "ВНИМАНИЕ! ЗАСЕЧЕНО ДВИЖЕНИЕ!").

Демо за съжаление не мога да дам за досегашните усилия, за без пари в биг брадър не участвам :)

П.П а, да и най-хубавото е че реших да тегля един дебел чеп на Adobe и на Microsoft - с флаш нямам никакво намерение да се занимавам, а workaround-а за mjpeg подръжка в Internet Explorer не само че не го донаправих като хората, ами го изхвърлих с кеф. Не ми беше лесно решение, защото определено стриймването на истинско видео с компресия между кадрите, а не поредица от JPEG изображения има и предимства (главно в по-голям избор от транспортни протоколи, не е казано че трябва да е върху HTTP, както и в по-добрата компресия и съответно по-малко bandwidth изисквания, макар че това е условно). Обаче като взех решението да ги отеба честно казано се почуствах доста по-добре.
« Последна редакция: Jul 07, 2015, 00:10 от gat3way »
Активен

"Knowledge is power" - France is Bacon

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #118 -: Aug 01, 2015, 02:00 »
Баткааааааа......значи имало смисъл, стига да си платиш, това е тъжния извод от цялата работа.

След главоблъскане с IP камерите на d-link, просто реших да сe оръся за по-истинска камера (в случая от Hikvision) и определено нещата придобиха смисъл, защото се бях отчаял с тези глупости. Днес си взех новата камерка, разликата е с порядъци. Просто защото снима в Full HD, има разни благинки като цифров denoising, WDR, backlight compensation и тем подобни. Съответно разликата в ефективността на калпавите алгоритми за разпознаване на пушеци, разчитане на регистрационни табели и проследяване на движение просто работят - без да се правят 1000 зависими от сцената хакове.

Да не говорим за другото - имат истински ONVIF support. Сега прекрасната D-link DCS-5222L камера която официално е compliant, неофициално не е. Тъй като имам ssh достъп, разбирам и много неща. Например защо малоумния WS-Discovery майкрософтски протокол, който е в основата на откриването на устройства в мрежата не работи - на камерата има демон, който слухти за multicast заявките и segfault-ва когато получи пакет - това с ВСИЧКИ версии на фърмуера. Поради тази причина d-link-ската камера не може да се открие в мрежата по този начин, който уж е стандартизиран. Следващата част - ако отеба autodiscovery частта и директно запитам d-link-ската камера какво подържа, ми се връща едно, но на практика е съвсем друго. Hikvision просто работи като хората.

Което ме хвърля в блатото, защото сега виждам колко много възможности има и трябва да кодя, за да ги наваксвам. Примерно целият ми OpenCV median flow алгоритъм за проследяване на движение се обезсмисля - камерата го прави учудващо добре и аз получавам нотификация ако обект мине дефинирана линия. Това спестява егати бруталното изчислително време. Друго - камерата подържа адекватно Device командите и сега мога по желание да вдигам fps и bitrate на видеото при нужда. Представи си - засича се движение, вдигаме фреймрейта и битрейта, връткаме PTZ моторите и снимаме.

Възможности има много - примерно камерата има слот за SD карта. Защо да не записва там докато нямаме свързаност и после да дърпаме сниманото (ONVIF протокола го позволява). Това има ограничени приложения, но смислени въпреки това, в случаите в които губим мрежова свързаност.

Но най-много се накефих на инфрачервените сензори, които нямат много общо с тайванските боклуци и наистина осмислят нещата, особено в FullHD резолюция.



Изображението е чисто и разпознаването на лица в нощен режим е доста по-работещо.

PTZ глупостите се връткат с порядъчно по-добра скорост па макар и като максимални градуси да е по-лимитирано.


Другото, което мисля да експериментирам (и това е хардуерна хакерия) е с alarm I/O-то на камерата. Има един вход на който ако се подаде напрежение над 2 волта, се тригерва аларма. Мисля да почна с прости неща, не разни датчици, а просто обикновен прекъсвач. Може да звучи тъпо, но представи си паник бутон, който веднага насочва камерата към мястото на паник бутона и увеличава битрейта, фреймрейта и оттамкачеството на записа - би било полезно.

Накратко съм очарован - можело значи да работи и сега драмата ми е какво да правя със всичко това след като работи като хората :(
« Последна редакция: Aug 01, 2015, 02:09 от gat3way »
Активен

"Knowledge is power" - France is Bacon

remotexx

  • Напреднали
  • *****
  • Публикации: 811
    • Профил
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #119 -: Oct 07, 2015, 20:39 »
Накратко съм очарован - можело значи да работи и сега драмата ми е какво да правя със всичко това след като работи като хората :(
ами направи го самоходно  :P

Баткааааааа......значи имало смисъл, стига да си платиш, това е тъжния извод от цялата работа.
а за тези които искат - може направо да си го купят - не само лица разпознава ами и емоции ..че даже може и такси да  ти извика  >:D
https://www.youtube.com/watch?v=HQtIlxe_ZkY

П.П. Пък ако хакнеш т'ва на комшийката ще може да си я гледаш колкото искаш докато се къпе...
 [_]3 [_]3 [_]3

Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
OpenCV или libjpeg проблем
Общ форум
shoshon 0 1748 Последна публикация Jun 22, 2009, 22:02
от shoshon
OpenCV - Help
Web development
taloveca 0 1484 Последна публикация Jan 27, 2015, 20:06
от taloveca
Инсталиране на OpenCV
Хардуерни и софтуерни проблеми
4096bits 1 1341 Последна публикация Jan 23, 2017, 20:58
от remotexx
Обработка на снимка с opencv
Хардуерни и софтуерни проблеми
gosho987 9 2233 Последна публикация Dec 07, 2017, 17:52
от 4096bits