ラズベリーパイ3 PythonでOpenCVを使い撮影画像をメール送信
ラズベリーパイにUSBカメラを取り付けました。
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)