Inhaltsverzeichnis:

Cat-a-way - Computer Vision Cat Sprinkler - Gunook
Cat-a-way - Computer Vision Cat Sprinkler - Gunook

Video: Cat-a-way - Computer Vision Cat Sprinkler - Gunook

Video: Cat-a-way - Computer Vision Cat Sprinkler - Gunook
Video: Next Level Cat Repellent - Funny Cat Reactions! 2024, Juni
Anonim
Cat-a-way - Computer Vision Cat Sprinkler
Cat-a-way - Computer Vision Cat Sprinkler

Problem - Katzen benutzen Ihren Garten als Toilette

Lösung - Verbringen Sie zu viel Zeit damit, einen Katzensprinkler mit automatischer YouTube-Upload-Funktion zu entwickeln

Dies ist kein Schritt für Schritt, sondern eine Übersicht über den Aufbau und einige Codes

#BeforeYouCallPETA - Den Katzen geht es gut, es ist ein Niederdrucksprinkler, genau wie Regen, dem sie entkommen können, bevor er sich überhaupt um sie dreht. Das Projekt besteht nicht darin, eine Katze einzuweichen, sondern sie wegzuzeigen, bevor sie meinen Garten mit der Katzenversion von Barkers Eggs übersät.

Schritt 1: Erforderliche Hauptartikel

Erforderliche Hauptartikel
Erforderliche Hauptartikel

Raspberry Pi Zero & SD-Karte

Raspberry Pi-Kamera

Relais

555-Timer…. (oder ein Arduino und ein anderes Relais, wenn Ihre 555-Timer nicht ankommen)

Magnet

Sprinkler

Eine Art Gehäuse für die Elektronik

Die Bereitschaft, mit einem 6-Tonnen-Vorschlaghammer einen metaphorischen Nagel zu treffen

Eine Kamera mit so geringer Auflösung, dass man kaum das Wasser sehen kann, aber trotzdem die Katzen sehen kann, die in Deckung rennen

Schritt 2: Das System

Image
Image

1, Pi-Kamera erkennt ein katzengroßes Objekt, das sich für einige Kamerabilder bewegt (erläutert im nächsten Schritt)

2, Pi setzt Sprinkler aus

3, Katze rennt in Deckung

4, Video automatisch auf YouTube hochgeladen, um Vergnügen zu sehen

Schritt 3: Codierungszeit

Etwas zusammensetzen
Etwas zusammensetzen

Wenn Sie openCV mit Frame-Subtraktion verwenden, können Sie Bereiche des Frames finden, die sich im Laufe der Zeit ändern, mit einigen raffinierten Funktionen können Sie herausfinden, wie groß diese Änderungen sind und ob sie im Laufe der Zeit bestehen bleiben, und vor allem herausfinden, ob sie Katzengröße haben.

Es gibt einige Tutorials zur Frame-Subtraktion, die sehr detailliert sind, wenn Sie eine schnelle Google-Suche durchführen.

Überblick über die Funktionsweise des Codes

1, Die Kamera nimmt weiterhin Bilder auf und vergleicht sie mit den letzten

2, Wenn eine katzengroße Form erkannt wird, wird dies vermerkt

3, Wenn die Änderung der Katzengröße über etwa 4 Frames andauert, verwendet der Pi seinen GPIO, um das Relais mit Strom zu versorgen, um Arduino zu starten

4, Das Arduino sendet ein Signal, um das zweite Relais für 5 Sekunden mit Strom zu versorgen, das das Solenoid aktiviert

5, das Solenoid, wenn es mit Strom versorgt wird, lässt Wasser zum Sprinkler

6, Während der Sprinkler aktiv ist, stoppt die Kamera die Erkennung und zeichnet Videos auf

7, Video wird auf Youtube hochgeladen

8, Standbilder zur Feinabstimmung in Dropbox hochgeladen

Hinweis - Warum ich am Ende 2 Relais und ein Arduino verwendet habe, um ein Solenoid für 5 Sekunden einzuschalten …..

1, Der Pi kann das Solenoid während der Aufnahme des Videos nicht starten und stoppen, da die Python-Skripte anhalten, bis das Video fertig ist. Daher muss das Arduino (oder 555-Timer) das Solenoid unabhängig vom Skript öffnen und schließen, während das Video wird noch aufgezeichnet.

2, Das erste Relais und Arduino können durch einen 555-Timer ersetzt werden, aber das kam nicht rechtzeitig für dieses Projekt, 555 würde viel Zeit, Geld und Schritte sparen.

3, Der Pi kann das Solenoid nicht direkt auslösen, da der Pi GPIO mit 3,3 V und 51 mA max arbeitet und das Solenoid 5 V und viel mehr als 51 mA zum Auslösen benötigt.

4, Jeder Frame kann beschnitten werden, um die Bewegungserkennung in unerwünschten Bereichen wie einem Nachbargarten zu entfernen. Wenn Sie dies nicht tun, wird Ihr Nachbar verwirrte Blicke in Ihren Garten werfen, da der Sprinkler jedes Mal ausgeht, wenn er in seinen Schuppen gehen möchte.

5, habe ich wahrscheinlich etwas Offensichtliches übersehen und meine Zeit damit verschwendet, es so einzurichten.

Code unten

import cv2import numpy as np import argparse #cat import time import RPi. GPIO als GPIO import os dropbox von picamera.array importieren PiRGBArray von picamera importieren PiCamera importieren #----------------- ------------------------------------------Auf YouTube hochladen ------------------ ---------------------- def HDtoYoutube(): ctime = time.strftime("_%H-%M-%S") cdate = time.strftime ("_%d-%m-%Y") vidname = ctime + cdate #Trigger-Relais GPIO.output(11, True) time.sleep(.5) GPIO.output(11, False) print("Video aufnehmen") try: #Take Video os.system('raspivid -w 1640 -h 922 -o vid{0}.h264 -t 15000'.format(vidname)) #Upload to youtube print("Uploading to YouTube") os. system('sudo youtube-upload --title="Cat Got Wet {0}" --client-secrets=client_secret.json vid{0}.h264'.format(vidname)) #Videodatei entfernen, wenn fertig os.remove ('vid{0}.h264'.format(vidname)) print("Video hochgeladen und von Pi entfernt") außer: pass #-------------------- -------------------------- Standbilder in Dropbox ---------------------- -------------------- def St illsToDropbox(): print("Uploading Still To Dropbox Function") access_token = 'Ah ah ah, du hast das Zauberwort nicht gesagt…Ah ah ah, du hast das Zauberwort nicht gesagt' ctime = time.strftime(" %H:%M:%S") cdate = time.strftime("%d-%m-%Y") try: 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") außer: Pass #------------------------------------------ ------Bewegung erkennen ------------------------------------------ def DetectMotion(): #Define vars min_area = 400 tolarance = 25 #change in pixel bluramount = 21 timetoforget = 0.5 kernel = np.ones((5, 5), np.uint8) #used for dialate MotionCounter = 0 MinTargetArea = 600 # kleinste zu erkennende Größe MaxTargetArea = 5000 #größte zu erkennende Größe = time.time() then = time.time() #initialise camera camera = PiCamera() camera.resolution = (640, 480) camera.framerate = 10 raw Capture = PiRGBArray(camera, size=(640, 480)) #warmup camera time.sleep(1) #Erstes Bild aufnehmen und für cv2 vorbereiten.acumulate weight camera.capture(rawCapture, format="bgr") avg = rawCapture.array #Unerwünschten Bereich ausschneiden PolyCrop = np.array(

#HowToTriggerRealProgrammersWithBadCode

Schritt 4: Zusammenbauen

Etwas zusammensetzen
Etwas zusammensetzen
Etwas zusammensetzen
Etwas zusammensetzen
Etwas zusammensetzen
Etwas zusammensetzen

Die Elektrik in ein wasserdichtes Gehäuse stopfen, Dinge in Wände schrauben und viel Klebeband und Heißkleber verwenden

Schritt 5: Ergebnisse

Image
Image
Ergebnisse
Ergebnisse

Wenn es funktioniert, funktioniert es

Schritt 6: Falsch Positives

Fehlalarm
Fehlalarm

Wenn nicht, sprüht es Katzenschatten, Ihre Frau und Ihre Tochter.

Profi-Tipp - Setzen Sie einen Schalter neben die Tür, der das Bewegungserkennungsprogramm anhält….. dann vergessen Sie es zu benutzen und werden Sie beim Herausstellen der Mülleimer durchnässt.

Ich hoffe, ich habe alle Experten in Programmierung, Elektronik und DIY mit all den Fehlern, die ich wahrscheinlich gemacht habe, erschreckt, und hoffe vor allem, dass Sie alle meine Rechtschreibfehler genossen haben.

Empfohlen: