İçindekiler:

Cat-a-way - Computer Vision Cat Sprinkler: 6 Adım (Resimlerle)
Cat-a-way - Computer Vision Cat Sprinkler: 6 Adım (Resimlerle)

Video: Cat-a-way - Computer Vision Cat Sprinkler: 6 Adım (Resimlerle)

Video: Cat-a-way - Computer Vision Cat Sprinkler: 6 Adım (Resimlerle)
Video: don't move!!!!!! #squidgame 2024, Haziran
Anonim
Cat-a-way - Computer Vision Cat Sprinkler
Cat-a-way - Computer Vision Cat Sprinkler

Sorun - Bahçenizi tuvalet olarak kullanan kediler

Çözüm - Otomatik youtube yükleme özelliğine sahip bir kedi fıskiyesi tasarlamak için çok fazla zaman harcayın

Bu adım adım bir adım değil, yapıya ve bazı kodlara genel bir bakış

#BeforeYouCallPETA - Kediler iyidir, tıpkı yağmur gibi düşük basınçlı bir sprinklerdir ve etraflarında dönmeden önce kaçabilirler. Proje bir kediyi ıslatmak değil, bahçemi Barkers Eggs'in kedi versiyonuyla kirletmeden önce onları uzaklaştırmak.

Adım 1: Gerekli Ana Öğeler

Gerekli Ana Öğeler
Gerekli Ana Öğeler

Raspberry Pi sıfır ve SD kart

Ahududu Pi kamera

Röle

555 zamanlayıcı…. (veya 555 zamanlayıcınız gelmezse bir arduino ve başka bir röle)

solenoid

yağmurlama

Elektronik için bir tür muhafaza

6 tonluk balyozla mecazi bir çiviyi vurmaya istekli olmak

Suyu zar zor görebileceğiniz, ancak yine de saklanmak için koşan kedileri görebileceğiniz çok az çözünürlüğe sahip bir kamera

Adım 2: Sistem

Image
Image

1, Pi kamera, birkaç kamera çerçevesi için hareket eden kedi boyutunda bir nesne algılar (bir sonraki adımda açıklanmıştır)

2, Pi sprinkleri başlatır

3, Kedi kapak için çalışır

4, Video, izleme keyfi için otomatik olarak youtube'a yüklendi

Adım 3: Kodlama Süresi

Bir araya getirmek
Bir araya getirmek

Çerçeve çıkarmayı kullanarak openCV'yi kullanarak, çerçevenin zamanla değişen alanlarını bulabilir, bazı şık işlevleri kullanarak bu değişikliklerin ne kadar büyük olduğunu ve zamanla devam edip etmediklerini anlayabilir ve en önemlisi kedi boyutunda olup olmadıklarını öğrenebilirsiniz.

Hızlı bir google araması yaparsanız, çerçeve çıkarma hakkında çok ayrıntılı bilgi veren birkaç öğretici var.

Kodun nasıl çalıştığına genel bakış

1, Kamera kareler almaya ve bunları sonuncusuyla karşılaştırmaya devam ediyor

2, Kedi boyutunda bir şekil tespit edilirse not edilir

3, Kedi boyutundaki değişiklik yaklaşık 4 kare üzerinde devam ederse, pi, arduino'yu başlatmak için röleyi çalıştırmak için GPIO'sunu kullanır

4, arduino, solenoidi etkinleştiren ikinci röleye 5 saniye boyunca güç sağlamak için bir sinyal gönderir.

5, Güç verildiğinde solenoid, sprinklere su girmesine izin verir

6, Sprinkler aktifken kamera algılamayı durdurur ve video kaydeder

7, Video Youtube'a yüklendi

8, İnce ayar sistemi için Dropbox'a yüklenen fotoğraflar

Not - Neden bir solenoidi 5 saniyeliğine açmak için 2 röle ve bir arduino kullandım…..

1, python komut dosyası video bitene kadar durakladığından videoyu kaydederken pi solenoidi başlatamaz ve durduramaz, bu nedenle arduino'nun (veya 555 zamanlayıcının) solenoidin komut dosyasından bağımsız olarak açılıp kapanmasına izin vermesi gerekir. video hala kaydediliyor.

2, İlk röle ve arduino bir 555 zamanlayıcı ile değiştirilebilir, ancak bu proje için postaya zamanında gelmedi, 555 çok fazla zaman tasarrufu ve adım tasarrufu sağlayacaktır.

3, Pi GPIO, maksimum 3.3v ve 51mA üzerinde çalıştığından ve solenoid tetiklemek için 5V ve 51mA'dan çok daha fazlasını istediğinden, pi solenoidi doğrudan tetikleyemez.

4, komşu bahçe gibi istenmeyen alanlarda hareket algılamayı kaldırmak için her çerçeve kırpılabilir. Bunu yapmamak, söz konusu komşunun bahçenize şaşkın bakışlar yapmasına neden olacaktır, çünkü yağmurlama sistemi kulübesine her girmek istediğinde patlayacaktır.

5, muhtemelen bariz bir şeyi kaçırdım ve bunu böyle kurmakla zamanımı boşa harcadım.

Aşağıdaki kod

cv2import numpy as np içe aktar argparse #cat içe aktarma zamanı RPi. GPIO'yu GPIO olarak içe aktar işletim sistemi dropbox'ı picamera.array'den içe aktar PiRGBArray'i picamera'dan içe aktar PiCamera'yı içe aktar #------------------ ----------------------------------Youtube'a yükle ------------------ ---------------------- def HDtoYoutube(): ctime = time.strftime("_%H-%M-%S") cdate = time.strftime ("_%d-%m-%Y") vidname = ctime + cdate #Trigger rölesi GPIO.output(11, True) time.sleep(.5) GPIO.output(11, False) print("Video Çekiliyor") deneyin: #Take Video os.system('raspivid -w 1640 -h 922 -o vid{0}.h264 -t 15000'.format(vidname)) #Youtube'a yükleyin print("YouTube'a Yükleniyor") os. system('sudo youtube-upload --title="Cat Got Wet {0}" --client-secrets=client_secret.json vid{0}.h264'.format(vidname)) #İş bittiğinde video dosyasını kaldır os.remove ('vid{0}.h264'.format(vidname)) print("Video yüklendi ve Pi'den kaldırıldı") hariç: pas #-------------------- ----------------------------Dropbox'a devam ediyor-------- -------------------- def St illsToDropbox(): print("Hala Dropbox Fonksiyonuna Yükleniyor") access_token = 'Ah ah ah, sihirli kelimeyi söylemedin…Ah ah ah, sihirli kelimeyi söylemedin' ctime = time.strftime(" %H:%M:%S") cdate = time.strftime("%d-%m-%Y") deneyin: filename = "/Motion/{0}/DetectedAt_{1}.jpg".format(cdate, ctime) print(filename) client = dropbox.client. DropboxClient(access_token) image = open("ToDropbox.jpg", 'rb') client.put_file(filename, image) image.close() os.remove("ToDropbox.jpg") hariç: pas #------------------------------------------ ------Hareket algılama -------------------------------------------- def DetectMotion(): #Define değişken min_area = 400 tolerans = 25 #pikselde değişiklik bluramount = 21 unutulma zamanı = 0,5 çekirdek = np.ones((5, 5), np.uint8) #dialate için kullanılır MotionCounter = 0 MinTargetArea = 600 # algılanacak en küçük boyut MaxTargetArea = 5000 #Şimdi algılanacak en büyük boyut = time.time() sonra = time.time() #initialise camera camera = PiCamera() camera. Resolution = (640, 480) camera.framerate = 10 raw Capture = PiRGBArray(kamera, size=(640, 480)) #warmup camera time.sleep(1) #İlk kareyi alın ve cv2.acumulate ağırlık kamerasına girmeye hazırlayın.capture(rawCapture, format="bgr") ort = rawCapture.array #İstenmeyen bölgeyi kırp PolyCrop = np.array(

#HowToTriggerRealProgrammersWithBadCode

Adım 4: Bir araya getirmek

Bir araya getirmek
Bir araya getirmek
Bir araya getirmek
Bir araya getirmek
Bir araya getirmek
Bir araya getirmek

Elektriği su geçirmez bir muhafazaya sıkıştırın, bir şeyleri duvarlara vidalayın ve çok sayıda koli bandı ve sıcak tutkal kullanın.

Adım 5: Sonuçlar

Image
Image
Sonuçlar
Sonuçlar

Çalıştığında çalışır

Adım 6: Yanlış Pozitifler

Yanlış Pozitifler
Yanlış Pozitifler

Yapmadığında kedi gölgelerini, karınızı ve kızınızı püskürtür.

Uzman ipucu - Kapının yanına hareket algılama programını duraklatan bir anahtar koyun….. sonra kullanmayı unutun ve kutuları dışarı çıkarırken ıslanmayın.

Umarım programlama, elektronik ve DIY konusunda herhangi bir uzmanı muhtemelen yaptığım tüm hatalarla karıştırmışımdır ve özellikle tüm yazım hatalarımı beğenmişsinizdir.

Önerilen: