Daftar Isi:

Cat-a-way - Computer Vision Cat Sprinkler: 6 Langkah (dengan Gambar)
Cat-a-way - Computer Vision Cat Sprinkler: 6 Langkah (dengan Gambar)

Video: Cat-a-way - Computer Vision Cat Sprinkler: 6 Langkah (dengan Gambar)

Video: Cat-a-way - Computer Vision Cat Sprinkler: 6 Langkah (dengan Gambar)
Video: Drop drawing đź’§ 2024, November
Anonim
Cat-a-way - Computer Vision Cat Sprinkler
Cat-a-way - Computer Vision Cat Sprinkler

Masalah - Kucing menggunakan kebun Anda sebagai toilet

Solusi - Luangkan terlalu banyak waktu untuk merancang alat penyiram kucing dengan fitur unggah youtube otomatis

Ini bukan langkah demi langkah, tetapi ikhtisar konstruksi dan beberapa kode

#BeforeYouCallPETA - Kucing-kucing itu baik-baik saja, ini adalah alat penyiram bertekanan rendah seperti hujan, yang dapat mereka lari lebih cepat bahkan sebelum berputar ke arah mereka. Proyek ini bukan untuk merendam kucing, tetapi untuk membuangnya sebelum mereka mengotori kebun saya dengan Telur Barkers versi kucing.

Langkah 1: Item Utama Diperlukan

Item Utama Diperlukan
Item Utama Diperlukan

Raspberry Pi nol & kartu SD

Kamera Raspberry Pi

Menyampaikan

555 pengatur waktu…. (atau arduino dan relai lain jika penghitung waktu 555 Anda tidak tiba)

solenoida

Alat penyiram

Beberapa jenis perumahan untuk elektronik

Kesediaan untuk memukul paku metafora dengan palu godam 6 ton

Kamera dengan resolusi yang sangat kecil sehingga Anda hampir tidak dapat melihat air, tetapi masih dapat melihat kucing-kucing berlarian untuk berlindung

Langkah 2: Sistem

Image
Image

1, kamera Pi mendeteksi objek berukuran kucing yang bergerak untuk beberapa bingkai kamera (dijelaskan pada langkah berikutnya)

2, Pi menyalakan alat penyiram

3, Kucing berlari untuk berlindung

4, Video secara otomatis diunggah ke youtube untuk kesenangan menonton

Langkah 3: Waktu Pengkodean

Menyatukannya
Menyatukannya

Menggunakan openCV menggunakan pengurangan bingkai Anda dapat menemukan area bingkai yang berubah dari waktu ke waktu, menggunakan beberapa fungsi bagus Anda dapat mengetahui seberapa besar perubahan ini dan apakah mereka bertahan dari waktu ke waktu, dan yang paling penting mengetahui apakah mereka berukuran kucing.

Ada beberapa tutorial tentang pengurangan bingkai yang sangat detail jika Anda melakukan pencarian google cepat.

Ikhtisar tentang cara kerja kode

1, Kamera terus mengambil bingkai dan membandingkannya dengan yang terakhir

2, Jika bentuk seukuran kucing terdeteksi, dicatat

3, Jika perubahan ukuran kucing berlanjut selama sekitar 4 frame, pi menggunakan GPIO-nya untuk menyalakan relai untuk memulai arduino

4, Arduino mengirimkan sinyal untuk menyalakan relai kedua selama 5 detik yang mengaktifkan solenoida

5, Solenoid saat dinyalakan memungkinkan air ke sprinkler

6, Saat sprinkler aktif, kamera berhenti mendeteksi dan merekam video

7, Video diunggah ke Youtube

8, Stills diunggah ke dropbox untuk sistem fine tuning

Catatan - Mengapa saya akhirnya menggunakan 2 relay dan arduino untuk menyalakan solenoid selama 5 detik…..

1, pi tidak dapat memulai dan menghentikan solenoida saat merekam video karena skrip python berhenti hingga video selesai, oleh karena itu perlunya arduino (atau timer 555) untuk memungkinkan solenoida membuka dan menutup secara independen ke skrip sementara video masih merekam.

2, Relay pertama dan arduino dapat diganti dengan timer 555 tapi itu tidak datang tepat waktu untuk proyek ini, 555 akan menghemat banyak waktu, uang dan langkah.

3, Pi tidak dapat memicu solenoid secara langsung karena Pi GPIO bekerja pada 3.3v dan 51mA max, dan solenoid menginginkan 5V dan lebih dari 51mA untuk dipicu.

4, Setiap bingkai dapat dipotong untuk menghilangkan deteksi gerakan di area yang tidak diinginkan, seperti taman tetangga. Kegagalan untuk melakukan ini akan mengakibatkan tetangga tersebut memberikan pandangan bingung ke kebun Anda karena sprinkler berbunyi setiap kali dia ingin masuk ke gudangnya.

5, saya mungkin melewatkan sesuatu yang jelas dan membuang waktu saya untuk mengaturnya seperti ini.

Kode di bawah ini

impor cv2import numpy sebagai np impor argparse #cat impor waktu impor RPi. GPIO sebagai GPIO impor os impor dropbox dari picamera.array impor PiRGArray dari picamera impor PiCamera #------------------ ------------------------------Unggah ke youtube----------------- ---------------------- def HDtoYoutube(): ctime = time.strftime("_%H-%M-%S") cdate = time.strftime ("_%d-%m-%Y") vidname = ctime + cdate #Pemicu relai GPIO.output(11, True) time.sleep(.5) GPIO.output(11, False) print("Mengambil Video") coba: #Ambil Video os.system('raspivid -w 1640 -h 922 -o vid{0}.h264 -t 15000'.format(vidname)) #Unggah ke youtube print("Mengunggah ke YouTube") os. system('sudo youtube-upload --title="Cat Got Wet {0}" --client-secrets=client_secret.json vid{0}.h264'.format(vidname)) #Hapus file video saat selesai os.remove ('vid{0}.h264'.format(vidname)) print("Video diunggah dan dihapus dari Pi") kecuali: pass #-------------------- ----------------------------Masih ke dropbox------------------- -------------------- def St illsToDropbox(): print("Mengunggah Masih Ke Fungsi Dropbox") access_token = 'Ah ah ah, Anda tidak mengucapkan kata ajaib…Ah ah ah, Anda tidak mengucapkan kata ajaib' ctime = time.strftime(" %H:%M:%S") cdate = time.strftime("%d-%m-%Y") coba: nama file = "/Motion/{0}/DetectedAt_{1}.jpg".format(cdate, ctime) print(nama file) client = dropbox.client. DropboxClient(access_token) image = open("ToDropbox.jpg", 'rb') client.put_file(nama file, gambar) image.close() os.remove("ToDropbox.jpg") kecuali: lulus #------------------------------------------ ------Deteksi gerakan------------------------------------------ def DetectMotion(): #Define vars min_area = 400 tolarance = 25 #perubahan pixel bluramount = 21 timetoforget = 0.5 kernel = np.ones((5, 5), np.uint8) #digunakan untuk memutar MotionCounter = 0 MinTargetArea = 600 # ukuran terkecil untuk dideteksi MaxTargetArea = 5000 #Ukuran terbesar untuk dideteksi sekarang = time.time() lalu = time.time() #inisialisasi kamera kamera = PiCamera() camera.resolusi = (640, 480) camera.framerate = 10 mentah Capture = PiRGBArray(camera, size=(640, 480)) #warmup camera time.sleep(1) #Ambil frame pertama & persiapkan untuk masuk ke cv2.acumulate weight camera.capture(rawCapture, format="bgr") rata-rata = rawCapture.array #Memotong wilayah yang tidak diinginkan PolyCrop = np.array(

#HowToTriggerRealProgrammersWithBadCode

Langkah 4: Menyatukannya

Menyatukannya
Menyatukannya
Menyatukannya
Menyatukannya
Menyatukannya
Menyatukannya

Jepitkan listrik ke dalam rumah tahan air, kencangkan benda-benda ke dinding dan gunakan banyak selotip dan lem panas

Langkah 5: Hasil

Image
Image
Hasil
Hasil

Ketika bekerja itu berhasil

Langkah 6: Positif Palsu

Positif Palsu
Positif Palsu

Ketika tidak menyemprotkan bayangan kucing, istri Anda dan putri Anda.

Pro-tip - Letakkan sakelar di dekat pintu yang menghentikan program pendeteksi gerakan….. lalu lupa menggunakannya dan basah kuyup saat membuang tempat sampah.

Semoga saya membuat ahli pemrograman, elektronik, dan DIY merasa ngeri dengan semua kesalahan yang mungkin saya buat, dan terutama harap Anda menikmati semua kesalahan ejaan saya.

Direkomendasikan: