忍者ブログ

設備のマニアどっとこむ

IoT開発、設備・DIYのブログ!

OpenCVとAWSで庭に来た猫の写真をアップロードする。

うちの庭には猫がしょっちゅう来るので来たら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を使うと簡単にラズパイと連携できます。おススメですよ!










拍手[0回]

PR

コメント

翻訳(Translate)

プロフィール

HN:
佐々木 雅史
性別:
男性
自己紹介:
2021年 ラズパイ、M5stackを用いたIoT開発を専門で受注するアルティメンテを設立。代表を務める。
・2020年ラズパイコンテスト優良賞受賞
・設備系資格多数(電験3種、消防設備士甲4、2級ボイラー技士、危険物乙4、電工2種、技術士補(電気・電子)、エネ電、フォークリフトなど)

AD

カレンダー

10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30