ただ建築が好きな走るエンジニア、

日系某メーカーを辞めて外資系に転職。資格、建築デザイン、転職と来て今はひたすらす走ってます。2020別大2:49:13。

走れないのでラズパイで遊ぶ、



走れないので家に引きこもり。

埃を被ったラズパイを取り出して
Pythonのコードを試してみる。

動体検知とメール送信を組み合わせて
監視カメラ。

面白いけど気味が悪いと家族に言われました。
昔、FMワイヤレスマイクを作った時と根は同じ?

長男だけ話に付き合ってくれました。
ただ、動くものの方がいいみたいです。

と言いつつ、やっぱり走りたくなって
夕食の後にキロ6分で12kmほどジョギングしてみました。

ジョグぐらいは大丈夫な感じ。
明日の体の反応を見て徐々に。

最後に備忘録のソースコードを少し。


import os
import cv2
import os.path
import datetime
import smtplib
from email import Encoders
from email.Utils import formatdate
from email.MIMEBase import MIMEBase
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
 
#Account info
ADDRESS = "xxxx@xxxx.xx"
PASSWARD = "yyyyyyyy"
 
#SMTP server
SMTP = "smtp.xxxx.xx"
PORT = 587
 
def create_message(subject, body, mime=None, attach_file=None):

    msg = MIMEMultipart()
    msg["From"] = ADDRESS
    msg["To"] = ADDRESS
    msg["Date"] = formatdate()
    msg["Subject"] = subject
    body = MIMEText(body)
    msg.attach(body)
 
    if mime != None and attach_file != None:
        attachment = MIMEBase(mime['type'],mime['subtype'])
        file = open(attach_file['path'])
        attachment.set_payload(file.read())
        file.close()
        Encoders.encode_base64(attachment)
        msg.attach(attachment)
        attachment.add_header("Content-Disposition","attachment", filename=attach_file['name'])
 
    return msg
 
def send(msg):
    smtpobj = smtplib.SMTP(SMTP, PORT)
    smtpobj.login(ADDRESS, PASSWARD)
    smtpobj.sendmail(ADDRESS, ADDRESS, msg.as_string())
    smtpobj.close()
 
def mosaic(src):
    dst = cv2.resize(src, None, fx=0.1, fy=0.1, interpolation=cv2.INTER_NEAREST)
    return cv2.resize(dst, src.shape[:2][::-1], interpolation=cv2.INTER_NEAREST)
 
def difference(a, b):
    if(a < b):
        return b - a
    return a - b
 
def detect(frame):
    print('Motion Detected')
    cv2.imwrite('capture.jpg', frame)
    subject = "Motion Detected!!"
    body = "Motion Detected."
    mime={'type':'text', 'subtype':'comma-separated-values'}
    attach_file={'name':'capture.jpg', 'path':'./capture.jpg'}
    msg = create_message(subject, body, mime, attach_file)
    send(msg)
 
def cnt(src, keep):
    os.system('clear')
    count = 0
    for y in range(0, 24):
        for x in range(0, 32):
            target = src[y*10][x*10]    
            diff = difference(keep[y][x],target)
            if diff > 50:
                count += 1
            keep[y][x] = target
    return count
 
cap = cv2.VideoCapture(0)
cap.set(3,320) # WIDTH
cap.set(4,240) # HEIGHT
cap.set(5,30) # FPS
keep = [[0] * 32 for i in range(24)]
busy = True
count2 = 1900
while(True):
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    mos = mosaic(gray)
    count = cnt(gray, keep)
    print('{0} {1}'.format(count,busy))
    if busy and count==0:
        busy = False
    if busy == False and count > 5:
        if count2 > 1800:
            busy = True
            detect(frame)
            count2 = 0
        else:
            count2 += 1
cap.release()
cv2.destroyAllWindows()