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.
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.
[[* 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.
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()
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.
J'ai essayé la démo de Rekognition. Cette fois, je m'intéresse à la détection d'objets et de scènes.
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.
$ 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
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