Mundarija:

Raspberry Pi ob'ektlarini sanash: 5 qadam
Raspberry Pi ob'ektlarini sanash: 5 qadam

Video: Raspberry Pi ob'ektlarini sanash: 5 qadam

Video: Raspberry Pi ob'ektlarini sanash: 5 qadam
Video: C++/ 3-dars / if operatori 2024, Iyul
Anonim
Raspberry Pi ob'ektlarini hisoblash
Raspberry Pi ob'ektlarini hisoblash

Shubhasiz, kompyuterni ko'rish - bu ajoyib narsa! Bundan foydalanib, kompyuter atrof -muhitni yaxshiroq ko'rish va sezish qobiliyatiga ega bo'ladi, bu esa murakkab, foydali va ajoyib dasturlarni ishlab chiqishga imkon beradi. Yuzni aniqlash va tanib olish, ob'ektlarni kuzatish va ob'ektlarni aniqlash kabi ilovalar kompyuter ko'rish qobiliyatining rivojlanishi tufayli bizning kundalik faoliyatimizda tobora ko'proq uchrab turadi.

Kompyuterning ko'rish tizimlari va asboblari qanchalik ilg'or va qulay ekanligini hisobga olsak, ushbu maqolada tasvirlangan dastur juda mos keladi: oddiy Raspberry PI va OpenCV deb nomlangan bepul va ochiq manbali kompyuter ko'rish tizimidan foydalanib, ob'ektlarni harakatda, aniqrog'i qancha ob'ektlar ma'lum bir kuzatiladigan zonaga kiradi va chiqadi.

1 -qadam: Chuqurroq bo'lish: tasvir oqimida ob'ektlar harakatini qanday aniqlash mumkin?

Chuqurlashish: Ob'ektlar harakatini tasvir oqimida qanday aniqlash mumkin?
Chuqurlashish: Ob'ektlar harakatini tasvir oqimida qanday aniqlash mumkin?

Endi tasvirni qayta ishlashga chuqurroq kirish vaqti keldi:

Veb -kameradan qanday tasvirlarni olish va u erga biror narsa ko'chib o'tganini aniqlash

U besh bosqichdan iborat:

1 -qadam: harakatlanayotgan ob'ektni ajratib ko'rsatish

Klassik fizikada aniqlanganidek, biror narsa harakatlanayotganini yoki u harakatsiz turganini aniqlash uchun ma'lumotnoma zarur. Bu erda, biror narsa ko'chganligini aniqlash uchun, bu deyarli bir xil: veb -kameradan olingan har bir kadr mos yozuvlar ramkasi bilan taqqoslanadi. Agar biror narsa boshqacha bo'lsa, biror narsa ko'chiriladi. Qanday ko'rinmasin, oddiy.

Bu mos yozuvlar ramkasi eng zo'r sharoitda olinishi kerak (masalan, hech narsa qimirlamaydi). Tasvirni qayta ishlash dunyosida, olingan kadr va mos yozuvlar ramkasini taqqoslash fonni ayirish deb nomlangan texnikadan iborat. Orqa fonni ajratish, olingan ramka va mos yozuvlar ramkasidan pikseldan pikselgacha bo'lgan rangli ma'lumotni tom ma'noda olib tashlashdan iborat. Shunday qilib, bu jarayondan olingan tasvir faqat shu ikki ramka orasidagi farqni (yoki nima siljiganini / harakatini) batafsilroq aks ettiradi / ko'rsatadi va qolgan hamma narsa qora rangda bo'ladi (kulrangda nol qiymatining rangi) -o'lchovli piksel). Muhim: veb -kamera tasvirining yorug'ligi va tortishish sifati (sensorlarning sifati tufayli) ramkadan kadrgacha biroz farq qilishi mumkin. Bu shuni anglatadiki, mos yozuvlar ramkasidan va boshqa kadrlardan "teng qismlar" fonni olib tashlangandan so'ng to'liq qora bo'lmaydi. Bunday xatti -harakatlarga qaramay, ushbu loyihada tasvirni qayta ishlashning keyingi bosqichlarida jiddiy oqibatlar bo'lmaydi.

Tasvirni qayta ishlash vaqtini kamaytirish uchun, fonni ajratishdan oldin, olingan kadr va mos yozuvlar kulrang tasvirga aylanadi. Lekin nega? Bu hisoblash samaradorligi muammosi: bir nechta rangdagi tasvir (rangli tasvir) har bir piksel uchun uchta ma'lumotga ega: qizil, ko'k va yashil rangli komponentlar (eski, lekin oltin RGB standarti). Shunday qilib, matematik tarzda, har bir pikselni uchta qiymatli massiv sifatida aniqlash mumkin, ularning har biri rang komponentini ifodalaydi. Shunday qilib, uni butun tasvirga kengaytirganda, yakuniy tasvir uchta tasvir komponentining aralashmasi bo'ladi: qizil, ko'k va yashil tasvir komponentlari.

Uni qayta ishlash uchun ko'p mehnat talab etiladi! Biroq, kulrang o'lchovli tasvirlarda har bir piksel bitta rangli ma'lumotga ega. Shunday qilib, rangli tasvirni qayta ishlash kulrang o'lchamdagi rasmga qaraganda uch barobar sekinroq bo'ladi (qaysi texnikaga bog'liqligiga qarab kamida uch marta). Va yana ko'p narsalar: ba'zi maqsadlar uchun (masalan, bu loyiha kabi), barcha ranglarni qayta ishlash kerak emas yoki umuman muhim emas. Shunday qilib, biz shunday xulosaga keldik: tasvirni qayta ishlash uchun kulrang o'lchamdagi tasvirlardan foydalanish tavsiya etiladi. Orqa fonni ajratgandan so'ng, Gauss Bulaniqligi filtrini qo'llash kerak.

Gauss xiralashuvi filtri fonda olib tashlangan tasvir ustida harakatlanayotgan ob'ektning barcha konturlarini tekislaydi. Shubhasiz, bu tasvirni qayta ishlashning keyingi bosqichlarida yordamchi bo'ladi.

2 -qadam: Binarizatsiya

Binarizatsiya
Binarizatsiya

Rasmni qayta ishlashning aksariyat holatlarida, binarizatsiya - bu tasvirdagi ob'ektlar / xarakteristikalarni ajratib ko'rsatgandan so'ng deyarli majburiy qadamdir. Sababi: ikkilik tasvirda har bir piksel rangi faqat ikkita qiymatni qabul qilishi mumkin: 0x00 (qora) yoki 0xFF (oq). Bu keyingi bosqichlarda tasvirni qayta ishlash usullarini qo'llash uchun kamroq "hisoblash kuchini" talab qilish uchun tasvirni qayta ishlashga katta yordam beradi. Binarizatsiya kulrang o'lchovli tasvirning har bir piksel rangini ma'lum bir chegaraga solishtirib amalga oshirilishi mumkin. Agar piksel rangining qiymati pol qiymatidan kattaroq bo'lsa, bu piksel rangi oq (0xFF), agar piksel rangining qiymati ostonadan past bo'lsa, bu piksel rangi qora (0x00) qiymatini oladi. Afsuski, chegara qiymatini tanlash oson emas. Bu atrof -muhit omillariga, masalan, yorug'lik sharoitlariga bog'liq. Eshik qiymatini noto'g'ri tanlash keyingi qadamlarni buzishi mumkin. Shunday qilib, har qanday harakatlardan oldin, sizning ishingiz uchun loyiha chegarasini qo'lda sozlashni tavsiya qilaman. Bu chegara qiymati harakatlanuvchi ob'ekt ikkilik tasvirda ko'rsatilishini ta'minlashi kerak. Mening holatimda, chegara to'g'ri tanlanganidan so'ng, 5 -rasmda ko'rinadigan narsaga olib keladi.

5 -rasm - ikkilik tasvir

3 -qadam: kengaytiring

Hozirgacha harakatlanayotgan ob'ektlarni aniqlash, ularni ajratib ko'rsatish va binarizatsiyani qo'llash mumkin edi, buning natijasida harakatlanuvchi ob'ektning aniq tasviri paydo bo'ladi (= tasvirni qayta ishlash uchun ob'ektning juda aniq tasviri). Ob'ektlarni sanashga tayyorgarlik deyarli bajarildi. Bu erda "deyarli" davom etishdan oldin ba'zi nozik sozlashlarni bildiradi. Bu vaqtda ob'ektlarda "teshiklar" paydo bo'lishining haqiqiy ehtimoli bor (oq rangga ajratilgan ob'ektga qora piksellar massasi). Bu teshiklar har qanday bo'lishi mumkin, masalan, yorug'lik sharoitidan ob'ekt shakligacha. Teshiklar haqiqiy ob'ektlar ichida (qanchalik katta va qayerda joylashganligiga qarab) soxta narsalarni "ishlab chiqarishi" mumkin bo'lsa, tasvirdagi teshiklarning oqibatlari ob'ektlarni sanash uchun halokatli bo'lishi mumkin. Bu teshiklarni yo'q qilishning bir usuli - Dilate deb nomlangan tasvirni qayta ishlash texnikasidan foydalanish. Buni ishlating va teshiklar yo'qoladi.

4 -qadam: konturlarni qidirish (va uning markaziy markazlari)

Konturlarni qidirish (va uning markaziy markazlari)
Konturlarni qidirish (va uning markaziy markazlari)

Bu vaqtda bizda ajratilgan ob'ektlar bor, uning ichida teshiklar yo'q va keyingisiga tayyor: konturlarni (va uning markaziy markazlarini) qidirish. Avtomatik konturlarni aniqlash uchun OpenCV resurslari mavjud, lekin aniqlangan hisoblagichlar oqilona tanlanishi kerak (faqat haqiqiy ob'ekt yoki ob'ektlarni tanlash uchun). Shunday qilib, konturlarni aniqlash mezonlari ob'ektning piksel² bilan o'lchangan maydonidir. Agar kontur chegaradan yuqori bo'lsa (dasturiy ta'minotda tuzilgan), shuning uchun uni haqiqiy ob'ekt deb hisoblash kerak. Bu maydon chegarasi/mezonlarini tanlash juda muhim va bu erda noto'g'ri tanlov noto'g'ri hisoblarni bildiradi. Siz maydon qiymatlari chegaralarini sinab ko'rishingiz va ulardan qaysi biri sizga mos kelishini tekshirishingiz kerak. Xavotir olmang, bu chegarani topish / sozlash qiyin emas. Rasmdagi barcha ob'ektlar tanlanganidan so'ng, keyingi qadam - uning ustiga burilish chizish (bu katakchada uning ichida aniqlangan butun ob'ekt bo'lishi kerak). Va bu to'rtburchakning markazi …. ob'ekt markaziy! Siz, ehtimol, "bu markaziy markazda nima muhim?" Deb o'ylayotgandirsiz, to'g'rimi? Mana sizning javobingiz: ob'ektning shakli qanchalik katta va qanday bo'lishidan qat'i nazar, uning harakati sentroid bilan bir xil. Boshqacha qilib aytganda: centroid deb nomlangan bu oddiy nuqta ob'ektning barcha harakatlarini ifodalaydi. Bu endi sanashni juda oddiy qiladi, shunday emasmi? Quyidagi rasmga qarang (6 -rasm), bu erda ob'ektning markaziy qismi qora nuqta sifatida ko'rsatilgan.

5 -qadam: Centorid harakati va ob'ektlarni sanash

Katta final: ob'ektning markaziy koordinatalarini kirish va chiqish chiziqlari koordinatalari bilan solishtiring va yuqorida tasvirlangan hisoblash algoritmini qo'llang. Va harakatlanuvchi ob'ektlarni hisoblash bo'ladi!

Yakuniy natija Ushbu xabarning boshida ko'rsatilgandek, bu erda amaldagi loyiha:

Tavsiya: