Frohes neues Jahr. Ich bin Fujisaki, ein Hundeidiot. Ich habe gehört, dass Amazon Rekognition, ein Dienst, der Bilder erkennen kann, Ende letzten Jahres veröffentlicht wurde, also habe ich damit gespielt.
Überwachungskameras, die einen menschlichen Sensor + Raspeltorte verwenden, werden seit langem hergestellt. Da jedoch viele Mülldaten mit wenig Bewegung aufgenommen werden, werden nur begrenzte Bilder wie Hunde und Familienmitglieder ausgewählt und belassen. Danach wünschte ich, ich könnte es löschen.
[[* Raspberry Pi *] Sommer! Von cigalecigales, wie man den Raspeltorte und den menschlichen Sensor verbindet und wie man den Betrieb des Sensors anpasst! Lassen Sie die Würmer mit dem menschlichen Sensor klingen](http://qiita.com/cigalecigales/items/4cf9c16f24d1de92ec7d) Ich durfte mich beziehen. Vielen Dank.
Verwenden Sie fswebcam, um Raspeye- und USB-Webcams zu verbinden. Ich habe hier auf die offizielle Seite verwiesen.
Verwenden Sie os.system, um dies von Python aus aufzurufen.
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()
Ich habe [Boto3] verwendet (https://github.com/boto/boto3#quick-start). Fügen Sie nach dem Einstellen von ~ / .aws / credentials usw. gemäß dem Dokument den Teil hinzu, der in der Schleife des obigen Codes in S3 hochgeladen werden soll.
RekogDogCamera.py
import boto3
bucket_name = 'mybucket'
s3_client = boto3.client('s3')
s3_client.upload_file('/home/pi/myphoto/' + strfile ,bucket_name, strfile)
Jetzt können Sie loslegen.
Ich habe die Rekognition-Demo ausprobiert. Dieses Mal interessiere ich mich für die Objekt- und Szenenerkennung.
Folgen Sie dem Download SDK, um die Dokumentation zu lesen. Amazon Rekognition Developer Guide Auf der 28. Seite des PDF wollte ich etwas, also werde ich es einmal von der Konsole aus versuchen. Nachtrag: Die HTML-Version war hier. → [Übung 1: Beschriftungen in einem Bild erkennen (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
Das Foto, das ich zuvor in der Demo verwendet habe, hat eine solche Antwort zurückgegeben.
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"
},
(* Nebenbei: Weder Eskimohund noch Husky, mein Kind ist Kishu-Hund ...)
Versuchen Sie, über den obigen Python-Code aufzurufen. Da os.system leicht zu bedienen ist, werde ich mein Bestes tun, um dem Zitat zu entkommen.
RekogDogCamera.py
result = os.system("aws rekognition detect-labels --image \'{\"S3Object\":{\"Bucket\":\""+bucket_name+"\", \"Name\":\""+ strfile +"\"}}\' --region us-east-1 --profile default > temp.json")
Schleifen Sie die Rückantwort und melden Sie "Canine found", wenn "Name" "Canine" hat und "Confidence" 55 oder höher ist. ..
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
(* Zuerst habe ich Confidence auf ungefähr 95 gesetzt, aber ich habe es auf 55 gesetzt, weil ich auf einem Foto in einem dunklen Raum nicht über 60 gehe.)
Dann werden die Fotos, auf denen der Hund nicht erkannt wird, von S3 ausgeschlossen.
RekogDogCamera.py
else:
s3_client.delete_object(Bucket=bucket_name, Key=strfile)
Ich werde das machen.
$ 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
Ich konnte es nehmen!
Die endgültige Datei sieht so aus.
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
#Geben Sie den zu verwendenden Bucket an
bucket_name = 'mybucket'
GPIO.setmode(GPIO.BCM)
GPIO.setup(SENSOR_PIN, GPIO.IN)
st = time.time()-INTERVAL
s3_client = boto3.client('s3')
while True:
#Wenn Daten vom Hundegefühlssensor eingehen und das Zeitintervall länger ist als angegeben ...
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'
#mach ein Foto
os.system('fswebcam --no-banner /home/pi/myphoto/'+ strfile)
#Verschieben Sie die aufgenommenen Fotos in den S3-Bucket.
s3_client.upload_file('/home/pi/myphoto/' + strfile ,bucket_name, strfile)
#Fragen Sie Rekognition, ob auf dem Bild ein Hund zu sehen ist.
result = os.system("aws rekognition detect-labels --image \'{\"S3Object\":{\"Bucket\":\""+bucket_name+"\", \"Name\":\""+ strfile +"\"}}\' --region us-east-1 --profile default > temp.json")
#Wenn die von Rekognition zurückgegebenen Json-Daten einen Hund enthalten ...
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):
#Da war ein Hund! Und zuversichtlich
print ("Canine found: " + str(d["Confidence"]))
break
else:
#Wenn nicht, wird es gnadenlos gelöscht.
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