[PYTHON] Ein einfaches System, das automatisch mit Objekterkennung aufnimmt und an LINE sendet

Einführung

Schießt automatisch, wenn sich ein Objekt kreuzt! Einführung eines Systems, das Bilder an LINE sendet.

** Frisst Ihre Katze während eines zweitägigen Ausflugs von einer Nacht richtig? Ich war besorgt, ob ich Wasser trinke, also habe ich es geschafft. ** **.

Es wird ein einfaches System mit Raspeltorte sein. Es wird empfohlen, da Sie das Kamerabild während Ihrer Abwesenheit auf LINE überprüfen können, z. B. wenn Sie Haustiere haben.

Referenz

Buch "Sanft beginnender Himbeerkuchen" Es ist ein sehr leicht verständliches Buch für Anfänger von Razpai, und ich kann es nur empfehlen. Ungefähr 80% dieses Systems haben Ideen aus diesem Buch m (_ _) m entlehnt

Systembeschreibung

Klicken Sie hier für das GitHub-Repository. https://github.com/akiraseto/security_cam

Rauer Fluss

  1. Starten Sie das Python-Programm und halten Sie sich bereit
  2. Automatische Erkennung, wenn eine Katze in der Nähe des Sensors vorbeikommt
  3. Wenn Sie das Signal empfangen, rufen Sie das Bild mit einer über USB angeschlossenen Webcam ab und speichern Sie es
  4. Benachrichtigen Sie das zuletzt gespeicherte Bild über LINE notify
  5. Sie können Bilder auf LINE sehen, auch wenn Sie unterwegs sind!

Razz Pie

Raspberry Pi (im Folgenden als "Raspberry Pi" bezeichnet) wird verwendet, um den Sensor und die Kamera zu verbinden.

Verbinden Sie den menschlichen Sensor mit dem GPIO Mithilfe von Infrarotstrahlen wird erkannt, wann sich etwas bewegt, das heißer als die Umgebung ist, z. B. eine Person oder ein Tier. Ich habe die nicht gekennzeichneten Teile des Sets für den menschlichen Sensor verwendet, aber es ist kein Problem, ihn mit dem in Akizuki verkauften "SE-10" zu verwenden. Ich denke. Raspeye GPIO: Sensor OUTPUT an Nummer 23 anschließen Raspeye GPIO: LED-Anode an Nummer 18 anschließen.

USB-Verbindung mit Webcam Stecken Sie es einfach wie einen PC in den USB-Anschluss, und Sie müssen nichts Besonderes tun.

So ↓ ↓ photo.jpeg

LINEnotify Mit der von LINE bereitgestellten API können Sie verschiedene Benachrichtigungen frei an LINE senden, indem Sie sie in das Programm integrieren. Es ist sehr praktisch und scheint verschiedene Verwendungszwecke zu haben. https://notify-bot.line.me/ja/

Diese Seite ist detailliert. https://qiita.com/iitenkida7/items/576a8226ba6584864d95

Registrieren Sie sich und kooperieren Sie, um ein Zugriffstoken auszustellen. Das Zugriffstoken wird nur einmal angezeigt. Vergessen Sie also nicht, es zu kopieren.

Gesamtstruktur

security_cam/
├── README.md
├── config.py #LINE Token benachrichtigen
└── security_cam.py

#Bildspeicherverzeichnis
/media/pi/rasUSB/security_cam/img

Was die Images betrifft, möchte ich die Kapazität der Bootdiskette nicht überfordern, daher speichere ich sie separat im USB-Speicher. Übertrieben mit der Gesamtkonfiguration ist die eigentliche Programmdatei nur "security_cam.py".

Haupt code

security_cam.py


import RPi.GPIO as GPIO
from time import sleep
import datetime, requests, cv2, os, glob, config

#LINE Token benachrichtigen
TOKEN = config.TOKEN
API = 'https://notify-api.line.me/api/notify'

#GPIO-Port-Einstellungen
SENSOR_PORT = 23
LED_PORT = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(SENSOR_PORT, GPIO.IN)
GPIO.setup(LED_PORT, GPIO.OUT)

#CV2-Vorbereitung
camera = cv2.VideoCapture(0)
IMG_SIZE = (600,400)

#Führen Sie einen Befehl zum Fotografieren aus(Dateiname auf Datum und Uhrzeit)
last_post = datetime.datetime(2000, 1, 1) #Richtig initialisieren
def take_photo():
    global last_post
    #Mach ein Foto
    now = datetime.datetime.now()
    fname = "/media/pi/rasUSB/security_cam/img/" + now.strftime('%Y-%m-%d_%H-%M-%S') + ".jpg "

    #Altes Bild löschen
    file_list = glob.glob("/media/pi/rasUSB/security_cam/img/*jpg")
    dif_time = datetime.timedelta(days=3)
    for file in file_list:
        file_time = datetime.datetime.fromtimestamp(os.path.getatime(file))
        if (file_time < now  - dif_time):
            print("remove:{0}".format(file))
            os.remove(file)

    #Schießen
    _, frame = camera.read()
    img = cv2.resize(frame, IMG_SIZE)
    ret = cv2.imwrite(fname, img)
    if ret:
        print('Aufgenommenes Bild: ' + fname)
    else:
        print('Failed to write image.')

    #LINE benachrichtigen
    #10 Minuten werden jedoch nicht benachrichtigt--- (*1)
    sec = (now - last_post).seconds
    if sec < 10 * 60: return
    last_post = now
    #Benachrichtigung in LINE einfügen--- (*2)
    post_data = {'message': 'Nyans'}
    headers = {'Authorization': 'Bearer ' + TOKEN}
    files={'imageFile': open(fname,'rb')}
    res = requests.post(API, data=post_data,
        headers=headers,files=files)
    print(res.text)

try:
    sw = 0 #Kontinuierlicher Schießschutz
    #Holen Sie sich den Wert des Sensors wiederholt
    while True:
        v = GPIO.input(SENSOR_PORT)
        if v == GPIO.HIGH:
            GPIO.output(LED_PORT, GPIO.HIGH)
            take_photo()
            sw = 1
        else:
            GPIO.output(LED_PORT, GPIO.LOW)
            sw = 0
        sleep(10.0)
except KeyboardInterrupt:
        pass
GPIO.cleanup()

Dies ist ein einfaches Programm.

abschließend

Um ehrlich zu sein, benutze ich es nur gelegentlich. Nicht nur Katzen, sondern jedes Mal, wenn meine Familie überquerte, kamen LINE-Benachrichtigungen. .. (´Д `) Als empfohlene Verwendung Es ist Zeit, das Haus für eine Weile zu verlassen, z. B. einen zweitägigen Ausflug für eine Nacht oder einen Ausflug mit Ihrer Familie von morgens bis abends. Es fühlt sich gut an, eine aktive Rolle bei der Überprüfung des Zustands der Katze zu spielen.

Wie wäre es mit denen, die sich Sorgen machen, Wasser für ihre Haustiere zu essen und zu trinken, während sie unterwegs sind? Natürlich macht es Spaß, sich durch LINE entspannt zu fühlen, wie zum Beispiel "Bist du gekommen, um Wasser zu trinken?" Und "Du isst zu viel."

Recommended Posts

Ein einfaches System, das automatisch mit Objekterkennung aufnimmt und an LINE sendet
PGM, das automatisch eine Wanderroute erstellt
Nogizaka46 Ein Programm, das Blog-Bilder automatisch speichert
Vim-Plug-In, das automatisch Python-Stile formatiert
Ein einfaches System, das automatisch mit Objekterkennung aufnimmt und an LINE sendet
Ich habe ein System erstellt, das automatisch entscheidet, ob es morgen mit Python ausgeführt wird, und es zu Google Kalender hinzufügt.
[Einführung in den Systemhandel] Ich habe einen Stochastic Oscillator mit Python gezeichnet und damit gespielt ♬
Ein Skript, mit dem Sie mit der LINE Messaging-API auf einfache Weise umfangreiche Menüs erstellen können
Schritte zum Erstellen eines Jobs, der ein Docker-Image abruft und mit Github-Aktionen testet
Ein Memorandum beim automatischen Erwerb mit Selen
Schreiben Sie ein Programm, das das Programm missbraucht und 100 E-Mails sendet
Eine leichte Einführung in die Objekterkennung
Erstellen Sie ein Programm, das jeden Morgen automatisch die Körpertemperatur eingibt und sendet [Hinweis]
Erstellen wir ein einfaches Empfangssystem mit dem serverlosen Python-Framework Chalice und Twilio
Ich möchte ein Element mit numpy in eine Datei schreiben und es überprüfen.
Ich habe versucht, eine einfache Bilderkennungs-API mit Fast API und Tensorflow zu erstellen
So senden Sie eine Nachricht mit Curl an LINE
Speichern Sie das Objekt in einer Datei mit pickle
Python-Skript, das das Azure-Status-RSS crawlt und an Hipchat sendet
Ich habe ein Docker-Image erstellt, das RSS liest und automatisch regelmäßig twittert, und es veröffentlicht.
[Mac] Ich möchte einen einfachen HTTP-Server erstellen, auf dem CGI mit Python ausgeführt wird
Erstellt eine Web-App, die IT-Ereignisinformationen mit Vue und Flask abbildet
Von der Einführung von Flask unter CentOS bis zum Service unter Nginx und uWSGI
Erstellen Sie mit Streamlit schnell ein Python-Datenanalyse-Dashboard und stellen Sie es in AWS bereit
Ein Anfänger versuchte, eine Strichzeichnung mit einem Kettenmesser zu färben. Ich konnte es schaffen.
Sammeln Sie Tweets über "Corona" mit Python und erkennen Sie automatisch Wörter, die aufgrund des Einflusses von "Corona" zu einem heißen Thema geworden sind.
Ich möchte mit Python nur das Gesicht aus einem Personenbild ausschneiden und speichern ~ Gesichtserkennung und Zuschneiden mit face_recognition ~
Ein Skript, das den registrierten Server anpingt und eine bestimmte Anzahl von E-Mails mit Google Mail sendet, wenn dies fehlschlägt
Versuchen Sie, eine einfache Website mit Responder und sqlite3 zu erstellen
Ich habe versucht, mit VOICEROID2 2 automatisch zu lesen und zu speichern
So konvertieren Sie ein Klassenobjekt mit SQLAlchemy in ein Wörterbuch
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Ich habe ein Tool erstellt, mit dem das Erstellen und Installieren eines öffentlichen Schlüssels etwas einfacher ist.
So starten Sie einen einfachen WEB-Server, der CGI von PHP und Python ausführen kann
Lern-Roadmap, mit der Sie Services mit Python von Grund auf neu entwickeln und veröffentlichen können
So zeichnen Sie interaktiv eine Pipeline für maschinelles Lernen mit scikit-learn und speichern sie in HTML
Eine Geschichte, die es einfach macht, den Wohnbereich mit Elasticsearch und Python abzuschätzen
Rufen Sie die Excel-Liste rekursiv in einem bestimmten Ordner mit Python ab und schreiben Sie sie in Excel.
Ich habe einen Server mit Python-Socket und SSL erstellt und versucht, über den Browser darauf zuzugreifen
Schritte zum Einrichten von Pipenv, Erstellen einer CRUD-App mit Flask und Containerisieren mit Docker
Eine Geschichte, die es ermöglichte, automatisch eine Anison-Wiedergabeliste aus Ihren Musikdateien zu erstellen
Eine einfache Version der Regierungsstatistik (Einwanderungskontrolle), die mit Jupyter einfach zu handhaben ist
[Python] Was ist ein Tupel? Erklärt, wie man es benutzt und wie man es benutzt, ohne zu tippen.