Raspberry Piを使って、Webカメラで撮影した写真を【Lineに送信】

electric

今回は、
ラズパイに接続したボタンを押すと、
Webカメラで撮影した写真を、Lineに送信していきます。

私がこのガジェットが作りたいと思ったのは、
相手に負担を掛けずに、大切な人の顔が見たいと思ったからです。

このガジェットがあれば、ボタンを押すだけで相手の写真を撮って
Lineに送ってくれるので、相手も簡単に操作が出来ます。

朝起きた時、ご飯を食べている時、学校から帰った時、
好きな時に、挨拶をするかのようにボタンを押して、
写真を送ってほしいと思っています。

あなたの大切な相手は誰ですか?
恋人?子供?孫?

この記事で学べること

  • カメラ制御
  • Web API
  • IoT
  • マイコン
  • Python

やりたいこと

・ラズパイに接続したボタンを押したと判断すると、
・USBカメラで写真を撮影し、
・写真をLineに送信する

システム構成図

やることリスト

上記の「やりたいこと」をみて、
どんな作業が必要か、自分で項目を考えてみてください。
これを考えることで、「プログラミング的思考」が身に付いていきます。

番号作業項目備考
やりたいこと・システム構成図の作成
やることリストの作成処理項目の洗い出し
部品の準備
ボタンが押されたことを判断する
カメラで写真撮影
写真をLineに送信
機能のまとめ以上の機能をまとめて、
やりたいことを実現する!

部品の準備

今回のシステムに必要な部品です。
不足している部品があれば購入下さい。

部品名備考
Raspberry Pi別途、電源・SDカード・HDMIケーブルが必要です。
ブレッドボード(※1)
ジャンパー線(※1)オスーメス:2本
ボタン(※1)タクトスイッチ:1個
Webカメラ既にWebカメラを持っていれば、一度それで試してみてください。
大概動作すると思います。

購入に必要な部品を、
Raspberry Pi 関連に記載しています。

ラズパイは、電源を入れただけでは起動しません。
ラズパイの起動手順の記事を参照ください。

ボタンが押されたことを判断する

以下記事「ボタンが押されたことを判断する」の章で、
回路図・配線図・部品の説明・プログラム の説明をしています。
参照ください。

Raspberry Pi と Python を使って【天気予報】を喋らせる
今回は、ボタンを押したら、地元の天気予報を喋ってもらおうと思います。楽しそうだったら作ってみて♪この記事では以下が学べます。ボタン制御スピーカー出力PythonWebAPI(外部情報取得)音声合成(発話)やりた...

カメラで写真撮影

カメラで写真を撮るのに、fswebcamパッケージ を使用します。

fswebcam のインストール

sudo apt install fswebcam

写真を撮る

写真を撮るには、以下コマンドをターミナルから実行します。

fswebcam -r 1280x960 --no-banner image.jpg

写真が撮れたか確認していきましょう!
以下パスにファイルが出来ていると思うので、
ファイルをダブルクリックして写真を見てましょう♪

/home/pi/image.jp

写真をLineに送信

写真を Line に送信するには、
Lineから Access Tokenを取得し、
LineのAPIに、 Access Token と通知したい写真を設定すれば完了です。

LineからAccess Token取得

LineからAccess Token取得に関しては、
以下記事「LineからAccess Token取得」の章を
参照ください。

Raspberry Pi を使って、喋った内容を【Lineへ通知】
今回は、ラズパイに接続したスピーカーに喋った内容を、Lineに送信していきます。使い方として、・子供が学校から帰って来た時の「ただいま」、を伝えることが出来る。・用事があった時、喋って用事を伝えることが出来る。スマホが使えなくても...

プログラム

以下の通り、ディレクトリとファイルを作成する。
この章では、以下赤字のファイルを修正する。

/home/pi/work/photo_line/
└line.py

line.py

以下、
“Your Access Token” の箇所に、
「LineからAccess Token取得」 で取得した Access Token の文字列を設定下さい。

# -*- coding: utf-8 -*-
import requests


def line_photo(message: str, photo_path: str):
    url = "https://notify-api.line.me/api/notify"
    token = "Your Access Token"
    headers = {"Authorization": "Bearer " + token}

    params = {"message":  message}
    files = {"imageFile": open(photo_path, "rb")}
    r = requests.post(url, headers=headers, params=params, files=files)
    print(r.text)


if __name__ == '__main__':
    default_path = "/home/pi/image.jpg"
    line_photo("\nラズパイから写真を送信", default_path)

実行

以下コマンドでプログラムを実行します。

※ 事前に、上記の「カメラで写真撮影」の章を実行し、
写真を撮影しておいてください。

python3 line.py

結果として、
Lineにラズパイから「写真」が通知されれば成功です!

機能のまとめ

以上の機能をまとめて、
やりたいことを実現していきます。

プログラム

この章では、以下赤字のファイルを修正します。
赤色以外のファイルは、上記の章で出てきた内容と同じです。

/home/pi/work/
photo_line/
├app.py
└line.py

app.py

# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import sys
import line
import subprocess

# LED_GPIO 変数に 24をセット
SW_GPIO = 24

# GPIO.BCMを設定することで、GPIO番号で制御出来るようになります。
GPIO.setmode(GPIO.BCM)

# GPIO.INを設定することで、入力モードになります。
# pull_up_down=GPIO.PUD_DOWNにすることで、内部プルダウンになります。
GPIO.setup(SW_GPIO, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

PHOTO_PATH = '/home/pi/work/photo_line/image.jpg'

while True:
    try:
        # ボタン押しで写真を撮影し、Lineへ送信
        if GPIO.input(SW_GPIO) == 1:
            subprocess.run(f'fswebcam -r 1280x960 --no-banner {PHOTO_PATH}', shell=True)
            line.line_photo("\nラズパイから写真を送信", PHOTO_PATH)

    # Ctrl+Cキーを押すと処理を停止
    except KeyboardInterrupt:
        # ピンの設定を初期化
        # この処理をしないと、次回 プログラムを実行した時に「ピンが使用中」のエラーになります。
        GPIO.cleanup()
        sys.exit()

実行

コマンドラインから、先程作成した app.py のディレクトリに移動し、
以下コマンドでプログラムを実行します。

python3 app.py

ボタンを押すと、
カメラで撮影された写真が、Lineに送信されます。

最後に

如何だったでしょうか?

・ボタンを押したか判断出来た時、
・写真が撮れた時、
・写真をLineで送れた時、
感動しましたよね♪
この感動を一人でも多くの人に味わってもらいたいな。

自分で作ったものが動くって楽しいですよね♪

この記事に関連し、以下を作っても楽しいですね。
・定期撮影(1時間に1回撮影)
・人が居たら撮影
・以下記事と併せて、挨拶のタイミングで写真を撮る

Raspberry Pi を使って、喋った内容を【Lineへ通知】
今回は、ラズパイに接続したスピーカーに喋った内容を、Lineに送信していきます。使い方として、・子供が学校から帰って来た時の「ただいま」、を伝えることが出来る。・用事があった時、喋って用事を伝えることが出来る。スマホが使えなくても...

以下記事では他にも色んな電子工作を作っています。
あなたが作りたいモノのヒントがあれば嬉しいです。

電子工作(Raspberry Pi でできること)
このサイトは、「モノづくりの楽しさをあなたに伝えたい」との思いで作っています。「難易度:☆☆☆」の章に、Raspberry Pi(マイコン) と Python(プログラミング言語)を使ったおもちゃの作り方を書いています。あ...

記事を更新するとTwitterでつぶやきます。
フォローしてもらうと、記事を書くモチベーションが上がります。
下のTwitterアイコンからフォローお願いします。

不明な点があればページTOPの「お問い合わせ」にてご連絡下さい。

もし一人で作るのが難しかったら、
一緒に作るサービスをしています。
お気軽に ページTOPの「お問い合わせ」にてご連絡下さい。

タイトルとURLをコピーしました