« -: Mar 27, 2015, 00:28 »
Абе някой имал ли е вземане-даване с откриване на обекти с 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 и т.н.). Или пък някаква полицейска антиутопия, където в реално време илюминатите лоши узнават коя камера в града вижда колата ти. Но пък варианта с "добро утро, направи си кафе" ми е достатъчно забавен и без да е зъл и лош.