Mundarija:

Cat-a-way-Computer Vision Cat Sprinkler: 6 qadam (rasmlar bilan)
Cat-a-way-Computer Vision Cat Sprinkler: 6 qadam (rasmlar bilan)

Video: Cat-a-way-Computer Vision Cat Sprinkler: 6 qadam (rasmlar bilan)

Video: Cat-a-way-Computer Vision Cat Sprinkler: 6 qadam (rasmlar bilan)
Video: Радан бич звёзд, на ослике, Карл! Праздничный стрим ► 8 Прохождение Elden Ring 2024, Noyabr
Anonim
Cat-a-way-Computer Vision Cat Sprinkler
Cat-a-way-Computer Vision Cat Sprinkler

Muammo - sizning bog'ingizdan hojatxona sifatida foydalanadigan mushuklar

Yechim - youtube -ga avtomatik yuklash xususiyatiga ega bo'lgan mushuk sug'orish mashinasini qurishga ko'p vaqt sarflang

Bu bosqichma -bosqich emas, balki qurilishning umumiy ko'rinishi va ba'zi kodlar

#BeforeYouCallPETA - Mushuklar yaxshi, yomg'ir singari past bosimli purkagich, ular hatto o'zlarini aylanib o'tishdan oldin yugurib ketishlari mumkin. Loyiha - mushukni ho'llash emas, balki ular mening bog'imni Barkers tuxumining mushuk versiyasi bilan to'ldirishidan oldin ularni ko'rsatish.

1 -qadam: Asosiy narsalar talab qilinadi

Asosiy narsalar talab qilinadi
Asosiy narsalar talab qilinadi

Raspberry Pi zero va SD karta

Raspberry Pi kamerasi

Estafeta

555 taymer …. (yoki 555 taymeringiz kelmasa, arduino va boshqa o'rni)

Solenoid

Sprinkler

Elektronika uchun qandaydir uy

6 tonna bolg'a bilan metaforik mixga urish istagi

Kam o'lchamli kamera, siz suvni deyarli ko'rmaysiz, lekin mushuklarning yugurayotganini ko'rishingiz mumkin

2 -qadam: tizim

Image
Image

1, Pi kamerasi mushuk o'lchamidagi ob'ektni bir nechta kamera ramkalari uchun harakatlanayotganini aniqlaydi (keyingi bosqichda o'chirilgan)

2, Pi purkagichni ishga tushiradi

3, mushuk qopqoq uchun yuguradi

4, rohat ko'rish uchun video avtomatik ravishda youtube -ga yuklanadi

3 -qadam: Vaqtni kodlash

Birgalikda joylashtirish
Birgalikda joylashtirish

OpenCV yordamida kadrlarni olib tashlash yordamida siz vaqt o'tishi bilan o'zgarib turadigan joylarni topishingiz mumkin, ba'zi bir funktsiyalarni ishlatib, bu o'zgarishlarning qanchalik katta ekanligini va ular vaqt o'tishi bilan saqlanib qolishini aniqlashingiz mumkin, va eng muhimi, mushukning kattaligini bilib olishingiz mumkin.

Agar siz google -da tezkor qidiruv qilsangiz, ramkalarni olib tashlash bo'yicha juda ko'p qo'llanmalar mavjud.

Kod qanday ishlashini ko'rib chiqish

1, kamera ramkalarni olishda va ularni oxirgi bilan solishtirishda davom etmoqda

2, agar mushukning kattaligi aniqlansa, u qayd qilinadi

3, agar mushuk o'lchamidagi o'zgarish 4 kvadrat atrofida davom etsa, pi GPU -ni ishlatib, arduino -ni ishga tushiradi.

4, arduino ikkinchi o'rni 5 soniya davomida elektromagnitni faollashtiradigan signal yuboradi

5, solenoid yoqilganda suv purkagichga o'tadi

6, purkagich faol bo'lganda, kamera aniqlanmaydi va videoni yozib oladi

7, video Youtube -ga yuklangan

8, nozik sozlash tizimi uchun dropbox -ga yuklangan rasmlar

Eslatma - Nega men 5 soniya davomida solenoidni yoqish uchun 2 ta o'rni va arduino ishlatdim?..

1, pi videoni yozayotganda solenoidni ishga tushira olmaydi va to'xtata olmaydi, chunki python skriptlari video tugaguncha to'xtatiladi, shuning uchun arduino (yoki 555 taymer) solenoidni skriptga mustaqil ravishda ochish va yopish imkonini beradi. video hali yozilmoqda.

2, birinchi o'rni va arduino 555 taymer bilan almashtirilishi mumkin, lekin bu loyiha vaqtida kelmagan, 555 ko'p vaqt va qadamlarni tejaydi.

3, Pi to'g'ridan -to'g'ri elektromagnitni ishga sola olmaydi, chunki Pi GPIO 3.3v va 51mA maksimal tezlikda ishlaydi va solenoid 5V va 51mA dan ko'proq tetiklanishni xohlaydi.

4, har bir ramka keraksiz joylarda, masalan, qo'shnilar bog'ida harakatni aniqlashni olib tashlash uchun kesilishi mumkin. Agar bu bajarilmasa, qo'shnilar sizning bog'ingizga chalkash ko'rinish bilan qarashadi, chunki suv purkagich har safar o'z uyiga kirishni xohlasa o'chadi.

5, ehtimol, men aniq bir narsani sog'indim va uni shunday sozlash uchun vaqtimni behuda sarfladim.

Quyidagi kod

import cv2import numpy np import argparse #cat import vaqti import GPP sifatida import qilish RPi. GPIO picamera.array dan PiRGBArray dan import qilish PiCamera #------------------ ------------------------------ Youtube-ga yuklash ----------------- ---------------------- HD HDYoutube (): ctime = time.strftime ("_%H-%M-%S") cdate = time.strftime ("_%d-%m-%Y") vidname = ctime + cdate #Trigger relay GPIO.output (11, True) time.sleep (.5) GPIO.output (11, False) print ("Video olish")) harakat qilib ko'ring: #Take Video os.system ('raspivid -w 1640 -h 922 -o vid {0}.h264 -t 15000'.format (vidname)) #YouTube -ga chop etishga yuklash ("YouTube -ga yuklash") os. tizim ('sudo youtube-upload --title = "Mushuk ho'llangan {0}" --client-sirlari = client_secret.json vid {0}.h264'.format (vidname)) #os.remove tugagach videofaylni olib tashlang ('vid {0}.h264'.format (vidname)) print ("Video Pi-dan yuklangan va o'chirilgan") bundan mustasno: pass #-------------------- ---------------------------- Dropbox-da qolmoqda ------------------- ------------------- St St. illsToDropbox (): print ("Hali ham Dropbox funktsiyasiga yuklanmoqda") access_token = 'Voy, siz sehrli so'zni aytmadingiz… Oh ah, siz sehrli so'zni aytmadingiz' ctime = time.strftime (" %H:%M:%S ") cdate = time.strftime ("%d-%m-%Y ") urinib ko'ring: filename =" /Motion/{0}/DetectedAt_{1}.jpg".format(cdate, ctime) chop etish (fayl nomi) mijoz = dropbox.client. DropboxClient (access_token) image = ochiq ("ToDropbox.jpg", 'rb') client.put_file (fayl nomi, rasm) image.close () os.remove ("ToDropbox).jpg ") bundan mustasno: pass #------------------------------------------ ------ Harakatni aniqlash ----------------------------------------- def DetectMotion (): #Define min_area = 400 tolarance = 25 #pixel in bluramount = 21 timetoforget = 0.5 yadro = np.ones ((5, 5), np.uint8) #dialate MotionCounter uchun ishlatiladi = 0 MinTargetArea = 600 # MaxTargetArea aniqlash uchun eng kichik o'lcham = 5000 #Hozir aniqlash uchun eng katta o'lcham = time.time () keyin = time.time () #kamera kamerasini boshlang = PiCamera () camera.resolution = (640, 480) camera.framerate = 10 raw Capture = PiRGBArray (kamera, o'lcham = (640, 480)) #kamera isinish vaqti. Uxlash (1) #Gram birinchi ramka va uni cv2 ga kiritish uchun tayyorlang = rawCapture.array #Kiruvchi PolyCrop = np.array (

#QandayTriggerRealProgrammersWithBadCode

4 -qadam: uni birlashtirish

Birgalikda joylashtirish
Birgalikda joylashtirish
Birgalikda joylashtirish
Birgalikda joylashtirish
Birgalikda joylashtirish
Birgalikda joylashtirish

Elektr o'tkazgichlarni suv o'tkazmaydigan korpusga mahkamlang, narsalarni devorlarga burang va ko'p yopishqoq lenta va issiq elimdan foydalaning

5 -qadam: Natijalar

Image
Image
Natijalar
Natijalar

U ishlaganda ishlaydi

6 -qadam: noto'g'ri pozitivlar

Yolg'on pozitivlar
Yolg'on pozitivlar

Bu bo'lmaganda, u mushuklarning soyasini sochadi, sizning xotiningiz va qizingiz.

Maslahat - eshik oldiga harakatni aniqlash dasturini to'xtatadigan kalitni qo'ying ….. keyin axlat qutilarini chiqarayotganda uni ishlatishni unutmang.

Umid qilamanki, men dasturlash, elektronika va o'z qo'llarim bilan qilgan barcha xatolarimdan g'azablandim va ayniqsa imlo xatolarim sizga yoqdi deb umid qilaman.

Tavsiya: