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

gat3way

  • Участник
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Абе някой имал ли е вземане-даване с откриване на обекти с opencv?

Нещо ми стана забавно наскоро и се оказва че е изключително лесно това да се случва в реално време срещу видеовхода от уеб камерата и на всичкото отгоре работи добре. Разбира се не само - на всякакво видео работи еднакво добре - включително върху видеофайлове или от DVB-T телевизията примерно. Разбира се, затормозява малко или повече железарията в зависимост от резолюция, различни настройки за "чувствителност", минимална големина на обекта в пиксели, както и самия модел. Но примерно аз нямам никакъв проблем в реално време да разпознавам едновременно човешки лица в анфас и усмивка върху последното. Усилията са изключително малки - няколко десетки реда грозен питонски скрипт.

Та ми хрумна великата идея да си надращя един скрипт дето ми разпознава мутрата плюс още няколко предмета и се прави на интелигентен, използвайки и някаква TTS библиотека да говори гадно. Примерно сутринта сядам на компютъра, скрипта разпознава грозната ми мутра и се опитва да ми открие и чашата за кафе. Някаква проста сметка правя ако за над 1-2% от фреймовете в рамките на първите 1-2 секунди грозната ми мутра е открита, но чашата за кафе - не, TTS-а изпява нежно "добро утро, gat3way, няма ли да си направиш кафе". Ако чашата присъства над threshold-а съответно, изпява не толкова нежното "добро утро, gat3way, пий кафето по-бързо и се оправяй че закъсняваш за работа". Някак много идилично издържано в sci-fi светлина и по груби предварителни сметки, не особено сложно.

Проблемът е че готовите "модели" идващи с opencv са само една шепа - човешки лица, човешки тела, очи, усмивки, котешки физиономии, руски регистрационни номера на автомобили и май това. Т.е за чашата за кафе идва момента сам да си "тренирам" каскадния xml.

Сега като гледам това се оказва доста сложна и досадна и бавна задача (пуснал съм да се търкаля и го прави от няколко часа и не вярвам да свърши в близките 1-2 дни). Би било много жалко опита да е неуспешен и след това да похабя n пъти по толкова време докато се науча как се прави като хората.

Та ако някой се е занимавал, ще се радвам да узная правилната стратегия. В случая "позитивните" ми картинки с които го тренирам естествено не са стотици снимки правени на въпросната чаша, това е ужасно досадно. Вместо това снимах с камерата чашата и с ffmpeg разбих видеото на картинки. Crop-ването малко го автоматизирах с помощта на разни чужди творения. Получиха се около 400 картинки с "позитиви". В момента ползвам около 1500 "негативни" които са правени по същата методика, само че без чашата.

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

Колко входни семпли (позитиви и негативи) горе-долу са достатъчни, за да се изгради приличен модел, дето работи относително коректно (т.е примерно няма да открие че телефона ми прилича на чашата ми за кафе)?

Има ли начин генерирането да се ускори?

Колко stages като минимум са ОК при тренирането на модела? Гледам чуждите опити, движи се между 20 и 30.

Между негативите и позитивите има ли някаква релация от вида "най-добре е негатива да е същото като позитива, само че без обекта"? Или примерно позитивните картинки може да са ми обекта, негативните - каквото и да е, ако ще и гъза да си снимам?


Ако не беше толкова бавно, ресурсоемко и досадно това, щеше да е ужасно забавно. Аз виждам огромни приложения на тази технология, предимно за лоши неща (от сорта на таргетирана реклама на база какви филмчета качваш в youtube да речем - забелязва бутилка бира и те спами с Хайнекен, забелязва лаптоп и те спами с Dell и т.н.). Или пък някаква полицейска антиутопия, където в реално време илюминатите лоши узнават коя камера в града вижда колата ти. Но пък варианта с "добро утро, направи си кафе" ми е достатъчно забавен и без да е зъл и лош.
« Последна редакция: Мар 27, 2015, 00:37 от gat3way »
Активен

"Knowledge is power" - France is Bacon

4096bits

  • Участник
  • *****
  • Публикации: 3060
    • Профил
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #1 -: Мар 27, 2015, 02:05 »
Не зная изобщо как го правят това, но зная, че са доста напред. Вече каква железария използват.... И това е под въпрос.
Иначе тук се споменават едни фрапиращи за мен проценти дето, ако са верни... Браво на хората!
Активен

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

gat3way

  • Участник
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #2 -: Мар 27, 2015, 02:24 »
Фрапиращото в случая е че всичко е въпрос на статистика и колкото по-приличен модел си изградил, толкова по-прилично ще разпознава. Няма никаква магия и никакви мистериозни изкуствени интелекти в цялата тая тарапана. Обаче остава въпросът как да изградиш модела като хората и тук някак си се опира до естествения интелект. Признавам че когато се е получило добре, резултатът е доста потресаващ, аз като много зелен в цялата работа, останах без думи на моменти. И това далеч не е върха на цялата работа, има и по-добри алгоритми, целящи същото очевидно, но аз като бос и зелен, за момента се занимавам с Haar класифицирането.
Активен

"Knowledge is power" - France is Bacon

go_fire

  • Участник
  • *****
  • Публикации: 5096
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #3 -: Мар 27, 2015, 09:31 »
По социалистическо имахме едни дебели тухли да ни обясняват за невронни мрежи и не знам какво си, дето сигурно не се намираха и десет човека да ги разбират, въпреки очевидното старание за популяризация. Обаче се оказа, че американосите са  били много по-практични от нас и докато ние сме се занимавали с глупости, те яко вадели статистика. И после Питър Норвиг пита, оти ИИ изпадна в ледников период. Попадна, защото никога не го е имало. Всичко е било една хамалска статистика.

Най-интересното е, че преди няколко години баш във Википедия попаднах на критика на цялото нещо, не от кой да е, а баш от самият Чомски (Хомски, не е ясно как се казва). Това е същият Чомски, който направи революция в лингвистиката, но не се прочу с научните си открития, а критиката към американската политика. И въпреки, че от научното му бърборене, нищичко не схванах, поне разбрах, че и той говори за същото. Статистиката е само имитация  на ИИ  и в действителност убива идеята, а не ѝ помага.

Истината е, че ИИ или имитация няма да е възможен без квантови компютри. Те няма да са възможни без студен синтез, за да им се осигури тока. Обаче в Руанда, Авганистан, Еквадор едва ли ще е възможно изграждането и на двете. Така НСР на Буш-старши става невъзможен. НСР не може да обвхване цялата планета. И така си остава ССР (стар  СР) дето сигурно го е имало преди 5 хил. години, а дори 50 хил. години още на дървото. Най-силните управляват и определят правилата на играта. На другите е позволено да ядат банани.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

gat3way

  • Участник
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #4 -: Мар 27, 2015, 11:00 »
Съществува възможност откриването/разпознаването на образи да става на базата на невронни мрежи, тогава нямаме строго двете стъпки с изготвянето на модела и ползването му. Просто не съм стигнал дотам още. Наскоро гледах една демонстрация на NVidia за computer vision assisted driving, където го правеха в реално време, ползвайки невронни мрежи - онова разпознаваше пътни знаци, светофари, изскачащи пешеходци на платното и тем подобни глупости с идеята някой ден автомобила да компенсира несъвършенствата на шофьора или пък наистина самопаркиращи се автомобили и тем подобни глупости. Невронните мрежи сами по себе си имат много общо със статистиката апропо, поне това ми е останало в главата по спомени от университета. Което не е кой знае какво, защото никога не ми е било особено интересно. И в момента също не ми е интересно като става въпрос.
Активен

"Knowledge is power" - France is Bacon

4096bits

  • Участник
  • *****
  • Публикации: 3060
    • Профил
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #5 -: Мар 27, 2015, 14:04 »
Ами хората дето съм им дал линка са приложили там отляво един pdf и го разгледах. Има един куп формули, ако ти се занимава. Ако е въпрос на статистика, значи е въпрос на прехвърляне и обработване на голям обем данни. Пак опира до железарията. За момента. За решаването на такива нелеки задачи, вярвам, че всичко опира до добър алгоритъм.
Предполагам, че е същото, както със производителността на чиповете. Закона на Мур ли беше. Та въпросния закон засега се запазва. Преди години предричаха, че скоро - от тогава . ще се стигне до 10GH процесори. Е оказа се, че не във скоростта на работа е разковничето.
Малко съм се занимавал с програмиране и съм позабравил. Вероятно ще стане по-бързо, ако се отвхърлят повечето от вариантите. Едно хубаво структуриране. Тея с големите носове там, другите с по-малко разтояние между очите другаде. Вероятно това не е по-добрия начин. Не ми се задълбава  ???
Активен

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

zxz

  • Участник
  • *****
  • Публикации: 613
  • Distribution: Linux Mint 18.2
  • Window Manager: XFCE
    • Профил
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #6 -: Мар 27, 2015, 22:52 »
Обмислял ли си по-прост вариант, например филтриране по цветове - https://www.youtube.com/watch?v=bSeFrPrqZ2A Не е най-удачното, защото може да се обърка с други предмети от същият цвят, но пък за една чаша би трябвало да се получи.
Активен

gat3way

  • Участник
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #7 -: Мар 27, 2015, 23:39 »
Мисля че идеята е друга там, не да се класифицират обекти, а да се проследява движението им. Между другото, едно от демотата в това видео ми изглежда доста познато, защото става наготово с една API функция и съм го пробвал от любопитство - това дето "изважда" фона, т.е движещите се обекти са оцветени в бяло, а статичния фон - в черно. Някак на момента ми прозря каква е файдата от това нещо, като се замисля че белите пиксели са 24 бита единици, а черните са 24 бита нули.Мога да си представя как вероятно използват подобни неща за разни специални ефекти де, от тези холивудските където някакъв навлечен каскадьор прави някакви каскади, каскадьорът съответно е нещото което се движи и получаваш видео с поредица от черно-бели фреймове, белите са движещия се обект (каскадьора), черните са фона. Оттам с елементарни побитови операции можеш да "смесиш" каскадьора със съвсем различен фон, примерно както скача на фона на панелките в София, крайният резултат е да скача на фона на космически кораб. Може би пък така си правят част от холивудските специални ефекти, знам ли. Макар че надали е толкова просто, тоя каскадьор трябва да хвърля сянка тук-таме и там въпросният алгоритъм ще се провали с гръм и трясък.

Но пък холивудските ефекти също не са ми особено интересно занимание, нещо не съм особено артистична натура.
Активен

"Knowledge is power" - France is Bacon

gat3way

  • Участник
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #8 -: Мар 28, 2015, 04:40 »
Цитат
Истината е, че ИИ или имитация няма да е възможен без квантови компютри. Те няма да са възможни без студен синтез, за да им се осигури тока. Обаче в Руанда, Авганистан, Еквадор едва ли ще е възможно изграждането и на двете. Така НСР на Буш-старши става невъзможен. НСР не може да обвхване цялата планета. И така си остава ССР (стар  СР) дето сигурно го е имало преди 5 хил. години, а дори 50 хил. години още на дървото. Най-силните управляват и определят правилата на играта. На другите е позволено да ядат банани.

Какви са тези конспиративни дивотии пък сега. Поне от обща култура, има да ги чакаш тези квантови компютри и това не е защото им липсват реактори за студен синтез, евтина енергия, много енергия или нещо от сорта. Парадигмата е съвсем различна и според мен просто хората не знаят какво да правят с теоретична такава машина. Точно както не знаят какво да правят с доста по-прости и достъпни неща като например с хардуера за масивния паралелизъм. Днес примерно хардуеристите ти сглобяват поредното GPU или FPGA изчадие и какво от това, паралелното програмиране и да изглежда просто е толкова шокираща и доволно сложна парадигма, че не е случайно че приложенията са ограничени. Може да ми вярваш за това. Това са изцяло ограничения на нашето мислене, ние не можем да мислим така. Едно време е имало една голяма глава, Дийскстра, която е развивала теории върху синхронизацията и паралелното изпълнение, забележително понеже е ставало през 70-те на миналия век. За много задачи ние си вярваме че не се подават на паралелизация, просто защото не знам, не можем да си го представим това досатъчно добре, може пък и да се подават. Човешкият мозък не е устроен да работи така. Аз лично съм виждал ужасно големи усилия иначе прости неща да ги паралелизирам, когато накрая това би било логично. Ти сега искаш да разсъждаваме върху нещо което е усъвършенствана перверзия над концепцията за паралелизация, имплицитна паралелизация един вид, с тази разлика че условията са различни и резултатите са различни и цялата постановка е далеч по-перверзна. Ми няма да стане. Според мен нещата се развиват защото имаме някаква нужда от тяхната поява, има и икономическа обосновка, би трябвало да го знаеш това по-добре от мен. Физиците могат да се хвалят как имат модели за какви ли не глупости и просто им трябвали емпирични наблюдения за да ги докажат. Е тук е обратното според мен, някак моделите липсват, а иначе тук-там има емпирични наблюдения върху някакви крайно ограничени събития.
Активен

"Knowledge is power" - France is Bacon

Naka

  • Участник
  • *****
  • Публикации: 2617
    • Профил
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #9 -: Мар 28, 2015, 10:31 »
това знаете ли го. https://www.tineye.com/
Качете някоя картинка и веднага ще ви открие същите или подобни картинки в Интернет. Как ли го правят?

С нещо подобно се занимавам в момента.  Трябва да открия дублиращи се или приличащи си картинки. Използват нещо което му викат 'perceptual hashing'. Е на мен това 'perceptual hashing' ще ми свърши работа. Обаче това не е истинско разпознаване на образи. Например справя се чудесно ако картинката е смачкана/разтеглена с различна резолюция. Обаче ако ако е леко позавъртяна или shift-ната или пък картинка в картинка - няма да свърши работа.

Четох как ли се прави и стигнах до термина 'geometric hashing' . http://en.wikipedia.org/wiki/Geometric_hashing

http://stackoverflow.com/questions/22585989/partial-image-detection-with-perceptual-hashing
Цитат
One approach for doing this can be 1. Extract geometric markers (special points), for both input and output, for example by using the Harris corner detector. 2. Compare every possible pair of triangles on each image . If they have the same angles, they define a transformation (resize, rotate,shift, and mirror). Google "geometric hashing" 3 Count how many points in the target agree with the transformed source, and you have a score for the match. 4. Verify the best match by other means (histogram, edge-registration).

This approach is slow in theory (o(n^6) in the number of points) but I believe it can be practical using an appropriate choice of n and some tricks to speed it up.


http://en.wikipedia.org/wiki/Corner_detection
http://en.wikipedia.org/wiki/Harris_affine_region_detector

Как се превежда на БГ Афинно пространство... Афинни точки... ???
Няма ли някакви command line тулове, които да изплюват 'geometric hashing'-а на снимки или региони и така по-лесно да се екперементира без да се пишат програми.
« Последна редакция: Мар 28, 2015, 11:03 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

4096bits

  • Участник
  • *****
  • Публикации: 3060
    • Профил
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #10 -: Мар 28, 2015, 13:08 »
Мисля че идеята е друга там, не да се класифицират обекти, а да се проследява движението им. Между другото, едно от демотата в това видео ми изглежда доста познато, защото става наготово с една API функция и съм го пробвал от любопитство - това дето "изважда" фона, т.е движещите се обекти са оцветени в бяло, а статичния фон - в черно. Някак на момента ми прозря каква е файдата от това нещо, като се замисля че белите пиксели са 24 бита единици, а черните са 24 бита нули.Мога да си представя как вероятно използват подобни неща за разни специални ефекти де, от тези холивудските където някакъв навлечен каскадьор прави някакви каскади, каскадьорът съответно е нещото което се движи и получаваш видео с поредица от черно-бели фреймове, белите са движещия се обект (каскадьора), черните са фона. Оттам с елементарни побитови операции можеш да "смесиш" каскадьора със съвсем различен фон, примерно както скача на фона на панелките в София, крайният резултат е да скача на фона на космически кораб. Може би пък така си правят част от холивудските специални ефекти, знам ли. Макар че надали е толкова просто, тоя каскадьор трябва да хвърля сянка тук-таме и там въпросният алгоритъм ще се провали с гръм и трясък.

Но пък холивудските ефекти също не са ми особено интересно занимание, нещо не съм особено артистична натура.
Това със фона е умряла работа. Сигурно следи промяната на цветовете. Ако има движещи се сенки от външен източник, който не е в кадър, в осветлението поради някаква причина, едва ли ще сработи както се очаква.
Активен

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

gat3way

  • Участник
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #11 -: Мар 28, 2015, 14:26 »
Не мисля че е толкова просто, базирано просто на делтите в стойностите на пикселите. Ако примерно намалиш или пуснеш осветлението, би трябвало за момент всичко да побелее, което не го забелязвам. Обаче си прав за сенките. Всъщност, пуснах го срещу едно клипче от сутрешния трафик на някаква градска магистрала в Чикаго - обектите, които се движеха бяха автомобилите плюс отблясъците от фаровете в мокрия асфалт. Всъщност то има два такива алгоритъма като гледам, поне API функциите са две. Първият някак вади само контурите на движещите се обекти (това придава малко странен вид, все едно гледаш черно-бял комикс). Това не би вършило работа за "смесване" на два фона. Другото вади самите обекти като това в контурите е бяло. Обаче като гледам сенки, отблясъци и т.н са крива работа. Може би все пак каскадьорските сцени ги подбират по-добре, снимат ги от ъгли където такива ефекти се минимизират. Нямам идея.
Активен

"Knowledge is power" - France is Bacon

gat3way

  • Участник
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #12 -: Мар 28, 2015, 14:32 »
Цитат
това знаете ли го. https://www.tineye.com/
Качете някоя картинка и веднага ще ви открие същите или подобни картинки в Интернет. Как ли го правят?

Дръпни си Google Goggles на телефона, там е докарано до перверзия това. Дотолкова добре работи, че разпознава повечето хартиени снимки на разни големи градове из цивилизования свят, ако са някакви забележителности вади дори какво е и на коя улица се намира. Работи толкова добре, че дори разпозна няколко снимки на центъра на Перник. Също доста успешно разпознава моделите автомобили по снимка.
Активен

"Knowledge is power" - France is Bacon

4096bits

  • Участник
  • *****
  • Публикации: 3060
    • Профил
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #13 -: Мар 28, 2015, 18:35 »
А аз си мислех, че е достатъчно човек да махне информацията за GPS координатите от снимката преди да я пусне някъде  :D Ужас!!!  ???
Активен

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

remotexx

  • Участник
  • *****
  • Публикации: 763
    • Профил
Re: OpenCV / обучаване на Haar cascade класификатори
« Отговор #14 -: Мар 28, 2015, 22:17 »
О-о-о не само чашата за кафе разпознават ами и логото върху нея :-)
някъде наскоро гледах
също и разпознаване (може и само контури) на движещи се обекти
ако се сетя ще дам и адресите по-късно...


А, да ето къде съм го гледал (към края на статията и из коментарите)
http://blog.qt.io/blog/2015/03/20/introducing-video-filters-in-qt-multimedia/
и то на Embedded Linux devices supported by Qt Multimedia, for example the i.MX6-based Sabre SD board

Ако ще ти е по-лесно може и това да пробваш - ГНУ в.3
Live CV - Real Time Computer Vision Coding
http://livecv.dinusv.com/
https://www.youtube.com/watch?v=uEnJE6Jawfw

П.П. Та можеш да пишеш там на Laszlo Agocs и да го питаш как става т.е. те как са го обучили да разпознава (е да то с компютърен шрифт е по-лесно - като го обучат КАПЧИ да ми разпознава тогава да ми се обадят  :P )
« Последна редакция: Мар 28, 2015, 22:29 от remotexx »
Активен

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