ラズベリーパイ3 PythonでOpenCVを使い撮影画像をメール送信

ラズベリーパイにUSBカメラを取り付けました。

PythonOpenCVを使い撮影画像をメール送信

GPIPの27番のスイッチがONになった時に

シャッターを押して写真をメールで転送します。

--main.py---------

# coding: utf-8
# モジュールをインポートする
import RPi.GPIO as GPIO
import time


# GPIO指定をGPIO番号で行う
GPIO.setmode(GPIO.BCM)

#ワーニングは発生しないように
GPIO.setwarnings(False)

# GPIO22,23番ピンを3.3Vに設定LEDを表示
GPIO.setup(22, GPIO.OUT)
GPIO.setup(23, GPIO.OUT)
GPIO.output(23, 1)
 
# GPIO27ピンをINモードに設定
GPIO.setup(27, GPIO.IN)

# GPIO27を入力へ/プルアップ
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)

#カメラ撮影モジュール
import camera1

#メール送信モジュール
import mail

# 画面にGPIO27のステータス0か1を表示
#print GPIO.input(27)


# GPIO27のSWがONになったらシャッターON
ikekka=1
while ikekka  > 0:
        ikekka = GPIO.input(27)
        #print ikekka
        if ikekka == 0:
                camera1.get_pic()
                mail.send()

# GPIO23番ピンを0Vに設定LED消灯
GPIO.output(23, 0)

# GPIO22番ピンを3.3Vに設定LED点灯
GPIO.output(22, 1)

# 1秒待つ
time.sleep(1)
 
# GPIO22番ピンを0Vに設定
GPIO.output(22, 0)

# GPIO設定をリセット
GPIO.cleanup()

--mail.py--------

# -*- coding: utf-8 -*-
 
# send mail utf-8 using gmail smtp server /w jpegs

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

from email.Header import Header
from email.Utils import formatdate
import smtplib


 
def send_email_with_jpeg(from_addr, to_addr, subject, body, jpegs=[], server='smtp.gmail.com', port=587):
    encoding='utf-8'
    msg = MIMEMultipart()
    mt = MIMEText(body.encode(encoding), 'plain', encoding)

    if jpegs:
        for fn in jpegs:
            img = open(fn, 'rb').read()
            mj = MIMEImage(img, 'jpeg', filename=fn)
            mj.add_header("Content-Disposition", "attachment", filename=fn)
            msg.attach(mj)
        msg.attach(mt)
    else:
        msg = mt

    msg['Subject'] = Header(subject, encoding)
    msg['From'] = from_addr
    msg['To'] = to_addr
    msg['Date'] = formatdate()
 
    _user = "***@gmail.com"
    _pass = "****"

    smtp = smtplib.SMTP(server, port)
    smtp.ehlo()
    smtp.starttls()
    smtp.ehlo()
    smtp.login(_user, _pass)
    smtp.sendmail(from_addr, [to_addr], msg.as_string())
    smtp.close()
 
#写真をメールで送信する関数
def send():
    body = u'\n%s\n    --- %s\n' % (u'スイッチが入り画像が送信されました。', u'Akira K')
    js = ['photo.jpg']
    send_email_with_jpeg('***@gmail.com', '***@***.ne.jp', u'撮影画像', body, js)

--camera1.py--------

#coding: UTF-8

# OpenCVをインポート
import cv2


#写真を撮る関数
def get_pic():

 # カメラデバイスを取得
 c = cv2.VideoCapture(0)
 # readで画像をキャプチャ、imgにRGBのデータが入ってくる
 r, img = c.read()
 # 保存
 cv2.imwrite('photo.jpg', img)