[PYTHON] Un système simple qui prend automatiquement des photos avec détection d'objet et l'envoie à LINE

introduction

Prend automatiquement des prises lorsqu'un objet traverse! Présentation d'un système qui envoie des images à LINE.

** Votre chat mange-t-il correctement lors d'une excursion d'une nuit et de deux jours? J'étais inquiet si je buvais de l'eau, alors je l'ai fait. ** **

Ce sera un système simple utilisant la tarte à la râpe, Il est recommandé car vous pouvez vérifier l'image de la caméra sur LINE lorsque vous êtes absent, comme ceux qui ont des animaux domestiques.

référence

Livre «Démarrez doucement la tarte aux framboises» C'est un livre très facile à comprendre pour les débutants de Razpai, et je le recommande vivement. Environ 80% de ce système ont emprunté des idées à ce livre m (_ _) m

Description du système

Cliquez ici pour le référentiel GitHub. https://github.com/akiraseto/security_cam

Écoulement brutal

  1. Démarrez le programme Python et attendez
  2. Détection automatique lorsqu'un chat passe près du capteur
  3. Lorsque vous recevez le signal, obtenez et enregistrez l'image avec la webcam connectée via USB
  4. Notifier la dernière image enregistrée via la notification LINE
  5. Vous pouvez voir des images sur LINE même lorsque vous êtes absent!

Tarte Razz

Raspberry Pi (ci-après dénommé «Raspberry Pi») est utilisé pour connecter le capteur et la caméra.

Connectez le capteur humain avec GPIO Il utilise des rayons infrarouges pour détecter quand quelque chose de plus chaud que l'environnement, comme une personne ou un animal, bouge. J'ai utilisé les parties non marquées de l'ensemble pour le capteur humain, mais il n'y a aucun problème à l'utiliser avec le "SE-10" vendu en Akizuki. Je pense. Raspeye GPIO: connectez la sortie du capteur au numéro 23 Raspeye GPIO: connectez l'anode LED au numéro 18.

Connexion USB avec webcam Tout comme un PC, insérez-le simplement dans la borne USB et vous n'avez rien de spécial à faire.

Comme ça ↓ ↓ photo.jpeg

LINEnotify Avec l'API fournie par LINE, vous pouvez envoyer librement diverses notifications à LINE en l'incorporant dans le programme. C'est assez pratique et semble avoir diverses utilisations. https://notify-bot.line.me/ja/

Cette page est détaillée. https://qiita.com/iitenkida7/items/576a8226ba6584864d95

Inscrivez-vous et coopérez pour émettre un jeton d'accès. Le jeton d'accès n'est affiché qu'une seule fois, veillez donc à ne pas oublier de le copier.

structure globale

security_cam/
├── README.md
├── config.py #Jeton de notification LINE
└── security_cam.py

#Répertoire de stockage d'images
/media/pi/rasUSB/security_cam/img

Je ne veux pas surcharger la capacité du disque de démarrage pour les images, je les sauvegarde donc séparément dans une clé USB. De manière exagérée avec la configuration globale, le fichier de programme réel est seulement security_cam.py.

Code principal

security_cam.py


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

#Jeton de notification LINE
TOKEN = config.TOKEN
API = 'https://notify-api.line.me/api/notify'

#Paramètres du port GPIO
SENSOR_PORT = 23
LED_PORT = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(SENSOR_PORT, GPIO.IN)
GPIO.setup(LED_PORT, GPIO.OUT)

#Préparation CV2
camera = cv2.VideoCapture(0)
IMG_SIZE = (600,400)

#Exécuter une commande de prise de vue(Nom du fichier à la date et à l'heure)
last_post = datetime.datetime(2000, 1, 1) #Initialisez correctement
def take_photo():
    global last_post
    #Prendre une photo
    now = datetime.datetime.now()
    fname = "/media/pi/rasUSB/security_cam/img/" + now.strftime('%Y-%m-%d_%H-%M-%S') + ".jpg "

    #Supprimer l'ancienne image
    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)

    #Tournage
    _, frame = camera.read()
    img = cv2.resize(frame, IMG_SIZE)
    ret = cv2.imwrite(fname, img)
    if ret:
        print('Image capturée: ' + fname)
    else:
        print('Failed to write image.')

    #Notifier LINE
    #Cependant, 10 minutes ne seront pas notifiées--- (*1)
    sec = (now - last_post).seconds
    if sec < 10 * 60: return
    last_post = now
    #Insérer une notification dans LINE--- (*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 #Prévention de la prise de vue en continu
    #Obtenez la valeur du capteur à plusieurs reprises
    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()

Ceci est un programme simple.

en conclusion

Pour être honnête, je ne l'utilise qu'occasionnellement. Non seulement les chats, mais à chaque fois que ma famille se croisait, les notifications LINE se faisaient exploser. .. (´Д `) Comme utilisation recommandée Il est temps de quitter la maison pendant un certain temps, comme une excursion d'une nuit ou de deux jours ou de sortir avec votre famille du matin au soir. Cela fait du bien de jouer un rôle actif dans la vérification de l'état du chat.

Qu'en est-il de ceux qui s'inquiètent de manger et de boire de l'eau pour leurs animaux de compagnie pendant leur absence? Bien sûr, c'est amusant de se sentir détendu grâce à LINE, comme "Êtes-vous venu boire de l'eau?" Et "Vous mangez trop de nourriture".

Recommended Posts

Un système simple qui prend automatiquement des photos avec détection d'objet et l'envoie à LINE
PGM qui crée automatiquement un itinéraire à pied
Nogizaka46 Un programme qui enregistre automatiquement les images de blog
Plug-in Vim qui formate automatiquement les styles Python
Un système simple qui prend automatiquement des photos avec détection d'objet et l'envoie à LINE
J'ai créé un système qui décide automatiquement de s'exécuter demain avec Python et l'ajoute à Google Agenda.
[Introduction au trading système] J'ai dessiné un oscillateur stochastique avec python et joué avec ♬
Un script qui facilite la création de menus riches avec l'API de messagerie LINE
Procédure pour créer un Job qui extrait une image Docker et la teste avec des actions Github
Un mémorandum lors de l'acquisition automatique avec du sélénium
Ecrire un programme qui abuse du programme et envoie 100 e-mails
Une introduction légère à la détection d'objets
Créez un programme qui saisit et envoie automatiquement la température corporelle tous les matins [Note]
Créons un système de réception simple avec le framework sans serveur Python Chalice et Twilio
Je veux écrire un élément dans un fichier avec numpy et le vérifier.
J'ai essayé de créer une API de reconnaissance d'image simple avec Fast API et Tensorflow
Comment envoyer un message à LINE avec curl
Enregistrer l'objet dans un fichier avec pickle
Script Python qui explore le flux RSS du statut Azure et le publie sur Hipchat
J'ai créé et publié une image Docker qui lit RSS et tweete automatiquement régulièrement.
[Mac] Je souhaite créer un serveur HTTP simple qui exécute CGI avec Python
Création d'une application Web qui mappe les informations sur les événements informatiques avec Vue et Flask
De l'introduction de Flask sur CentOS au service sur Nginx et uWSGI
Créez rapidement un tableau de bord d'analyse de données Python avec Streamlit et déployez-le sur AWS
Un débutant a essayé de colorier un dessin au trait avec un chainer. J'ai pu le faire.
Recueillez des tweets sur "Corona" avec python et détectez automatiquement les mots qui sont devenus un sujet brûlant en raison de l'influence de "Corona"
Je veux découper uniquement le visage d'une image de personne avec Python et l'enregistrer ~ Détection de visage et rognage avec face_recognition ~
Un script qui envoie un ping au serveur enregistré et envoie un e-mail avec Gmail un certain nombre de fois en cas d'échec
Essayez de créer un site Web simple avec responder et sqlite3
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2 2
Comment convertir un objet de classe en dictionnaire avec SQLAlchemy
Essayez de créer un jeu simple avec Python 3 et iPhone
J'ai essayé de faire LINE BOT avec Python et Heroku
J'ai créé un outil qui facilite un peu la création et l'installation d'une clé publique.
Comment démarrer un serveur WEB simple qui peut exécuter des cgi de php et python
Feuille de route d'apprentissage qui vous permet de développer et de publier des services à partir de zéro avec Python
Comment dessiner de manière interactive un pipeline d'apprentissage automatique avec scikit-learn et l'enregistrer au format HTML
Une histoire qui facilite l'estimation de la surface habitable à l'aide d'Elasticsearch et de Python
Obtenez de manière récursive la liste Excel dans un dossier spécifique avec python et écrivez-la dans Excel.
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
Étapes pour configurer Pipenv, créer une application CRUD avec Flask et la conteneuriser avec Docker
Une histoire qui a permis de créer automatiquement une liste de lecture Anison à partir de vos fichiers musicaux
Une version simple des statistiques gouvernementales (contrôle de l'immigration) facile à gérer avec jupyter
[Python] Qu'est-ce qu'un tuple? Explique comment utiliser sans toucher et comment l'utiliser avec des exemples.