うちの庭には猫がしょっちゅう来るので来たらAWSのS3へアップロードするようなカメラを作ってみました。
まずはOpenCVで猫を認証できるようにします。 →
こちらの記事参考にお願いします。
猫の学習モデルから画像を認識して画像を保存、AWSへアップロードしていきます。
→AWSの設定、アップロードは
こちら
コード例としてはこんな具合です。
import sys
import cv2
import subprocess
import time
if __name__ == '__main__':
try:
#cascade_path = "/home/pi/opencv-3.1.0/data/haarcascades/haarcascade_frontalface_default.xml" 顔
cascade_path = "/home/pi/opencv-3.1.0/data/haarcascades/cascade.xml"#ネコ
cascade = cv2.CascadeClassifier(cascade_path)
capture = cv2.VideoCapture(0)
if capture.isOpened() is False:
raise IOError("VideoCapture could not open.")
while True:
ret, image = capture.read()
if ret == False:
continue
facerect = cascade.detectMultiScale(image, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10))
color = (255, 255, 255)
for rect in facerect:
cv2.rectangle(image, tuple(rect[0:2]),tuple(rect[0:2] + rect[2:4]), color, thickness=2)
#GPIO.output(18, True)
time.sleep(1)
#GPIO.output(18, False)
cv2.imwrite("img.png", image);
subprocess.check_call(['python3','file2.py'])
break
cv2.imshow("FaceDetection", image)
cv2.waitKey(1)
except KeyboardInterrupt :
print("\nCtl+C")
except Exception as e:
print(str(e))
finally:
capture.release()
cv2.destroyAllWindows()
for i in range (1,5):
cv2.waitKey(10)
print("\nexit program")
OpenCVで猫を認識したら画像を保存すると同時にfile2.pyというpythonファイルを実行しています。
subprocess.check_call(['python3','file2.py'])
冒頭でimport subprocessという一文も忘れないでください。
ちなみにfile2.pyはこうです。
import sys
import threading
import boto3
BUCKET_NAME = '*********************'
class ProgressCheck(object):
def __init__(self, filename):
self._filename = filename
self._size = int(os.path.getsize(filename))
self._seen_so_far = 0
self._lock = threading.Lock()
def __call__(self, bytes_amount):
with self._lock:
self._seen_so_far += bytes_amount
percentage = (self._seen_so_far / self._size) * 100
sys.stdout.write(
"\r%s / %s (%.2f%%)" % (
self._seen_so_far, self._size,
percentage))
sys.stdout.flush()
def UploadToS3():
# S3Connection
s3 = boto3.resource('s3')
s3.Object(BUCKET_NAME, 'img.png').upload_file('img.png')
UploadToS3()
BUCKET_NAMEはS3のバゲットの名前です。
ファイル名はここで入力します
s3.Object(BUCKET_NAME, 'img.png').upload_file('img.png')
このファイルfile2.pyはOpenCVと同じフォルダに入れてください。
これで猫を認識したと同時にアップロードされます。S3のバゲットを公開していればどこからでも
ブラウザでチェックできます。
AWSを使うと簡単にラズパイと連携できます。おススメですよ!