Mündəricat:
- Təchizat
- Addım 1: FaceDetect funksiyası
- Addım 2: BackgroundRemove funksiyası
- Addım 3: VideoEdges funksiyası
- Addım 4: VideoBlur Function
- Addım 5: Təkmilləşdirmələr
Video: OpenCV Əsas Layihələri: 5 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:44
Bu layihədə canlı video axını ilə əlaqəli 4 sadə layihə vasitəsilə bəzi əsas OpenCV funksiyalarını araşdırırıq. Bunlar üz tanıma, arxa planın çıxarılması, kənarların xüsusi vizual göstərilməsi və canlı video axınına bulanıqlıq effekti tətbiq etməkdir. Bu layihələri sınamaqda əsas məqsədim, kompüter görmə sahəsində daha dərindən araşdırmağı planlaşdırdığım üçün OpenCV interfeysi ilə ayaqlarımı islatmaq idi.
Təchizat
- Python işləyən kompüter
- Açıq CV kitabxana, Numpy kitabxana, tkinter kitabxana, sys kitabxana
- Kompüterə qoşulmaq üçün kamera (kompüterdə onsuz da yoxdursa)
- Proqramın python faylı (bu təlimata daxil edilmişdir)
- haarcascade xml faylı (bu təlimata daxil edilmişdir)
Addım 1: FaceDetect funksiyası
Bu funksiya kameranızın videosunu tutduğu hər hansı bir üzündə yaşıl kvadratlarla göstərir. Kodda, çəkdiyimiz videonu "ələ keçirmə" adlı bir obyektdə saxlamaq üçün cv2. VideoCapture () funksiyasından istifadə edirik. CAPTURE_INDEX, kompüterinizin video giriş siyahısındakı kameranızın indeksinə uyğun olaraq kompüteriniz tərəfindən təyin edilmiş bir rəqəmdir. Kompüterinizə bağlı bir xarici kameranız yoxdursa, 0 və ya 1 işləməlidir.
Face_cascade obyekti, cascadeClassifier funksiyasından və OpenCV github -da tapılan "haarcascade_frontalface_default.xml" faylından istifadə edərək işə salınır. Bu obyekti "üzlər" siyahısında aşkarlanan üzləri x koordinatı, y koordinatı, eni və hündürlüyünü tutan dörd tərəfli bir giriş olaraq saxlamaq üçün istifadə edirik. Daha sonra cv2.rectangle funksiyasından istifadə edərək üzü mükəmməl şəkildə əhatə edən bir düzbucaq çəkirik
Bu videodan OpenCV, caption.read () istifadə edərək və "img" adlandırdığımız bir çərçivədə saxladığımız müddətdə bir çox şəkil çəkir. Sonra hər bir şəkil istədiyimiz kimi şərh olunur və dəyişdirilir. FaceDetect üçün, ilk parametrdə verilən hər hansı bir görüntünü ikinci parametrdə göstərilən müəyyən bir rəng rənginə çevirən cvtColor funksiyasından istifadə edərək görüntünü boz edirik. İkinci parametr üçün məqbul dəyərlərin siyahısı onlayn olaraq tapıla bilər. Daha sonra, görüntünü pəncərənin adı və görünəcək şəkil çərçivəsi üçün simli olan imshow () funksiyasından istifadə edərək "Üzün aşkarlanması" adlı bir pəncərədə göstəririk.
Nəhayət, istifadəçinin cv2.waitKey () funksiyasından istifadə edərək q düyməsini daxil etməsini gözləyirik. 0xFF maskası 64 bitlik kompüterlər üçün konvensiya olaraq istifadə olunur. İstifadəçi video axını bitirdikdən sonra, faceDetect funksiyası çəkmə obyektini azad edir və sonra OpenCV interfeysi altında açılan digər pəncərələri məhv edir. Bütün digər funksiyalar oxşar bir dizayn quruluşuna uyğundur.
Addım 2: BackgroundRemove funksiyası
Bu funksiya videomuzun arxa hissəsini silməyə və yalnız ön planda şəkil buraxmağa çalışır. Bəzi kameralarda işləməyə bilər, çünki fərqli obyektlər/ ocaqlar çərçivəyə daxil olduqda aktivləşdirilən işıqlandırma tənzimləmə funksiyasından istifadə edirlər. BackgroundRemove funksiyanız işləmirsə, narahat olmayın- bu sadəcə sizin kameranız ola bilər!
Bu funksiyanı istifadə etmək üçün kamera çərçivəsindən uzaqlaşın və arxa plan şəklini çəkmək üçün "d" düyməsini basın. Arxa planda tutmaq istədiyiniz hərəkət edən cisimlərin olmaması vacibdir. Sonra, kamera çərçivəsinə geri addım ata bilərik. Funksiya işləyərsə, istifadəçi özünü yalnız funksiyanın video axınında görməlidir. Ön plandakı hər hansı bir səs/qara ləkə kameranın işıqlandırma tənzimləməsinin nəticəsi ola bilər. Başqa bir fon çəkmək üçün yenidən başlatmaq üçün "r" düyməsini basın, sonra yenidən "d" düyməsini basın.
Bu funksiya üçün bəzi əsas götürmə yolları, istifadəçinin d düyməsini basdığı anda qaldırılan "bayraq" booleanının istifadəsidir. Bu, arxa planı tutur və onu funksiya tərəfindən yayımlanan videodan silməyimizə imkan verir. Arka plan görüntüsünü ref_img -də saxlamağı hədəfləyirik ki, onu hər hansı bir hərəkətli obyekti tutan ön plan şəklindən fərqləndirək. Cv2.subtract () funksiyasından istifadə edərək arxa plan görüntüsündən ön plan görüntüsünü çıxarırıq və əksinə, dərhal sonra iki şəkildəki kiçik fərqləri ləğv edirik. Arxa fon qaralır.
Fgmask, bu iki görüntü arasındakı fərqdən istifadə edərək hazırlanır və sonra OpenCV cv2.bitwise_and () funksiyasından istifadə edərək video axını funksiyalarına tətbiq olunur.
Addım 3: VideoEdges funksiyası
Bu funksiya canlı video axınımızı qaytarır, ancaq hər şey qaralanda aşkar edilə bilən kənarları ağ rəngə çevrilir. Bu funksiyanı digər funksiyalardan fərqləndirən şey, orijinal videomuzu RBG formatından HSV-yə çevirməkdir ki, bu da rəng, doyma və variasiya deməkdir- bir videodan işıq və rəng işləmək üçün fərqli bir üsul. Bu üsulla bir filtr tətbiq edərək (red_low -dan red_high) videodakı konturları daha asan ayıra bilərik.
Canny Edge Detection, görüntünün kənarlarını aşkar etmək üçün istifadə olunur. Gri miqyaslı bir görüntünü giriş olaraq qəbul edir və çox mərhələli bir alqoritmdən istifadə edir.
Addım 4: VideoBlur Function
Bu funksiya video axınımıza bulanıqlıq effekti əlavə etmək üçün istifadə olunur. Sadə funksiya çərçivəmizdəki GaussianBlur cv2 funksiyasını çağırır. GaussianBlur funksiyası haqqında əlavə məlumatı burada tapa bilərsiniz:
opencv-python-tutroals.readthedocs.io/az/l…
Addım 5: Təkmilləşdirmələr
Bu layihədəki ən həssas funksiya, fon tənzimləmə funksiyasıdır, çünki işıqlandırma tənzimləmə funksiyası olmayan bir kameranın istifadəsini tələb edir. OpenCV kitabxanasında bu işıqlandırma tənzimləməsini hesablaya bilən və fonu (yaşıl ekrana bənzər) hamarca silə bilən daha yaxşı funksiyalar dəsti ola bilər.
Yalnız (x, y) koordinatlarını qaytarmaqdan başqa daha çox funksiyaya malik obyektlər yarada biləcək digər üz tanıma funksiyalarından da istifadə edə bilərik. Bəlkə də üzləri xatırlama qabiliyyətinə malik bir üz tanıma proqramını həyata keçirmək o qədər də çətin olmayacaq.
Blur funksiyası istifadəçi tərəfindən intuitiv idarə olunmaqla daha çox fərdiləşdirilə bilər. Məsələn, istifadəçi bulanıqlaşdırma effektinin intensivliyini tənzimləmək və ya bulanıqlaşdırmaq üçün çərçivə daxilində müəyyən bir sahə seçmək istəyə bilər.
Tövsiyə:
Arduino -dan Elm Layihəsi üçün RADAR -ı necə etmək olar - Ən Yaxşı Arduino Layihələri: 5 addım
Arduino -dan Elm Layihəsi üçün RADAR -ı necə etmək olar | Ən Yaxşı Arduino Layihələri: Salam dostlar, bu təlimatda sizə bu layihə elm layihələri üçün ideal olan arduino nano istifadə edərək inşa edilən inanılmaz bir radar sistemini necə quracağınızı göstərəcəyəm və bunu çox az sərmayə və mükafat qazanmaq şansınız varsa asanlıqla edə bilərsiniz
Arduino Layihələri üçün Sərin Laptop Touchpad Hack!: 18 Addım (Şəkillərlə)
Arduino Layihələri üçün Sərin Laptop Touchpad Hack!: Bir müddət əvvəl, bir Arduino mikro nəzarətçisi olan bir PS/2 touchpad ilə məşğul olarkən, bildim ki, onun daxili əlaqələrindən ikisi rəqəmsal giriş kimi istifadə oluna bilər. Bu Təlimat kitabında PS/2 touchpad əlavəsini necə istifadə edəcəyimizi öyrənək
16x16 RGB LED Panel Arduino Layihələri: 5 Addım (Şəkillərlə birlikdə)
16x16 RGB LED Panel Arduino Layihələri: Hər kəsə salam, bu layihəni göndərirəm, çünki hər kəsin bu fantastik 16x16 RGB LED panellərindən biri ilə oynamaq üçün sadə bir yerə sahib olmasını istərdim. Digər layihələrdən fikirlər aldım və bu layihə üçün onları dəyişdirdim. Sizə verir
DIY Layihələri üçün USB-C PD Power Hub: 5 Addım
DIY Layihələri üçün USB-C PD Güc Hubu: Təxminən bir ay əvvəl, bunun kimi bir DC güc adapterindən istifadə edərək bir USB güc mərkəzinin necə yaradılacağını göstərmişdim. Təkliflərdən biri, güc mənbəyi olaraq USB tip C -dən istifadə etmək idi və bu yazıda, bunu necə edəcəyimizi öyrənəcəyik. Yuxarıdakı video bəzi
LED Dimmer Dövrə - 555 Timer Layihələri: 5 Addım
LED Dimmer Dövrə | 555 Timer Layihələri: Tam Layihə Təsvirini tapın & Dövrə Şeması / Şematik Avadanlıqlar / Komponent Siyahısı Kodları / Alqoritm Vərəqəsi / Pin Konfiqurasiyası və s. Daxil olmaqla Bütün Faydalı Materiallar ►► https://circuits-diy.com/how-to-make- simple-led-d… Ucuz Elektrik Üçün