Съдържание:

Преброяване на обекти на Raspberry Pi: 5 стъпки
Преброяване на обекти на Raspberry Pi: 5 стъпки

Видео: Преброяване на обекти на Raspberry Pi: 5 стъпки

Видео: Преброяване на обекти на Raspberry Pi: 5 стъпки
Видео: Home Assistant - first settings, File Editor, Maria DB, HACS - October 2023 2024, Юли
Anonim
Преброяване на обекти на Raspberry Pi
Преброяване на обекти на Raspberry Pi

Несъмнено компютърното зрение е фантастично нещо! Използвайки това, компютърът придобива способността да „вижда“и усеща по -добре околната среда, което позволява разработването на сложни, полезни и готини приложения. Приложения като разпознаване и разпознаване на лица, проследяване на обекти и откриване на обекти присъстват все повече в ежедневните ни дейности, благодарение на напредъка на компютърното зрение.

Като се има предвид колко усъвършенствани и достъпни са рамките и инструментите за компютърно виждане, приложението, описано в тази статия, се вписва добре: използвайки проста Raspberry PI и безплатна рамка за компютърно виждане с отворен код, наречена OpenCV, за преброяване на обекти в движение, по-точно колко обектите влизат и излизат от определена наблюдавана зона.

Стъпка 1: По -задълбочаване: Как може да се открие движението на обекта в поток от изображения?

По -дълбоко: Как може да се открие движението на обекта в поток от изображения?
По -дълбоко: Как може да се открие движението на обекта в поток от изображения?

Сега е време да се задълбочим в обработката на изображения:

как да получите някои изображения от поточна уеб камера и да откриете, че нещо се е преместило там

Състои се от пет стъпки:

Стъпка 1: За да маркирате обекта в движение

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

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

За да се сведе до минимум времето за обработка на изображението, преди да се извърши изваждане на фон, заснетата рамка и референтната рамка се преобразуват в изображение в сива скала. Но защо? Това е проблем с изчислителната ефективност: изображение, което представя множество цветове (цветно изображение), има три данни на пиксел: червен, син и зелен цветен компонент (старият, но златен стандарт RGB). Така че математически всеки пиксел може да бъде дефиниран като масив с три стойности, като всеки представлява цветен компонент. Следователно, разширявайки го до цялото изображение, крайното изображение всъщност ще бъде смесица от три компонента на изображението: Червено, Синьо и Зелено компоненти на изображението.

За да го обработите, се изисква много работа! При изображенията в сив мащаб всеки пиксел има само една информация за цвета. Така че обработката на цветно изображение е три пъти по-бавна, отколкото в случай на изображение в сив мащаб (поне три пъти, в зависимост от това каква техника се използва). И има още: за някои цели (като този проект), обработката на всички цветове не е необходима или изобщо важна. Затова стигнахме до заключението: използването на изображения в сив мащаб е силно препоръчително за обработка на изображения. След изваждане на фона е необходимо да се приложи Gaussian Blur филтър.

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

Стъпка 2: Бинаризация

Бинаризация
Бинаризация

В повечето случаи на обработка на изображението бинаризацията е почти задължителна стъпка след маркиране на обекти / характери в изображението. Причина: в двоично изображение всеки цвят на пиксела може да приема само две стойности: 0x00 (черно) или 0xFF (бяло). Това много помага при обработката на изображения, за да се изискват още по -малко "изчислителна мощ", за да се приложат техники за обработка на изображения в следващите стъпки. Бинаризацията може да се направи, като се сравнява всеки пикселен цвят на изображението в сивата скала с определен праг. Ако стойността на цвета на пиксела е по -голяма от прага, този цвят на пиксела ще приеме бяла стойност (0xFF), а ако стойността на цвета на пиксела е по -ниска от прага, този цвят на пиксела ще приеме черна стойност (0x00). За съжаление изборът на прагова стойност не е толкова лесен. Това зависи от факторите на околната среда, като например условията на осветление. Неправилният избор на прагова стойност може да съсипе всички стъпки допълнително. Така че, силно препоръчвам да коригирате ръчно праг в проекта за вашия случай преди по -нататъшни действия. Тази прагова стойност трябва да гарантира, че движещият се обект се показва в двоично изображение. В моя случай, след адекватен избор на праг, се получава това, което виждате на фигура 5.

Фигура 5 - двоично изображение

Стъпка 3: Разширете

Досега беше възможно да се открият движещи се обекти, да се маркират и да се приложи бинаризация, което води до доста ясно изображение на движещ се обект (= доста ясно изображение на обекта за целите на обработка на изображението). Подготовката за преброяване на обекти е ПОЧТИ. „ПОчти“тук означава, че трябва да направите някои фини корекции, преди да продължите. В този момент има реални шансове за наличие на „дупки“в обектите (черни маси от пиксели в белия подчертан обект). Тези дупки могат да бъдат всичко, от конкретни условия на осветление до някаква част от формата на обекта. След като дупките могат да „произвеждат“фалшиви обекти вътре в реални обекти (в зависимост от това колко големи и къде се намират), последиците от наличието на дупки в изображението могат да бъдат катастрофални за преброяването на обекти. Начин за премахване на тези дупки е използването на Техника за обработка на изображения, наречена Дилат. Използвайте това и дупките изчезват.

Стъпка 4: Търсене на контурите (и неговите центроиди)

Търсенето на контурите (и неговите центроиди)
Търсенето на контурите (и неговите центроиди)

На този етап имаме маркираните обекти, без дупки вътре в него и готови за следващото: търсене на контурите (и неговите центроиди). В OpenCV има ресурси за автоматично откриване на контури, но откритите графици трябва да бъдат разумно избрани (за да изберете истинския обект или само обекти). И така, критериите за откриване на контурите са площта на обекта, измерена в пиксели². Ако контурът има по -голяма площ от границата (конфигурирана в софтуера), той трябва да се разглежда като реален обект, който да се брои. Изборът на тази граница/критерии на площ е много важен, а лошият избор тук означава грешно броене. Трябва да опитате някои стойности за ограничаване на стойностите на площта и да проверите кое подхожда по -добре на вашето използване. Не се притеснявайте, тези граници не са трудни за намиране / коригиране. След като всички обекти в изображението са избрани, следващата стъпка е да нарисувате върху него преобразяване (това преобразяване трябва да съдържа цял открит обект вътре в него). И центърът на този правоъгълник е…. центроидът на обекта! Може би си мислите „Каква е голямата работа с този центроид?“, Нали? Ето отговора ви: няма значение колко голяма или каква е формата на обекта, неговото движение е същото като на центроида. С други думи: тази проста точка, наречена центроид, представлява цялото движение на обекта. Това прави броенето много лесно сега, нали? Вижте изображението по -долу (фигура 6), където центроидът на обекта е представен като черна точка.

Стъпка 5: Движението на Centorid и броенето на обекти

Големият финал: сравнете центроидните координати на обекта с координатите на входните и изходните линии и приложете описаната по -горе алгоритма за броене. И ще има броене на движещи се обекти!

Краен резултат Както е показано в самото начало на този пост, ето проекта в действие:

Препоръчано: