Sisällysluettelo:

Cat-a-way-Computer Vision Cat Sprinkler: 6 vaihetta (kuvilla)
Cat-a-way-Computer Vision Cat Sprinkler: 6 vaihetta (kuvilla)

Video: Cat-a-way-Computer Vision Cat Sprinkler: 6 vaihetta (kuvilla)

Video: Cat-a-way-Computer Vision Cat Sprinkler: 6 vaihetta (kuvilla)
Video: Hubble - 15 years of discovery 2024, Kesäkuu
Anonim
Kissa-tapa-Computer Vision Cat Sprinkler
Kissa-tapa-Computer Vision Cat Sprinkler

Ongelma - Kissat käyttävät puutarhaasi wc: nä

Ratkaisu - Vietä liikaa aikaa kissan sprinklerin suunnitteluun, jossa on automaattinen YouTube -latausominaisuus

Tämä ei ole askel askeleelta, vaan yleiskatsaus rakentamiseen ja tietty koodi

#BeforeYouCallPETA - Kissat ovat kunnossa, sen matalapaineinen sprinkleri aivan kuten sade, että he voivat juosta ennen kuin se edes kääntyy heidän ympärilleen. Projektin tarkoituksena ei ole liottaa kissaa, vaan näyttää heidät pois ennen kuin he pilaavat puutarhan Barkers Eggs -kissa -versiolla.

Vaihe 1: Pakolliset pääkohteet

Tärkeimmät kohteet pakollisia
Tärkeimmät kohteet pakollisia

Raspberry Pi nolla- ja SD -kortti

Raspberry Pi kamera

Rele

555 ajastin … (tai arduino ja toinen rele, jos 555 ajastintasi eivät tule perille)

Solenoidi

Sprinkleri

Jonkinlainen kotelo elektroniikalle

Valmius lyödä vertauskuvallinen naula 6 tonnin kelkkavasaralla

Kamera, jolla on niin pieni resoluutio, et tuskin näe vettä, mutta näet silti kissat, jotka juoksevat peittoon

Vaihe 2: Järjestelmä

Image
Image

1, Pi -kamera havaitsee kissan kokoisen kohteen liikkuvan muutaman kameran kehyksen aikana (esimerkki seuraavassa vaiheessa)

2, Pi käynnistää sprinklerin

3, kissa juoksee suojaan

4, Video ladataan automaattisesti YouTubeen katseluelämän vuoksi

Vaihe 3: Koodausaika

Yhdistäminen
Yhdistäminen

Käyttämällä openCV: tä kehyksen vähennyksen avulla voit löytää kehyksen alueet, jotka muuttuvat ajan myötä. Käyttämällä hienoja toimintoja voit selvittää, kuinka suuria nämä muutokset ovat ja pysyvätkö ne ajan mittaan, ja mikä tärkeintä, selvittää, ovatko ne kissan kokoisia.

Kehyksen vähentämisestä on olemassa muutamia opetusohjelmia, jotka menevät hyvin yksityiskohtaisesti, jos teet nopean google -haun.

Katsaus koodin toimintaan

1, Kamera ottaa kehyksiä ja vertaa niitä viimeisiin

2, Jos havaitaan kissan kokoinen muoto, se merkitään

3, Jos kissan koon muutos jatkuu noin 4 kehyksen aikana, pi käyttää GPIO: taan releen käynnistämiseen arduino

4, Arduino lähettää signaalin toisen releen virtalähteeksi 5 sekunniksi, mikä aktivoi solenoidin

5, Solenoidi, kun se saa virtaa, sallii veden sprinkleriin

6, Kun sprinkleri on aktiivinen, kamera lopettaa havaitsemisen ja tallentaa videota

7, Video ladataan Youtubeen

8, Kuvat ladattu dropboxiin hienosäätöjärjestelmää varten

Huomautus - Miksi päädyin käyttämään 2 relettä ja arduinoa solenoidin kytkemiseksi päälle 5 sekunniksi….

1, Pi ei voi käynnistää ja pysäyttää solenoidia videon tallennuksen aikana, kun python -skripti pysähtyy, kunnes video on valmis, joten arduino (tai 555 -ajastin) tarvitsee, jotta solenoidi avautuu ja sulkeutuu käsikirjoituksesta riippumatta. videota tallennetaan edelleen.

2, Ensimmäinen rele ja arduino voidaan korvata 555 -ajastimella, mutta se ei saapunut ajoissa tähän projektiin, 555 säästäisi paljon aikaa ja rahaa.

3, Pi ei voi laukaista solenoidia suoraan, koska Pi GPIO toimii 3,3 V: n ja 51 mA: n maksimiteholla, ja solenoidi haluaa laukaista 5 V ja paljon enemmän kuin 51 mA.

4, Jokainen kehys voidaan rajata poistamaan liiketunnistus ei -toivotuilta alueilta, kuten naapuripuutarhasta. Jos tätä ei tehdä, mainittu naapuri antaa hämmentyneitä katseita puutarhaan, koska sprinkleri sammuu aina, kun hän haluaa mennä ahtaaseen.

5, olen luultavasti unohtanut jotain ilmeistä ja tuhlannut aikaani sen asettamiseen näin.

Koodi alla

tuonti cv2import numpy np tuonti argparse #kissa tuonti aika tuonti RPi. GPIO GPIOna tuonti os tuonti pudotuslaatikko picamera.array tuonti PiRGBArray picamerasta tuonti PiCamera #------------------ ------------------------------ Lataa youtubeen ----------------- ---------------------- def HDtoYoutube (): ctime = time.strftime ("_%H-%M-%S") cdate = time.strftime ("_%d-%m-%Y") vidname = ctime + cdate #Trigger rele GPIO.output (11, True) time.sleep (.5) GPIO.output (11, False) print ("Taking Video") kokeile: #Take Video os.system ('raspivid -w 1640 -h 922 -o vid {0}.h264 -t 15000'.format (vidname)) #Lataa youtube -tulosteeseen ("Uploading to YouTube") os. system ('sudo youtube-upload --title = "Cat Got Wet {0}" --client-secrets = client_secret.json vid {0}.h264'.format (vidname)) #Poista videotiedosto, kun se on valmis. os.remove ('vid {0}.h264'.format (vidname)) print ("Video ladattu ja poistettu Pi: stä") paitsi: pass #-------------------- ---------------------------- Kuvat dropboxiin ------------------- -------------------- def St illsToDropbox (): print ("Ladataan edelleen Dropbox -toimintoon") access_token = 'Ah ah ah, et sanonut taikasanaa … Ah ah ah, et sanonut taikasanaa' ctime = time.strftime (" %H:%M:%S ") cdate = time.strftime ("%d-%m-%Y ") try: filename =" /Motion/{0}/DetectedAt_{1}.jpg".format(cdate, ctime) print (tiedostonimi) client = dropbox.client. DropboxClient (access_token) image = open ("ToDropbox.jpg", 'rb') client.put_file (tiedostonimi, kuva) image.close () os.remove ("ToDropbox-j.webp

#HowToTriggerRealProgrammersWithBadCode

Vaihe 4: Yhdistäminen

Yhdistäminen
Yhdistäminen
Yhdistäminen
Yhdistäminen
Yhdistäminen
Yhdistäminen

Pakkaa sähköt vedenpitävään koteloon, ruuvaa asiat seiniin ja käytä paljon teippiä ja kuumaa liimaa

Vaihe 5: Tulokset

Image
Image
Tulokset
Tulokset

Kun se toimii, se toimii

Vaihe 6: Väärät positiiviset

Väärät positiiviset
Väärät positiiviset

Kun se ei onnistu, se suihkuttaa kissan varjoja, vaimosi ja tyttäresi.

Vihje - Laita oven viereen kytkin, joka pysäyttää liiketunnistusohjelman….. sitten unohda käyttää sitä ja liota, kun laitat säiliöt ulos.

Toivon, että sain ohjelmoinnin, elektroniikan ja DIY -asiantuntijoiden ahdistusta kaikista luultavasti tekemistäni virheistä, ja etenkin toivon, että pidit kaikista kirjoitusvirheistäni.

Suositeltava: