[PYTHON] Surveillance des animaux avec Rekognition et Raspberry pi

bonne année. Je suis Fujisaki, un idiot de chien. J'ai entendu dire qu'Amazon Rekognition, un service capable de reconnaître les images, était sorti à la fin de l'année dernière, alors j'ai joué avec.

Motivation pour la création

Les caméras de surveillance qui utilisent un capteur humain + une tarte à la râpe sont fabriquées depuis longtemps, mais comme cela prend beaucoup de données sur les ordures avec un peu de mouvement, seules des images limitées telles que les chiens et les membres de la famille sont sélectionnées et laissées. Après cela, j'aimerais pouvoir l'effacer.

Préparation

Faire une caméra de surveillance avec capteur humain et Raspberry Pi

Matériel

[[* Raspberry Pi *] Summer! Par cigalecigales, comment connecter la tarte aux râpes et le capteur humain, et comment régler le fonctionnement du capteur! Faisons retentir les vers en utilisant le capteur humain](http://qiita.com/cigalecigales/items/4cf9c16f24d1de92ec7d) J'ai été autorisé à faire référence. Merci beaucoup. KIMG1860.JPG

Utilisez fswebcam pour relier les webcams Raspeye et USB. Je me suis référé à la page officielle ici.

Utilisez os.system pour appeler cela depuis Python.

RekogDogCamera.py


import time
from time import gmtime,strftime
import RPi.GPIO as GPIO

INTERVAL = 3
SLEEPTIME = 5
SENSOR_PIN = 25

GPIO.setmode(GPIO.BCM)
GPIO.setup(SENSOR_PIN, GPIO.IN)

st = time.time()-INTERVAL
while True:
        if( GPIO.input(SENSOR_PIN) == GPIO.HIGH ) and (st + INTERVAL < time.time() ):
                st = time.time()
                strf = strftime("%Y%m%d-%H:%M:%S")
                strfile = strf + '.jpg'
                print("movement detected " + strf)
                os.system('fswebcam --no-banner /home/pi/myphoto/'+ strfile)
              
        time.sleep(SLEEPTIME)
GPIO.cleanup()

Donnez l'image capturée à S3

J'ai utilisé Boto3. Après avoir défini ~ / .aws / informations d'identification etc. en fonction du document, ajoutez la partie à télécharger sur S3 dans la boucle du code ci-dessus.

RekogDogCamera.py


import boto3
bucket_name = 'mybucket'
s3_client = boto3.client('s3')
s3_client.upload_file('/home/pi/myphoto/' + strfile ,bucket_name, strfile)

Maintenant, vous êtes prêt à partir.

Jouons avec de nouveaux!

Utiliser Rekognition pour ne laisser qu'une photo de mon enfant

J'ai essayé la démo de Rekognition. Cette fois, je m'intéresse à la détection d'objets et de scènes. rekognitiondemo.JPG

Suivez le téléchargement du SDK pour lire la documentation. Guide du développeur Amazon Rekognition Il y avait quelque chose que je voulais sur la 28e page du PDF, je vais donc l'essayer une fois depuis la console. Postscript: La version HTML était ici. → [Exercice 1: Détecter les étiquettes dans une image (API)] (http://docs.aws.amazon.com/ja_jp/rekognition/latest/dg/get-started-exercise-detect-labels.html)

$ aws rekognition detect-labels --image '{"S3Object":{"Bucket":"mybucket", "Name":"mydog.jpg "}}' --region us-east-1 --profile default

La photo que j'ai utilisée dans Demo plus tôt a renvoyé une réponse comme celle-ci.

result


 {
    "Labels": [
        {
            "Confidence": 98.25569915771484,
            "Name": "Animal"
        },
        {
            "Confidence": 98.25569915771484,
            "Name": "Canine"
        },
        {
            "Confidence": 98.25569915771484,
            "Name": "Dog"
        },
        {
            "Confidence": 98.25569915771484,
            "Name": "Husky"
        },
        {
            "Confidence": 98.25569915771484,
            "Name": "Mammal"
        },
        {
            "Confidence": 98.25569915771484,
            "Name": "Pet"
        },
        {
            "Confidence": 95.74263763427734,
            "Name": "Eskimo Dog"
        },

(* A part: Ni chien esquimau ni husky, mon enfant est un chien Kishu ...)

Essayez d'appeler à partir du code Python ci-dessus. Puisque os.system s'utilise facilement, je ferai de mon mieux pour échapper à la citation.

RekogDogCamera.py


result = os.system("aws rekognition detect-labels --image \'{\"S3Object\":{\"Bucket\":\""+bucket_name+"\", \"Name\":\""+ strfile +"\"}}\' --region us-east-1 --profile default > temp.json")
                

Bouclez la réponse de retour et signalez «Canine trouvé» si «Nom» a «Canine» et «Confiance» est 55 ou plus. ..

RekogDogCamera.py


with open('temp.json') as json_data:
    data = json.load(json_data)
    for d in data["Labels"]:
        if (d["Name"] == "Canine" and d["Confidence"] > 55.0):
            print ("Canine found: " + str(d["Confidence"]))
        break
                     

(* Au début, j'ai réglé la confiance sur environ 95, mais je l'ai réglé sur 55 car cela ne dépasse pas beaucoup plus de 60 dans une photo de pièce sombre.)

Ensuite, les photos dans lesquelles le chien n'est pas détecté sont exclues de S3.

RekogDogCamera.py


        else:
            s3_client.delete_object(Bucket=bucket_name, Key=strfile) 

Je le ferai. KIMG1858 (1).jpg

$ python3 RekogDogCamera.py --- Opening /dev/video0... Trying source module v4l2... /dev/video0 opened. No input was specified, using the first. Adjusting resolution from 384x288 to 352x288. --- Capturing frame... Captured frame in 0.00 seconds. --- Processing captured image... Disabling banner. Writing JPEG image to '/home/pi/myphoto/20170103-00:08:15.jpg'. Canine found: 71.327880859375 20170102-23-57-58.jpg

J'ai pu le prendre!


Le fichier final ressemble à ceci.

RekoDogCamera.py


import time
from time import gmtime,strftime
import RPi.GPIO as GPIO
import json
import os
import boto3

INTERVAL = 3
SLEEPTIME = 5
SENSOR_PIN = 25
#Spécifiez le bucket à utiliser
bucket_name = 'mybucket'

GPIO.setmode(GPIO.BCM)
GPIO.setup(SENSOR_PIN, GPIO.IN)

st = time.time()-INTERVAL
s3_client = boto3.client('s3')
while True:
         #S'il y a un afflux de données du capteur de sensation du chien et que l'intervalle de temps est plus long que celui spécifié ...
        if( GPIO.input(SENSOR_PIN) == GPIO.HIGH ) and (st + INTERVAL < time.time() ):
                st = time.time()
                strf = strftime("%Y%m%d-%H:%M:%S")
                strfile = strf + '.jpg'
                #prendre une photo
                os.system('fswebcam --no-banner /home/pi/myphoto/'+ strfile)
                #Déplacez les photos que vous avez prises dans le compartiment S3.
                s3_client.upload_file('/home/pi/myphoto/' + strfile ,bucket_name, strfile)
                #Demandez à Rekognition s'il y a un chien sur l'image.
                result = os.system("aws rekognition detect-labels --image \'{\"S3Object\":{\"Bucket\":\""+bucket_name+"\", \"Name\":\""+ strfile +"\"}}\' --region us-east-1 --profile default > temp.json")
                #S'il y a un chien dans les données Json renvoyées par Rekognition ...
                with open('temp.json') as json_data:
                    data = json.load(json_data)
                    for d in data["Labels"]:
                        if (d["Name"] == "Canine" and d["Confidence"] > 55.0):
                                #Il y avait un chien! Et confiant
                                print ("Canine found: " + str(d["Confidence"]))
                                break
                        else:
                                
                                #Sinon, il sera supprimé sans pitié.
                s3_client.delete_object(Bucket=bucket_name, Key=strfile)

        time.sleep(SLEEPTIME)
# Clean Up
GPIO.cleanup()
os.system('rm /home/pi/myphoto/* temp.json')

Recommended Posts

Surveillance des animaux avec Rekognition et Raspberry pi
GPGPU avec Raspberry Pi
DigitalSignage avec Raspberry Pi
MQTT Radicon Car avec Arduino et Raspberry
Obtenez la température et l'humidité avec DHT11 et Raspberry Pi
Enregistrez la température et l'humidité avec systemd sur Raspberry Pi
Plantes Mutter avec Raspberry Pi
Apprentissage automatique avec Raspberry Pi 4 et Coral USB Accelerator
IoT facile pour démarrer avec Raspeye et MESH
Détecter l'état de port du masque avec OpenCV et Raspberry Pi
Mesurez la température et l'humidité avec Raspberry Pi3 et visualisez avec Ambient
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
Résoudre les problèmes liés à l'installation d'OpenCV sur Raspberry Pi et à la capture
Introduction facile au piratage domestique avec Raspberry Pi et discord.py
Créez une caméra de surveillance WEB avec Raspberry Pi et OpenCV
Débutant Python s'ouvre et se ferme avec Raspberry Pi
Créez des jeux LCD (16x2) avec Raspberry Pi et Python
J'ai essayé de connecter Raspeye et conect + avec l'API Web
Production de système de contrôle de température avec tarte aux framboises et ESP32 (1)
Mesurez et comparez les températures avec Raspberry Pi et générez automatiquement des graphiques
[Raspberry Pi] Contrôle du moteur pas à pas avec Raspberry Pi
Utilisez vl53l0x avec RaspberryPi (python)
Commande de servomoteur avec Raspberry Pi
MQTT sur Raspberry Pi et Mac
Communication série avec Raspberry Pi + PySerial
Configuration du système d'exploitation avec Raspberry Pi Imager
Essayez L Chika avec raspberrypi
Construire un serveur VPN avec Raspberry Pie
Essayez de déplacer 3 servos avec Raspeye
Utiliser une webcam avec Raspberry Pi
Classique de Noël (?) Éclairage d'un arbre de Noël avec Raspberry Pi et Philips Hue
Créez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 4
Faire une boussole d'affichage kanji avec Raspberry Pi et Sense Hat
Affichage graphique de la consommation électrique des ménages avec 3GPI et Raspeye
Mesurer la force du signal SIM avec Raspberry Pi
[Raspberry Pi] Ajouter un thermomètre et un hygromètre
Bonjour le monde avec Raspberry Pi + Minecraft Pi Edition
Créer un environnement Tensorflow avec Raspberry Pi [2020]
Essayez de pêcher le Wakasagi avec Raspberry Pi
Programmation normale avec la programmation Node-RED avec Raspberry Pi 3
Capteur humain amélioré fabriqué avec Raspberry Pi
Essayez la détection d'objets avec Raspberry Pi 4 + Coral
Surveillance du trafic avec Kibana, ElasticSearch et Python
Exécuter le servomoteur SG-90 avec Raspberry Pi
Travailler avec des capteurs dans Mathematica sur Raspberry Pi
Utiliser le capteur de mouvement PIR avec Raspberry Pi
Faire une minuterie de lavage-séchage avec Raspberry Pi
Modèle Infer Custom Vision avec Raspeye
Faites fonctionner l'oscilloscope avec le Raspberry Pi
Créez un compteur de voiture avec Raspberry Pi
Enregistrement de la valeur d'Inkbird IBS-TH1 avec Raspberry Pi
Travailler avec le GPS en Python pour Raspberry Pi 3
Créez un convertisseur Ethernet LAN sans fil et un routeur simple avec Raspberry Pi
Acquérir la valeur du capteur de Grove Pi + avec Raspberry Pi et la stocker dans Kintone
Application de notification de message Rabbit MQ avec Growl en Python ~ avec Raspeye et Julius ~
Production d'un système de contrôle de température avec tarte aux framboises et ESP32 (2) Production d'un appareil de transmission
Construction VPN simple de la passerelle IPsec avec Ubuntu 20.04 et Raspberry Pi ―― 1. StrongSwan introduit
Raspberry Pi 3 x Julius (fichier de lecture et fichier de grammaire)