Sisukord:

Cat-a-way-Computer Vision Cat Sprinkler: 6 sammu (piltidega)
Cat-a-way-Computer Vision Cat Sprinkler: 6 sammu (piltidega)
Anonim
Cat-a-way-Computer Vision Cat Sprinkler
Cat-a-way-Computer Vision Cat Sprinkler

Probleem - kassid kasutavad teie aeda tualettruumina

Lahendus - kulutage liiga palju aega kasside vihmuti projekteerimisele YouTube'i automaatse üleslaadimisfunktsiooniga

See pole samm -sammult, vaid ülevaade ehitusest ja mõnest koodist

#BeforeYouCallPETA - Kassidega on kõik korras, selle madalrõhulohkur on täpselt nagu vihm, et nad suudavad enne seda isegi ümber pöörata. Projekt ei ole kassi leotamine, vaid nende ärasaatmine enne, kui nad minu aeda Barkers Eggs kassi versiooniga risustavad.

Samm: nõutavad peamised üksused

Peamised esemed kohustuslikud
Peamised esemed kohustuslikud

Raspberry Pi null- ja SD -kaart

Raspberry Pi kaamera

Relee

Taimer 555 … (või arduino ja teine relee, kui teie 555 taimerit ei jõua kohale)

Solenoid

Sprinkler

Mingi elektroonika korpus

Valmisolek lüüa metafoorset naela 6 -tonnise kelguhaamriga

Nii väikese eraldusvõimega kaamera näeb vaevu vett, kuid näeb siiski kasse jooksmas

2. samm: süsteem

Image
Image

1, Pi -kaamera tuvastab kassi suuruse objekti, mis liigub mõne kaamera kaadri jaoks (näiteks järgmises etapis)

2, Pi käivitab sprinkleri

3, Kass jookseb varju

4, video laaditi automaatselt YouTube'i üles naudingu vaatamiseks

3. samm: aja kodeerimine

Selle kokku panemine
Selle kokku panemine

Kasutades openCV -d, kasutades kaadrite lahutamist, leiate kaadri alad, mis aja jooksul muutuvad, kasutades mõningaid funktsioone, saate aru saada, kui suured need muudatused on ja kas need püsivad aja jooksul, ning mis kõige tähtsam, kas need on kassi suuruses.

Kaadrite lahutamise kohta on üsna palju õpetusi, mis lähevad Google'i otsingu tegemisel väga üksikasjalikult.

Ülevaade koodi toimimisest

1, Kaamera jätkab kaadrite võtmist ja võrdleb neid viimasega

2, kui tuvastatakse kassi suurune kuju, märgitakse see üles

3, Kui kassi suuruse muutus püsib umbes 4 kaadrit, kasutab pi arduino käivitamiseks relee toiteks oma GPIO -d

4, arduino saadab signaali teise relee toiteks 5 sekundiks, mis aktiveerib solenoidi

5, elektrivoolu solenoid võimaldab sprinklerile vett

6, Kui sprinkler on aktiivne, lõpetab kaamera tuvastamise ja salvestab video

7, video laaditakse Youtube'i üles

8, Pildid on üles laaditud dropboxi peenhäälestussüsteemi jaoks

Märkus - miks ma lõpuks kasutasin solenoidi 5 sekundiks sisselülitamiseks 2 releed ja arduinot …

1, Pi ei saa video salvestamise ajal solenoidi käivitada ega peatada, kuna python skripib pause, kuni video on lõpetatud, seega on vaja arduino (või taimer 555), mis võimaldab solenoidil avada ja sulgeda sõltumata skriptist. video salvestatakse endiselt.

2, esimese relee ja arduino saab asendada 555 taimeriga, kuid see ei tulnud selle projekti jaoks õigeaegselt, 555 säästaks palju aega ja samme.

3, pi ei saa solenoidi otse käivitada, kuna Pi GPIO töötab 3.3v ja 51mA max ning solenoid soovib käivitada 5V ja palju rohkem kui 51mA.

4, iga kaadrit saab kärpida, et eemaldada liikumistuvastus soovimatutel aladel, näiteks naabrite aias. Kui te seda ei tee, toob naaber teie aeda segased pilgud, sest vihmuti lülitub välja iga kord, kui ta tahab oma kuuri minna.

5, ma jäin ilmselt millestki ilmsest ilma ja raiskasin oma aega selle seadistamiseks.

Kood allpool

import cv2import numpy kui np import argparse #kassi importimise aeg import RPi. GPIO kui GPIO importi os import importkastist picamera.array import PiRGBArray picamerast import PiCamera #------------------ ------------------------------ Laadige YouTube'i üles ----------------- ---------------------- def HDtoYoutube (): ctime = time.strftime ("_%H-%M-%S") cdate = time.strftime ("_%d-%m-%Y") vidname = ctime + cdate #Trigger relee GPIO.output (11, True) time.sleep (.5) GPIO.output (11, False) print ("Video tegemine") proovige: #Take Video os.system ('raspivid -w 1640 -h 922 -o vid {0}.h264 -t 15000'.format (vidname)) #Üleslaadimine youtube printimisse ("YouTube'i üleslaadimine") os. süsteem ('sudo youtube-upload --title = "Cat Got Wet {0}" --client-secrets = client_secret.json vid {0}.h264'.format (vidname)) #Eemalda videofail, kui see on tehtud os.remove ('vid {0}.h264'.format (vidname)) print ("Video laaditi üles ja eemaldati Pi-st"), välja arvatud: pass #-------------------- ---------------------------- pildid dropboxi ------------------- -------------------- def illsToDropbox (): print ("Fotode üleslaadimine Dropboxi funktsiooni") access_token = 'Ah ah ah, sa ei öelnud võlusõna … Ah ah ah, sa ei öelnud maagilist sõna' ctime = time.strftime (" %H:%M:%S ") cdate = time.strftime ("%d-%m-%Y ") try: filename =" /Motion/{0}/DetectedAt_{1}.jpg".format(cdate, ctime) print (failinimi) klient = dropbox.client. DropboxClient (access_token) image = open ("ToDropbox.jpg", 'rb') client.put_file (failinimi, pilt) image.close () os.remove ("ToDropbox-j.webp

#HowToTriggerRealProgrammersWithBadCode

4. samm: pange see kokku

Selle kokku panemine
Selle kokku panemine
Selle kokku panemine
Selle kokku panemine
Selle kokku panemine
Selle kokku panemine

Paigaldage elekter veekindlasse korpusesse, keerake asjad seintesse ja kasutage palju kleeplinti ja kuuma liimi

5. samm: tulemused

Image
Image
Tulemused
Tulemused

Kui see töötab, see töötab

6. samm: valepositiivsed tulemused

Valepositiivsed
Valepositiivsed

Kui see ei õnnestu, pihustab see kassi varje, teie naine ja teie tütar.

Vihje - pange ukse juurde lüliti, mis peatab liikumistuvastuse programmi ….. siis unustage seda kasutada ja kastete välja pannes leotada.

Loodan, et panin programmeerimise, elektroonika ja isetegemise eksperdid kõikide vigade tõttu, mida ma ilmselt tegin, ja eriti loodan, et teile meeldisid kõik minu õigekirjavead.

Soovitan: