Inhaltsverzeichnis:
- Schritt 1: Erforderliche Hauptartikel
- Schritt 2: Das System
- Schritt 3: Codierungszeit
- Schritt 4: Zusammenbauen
- Schritt 5: Ergebnisse
- Schritt 6: Falsch Positives
Video: Cat-a-way - Computer Vision Cat Sprinkler - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:19
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
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
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
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
Die Elektrik in ein wasserdichtes Gehäuse stopfen, Dinge in Wände schrauben und viel Klebeband und Heißkleber verwenden
Schritt 5: Ergebnisse
Wenn es funktioniert, funktioniert es
Schritt 6: Falsch Positives
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:
LTE CAT-M1 GSM IoT Sensors Network T - 15 Minuten.: 5 Schritte
LTE CAT-M1 GSM IoT Sensors Network… T - 15 Minuten.: Am 08. April 2018 gab R&D Software Solutions srl [itbrainpower.net] der Öffentlichkeit die Ankündigung des xyz-mIoT von itbrainpower.net Shield bekannt - das erste und kompakteste IoT-Board, das die Vielseitigkeit der ARM0-Mikrosteuerung kombiniert
Auspacken von Jetson Nano & ein Schnellstart für die Two Vision Demo – wikiHow
Auspacken von Jetson Nano & ein Quick Start-Up für Two Vision Demo: ZusammenfassungWie Sie wissen, ist Jetson Nano jetzt ein Starprodukt. Und es kann neuronale Netzwerktechnologie umfassend für eingebettete Systeme bereitstellen. Hier ist ein Unboxing-Artikel mit Details zum Produkt, dem Startvorgang und zwei visuellen Demos … Wortzahl: 800