yamadaTarouの日記

日々の生活を書いてます。誰か宛てではなく、自分宛て。もはや自〇行為(オ〇ニー)と同じ

raspberry Pi 入門③(防犯カメラ作成)

防犯カメラを作成します。

 

要件としては、以下です。

①人感センサーで人の動作があるかチェックする。

②人の動作がある場合、写真撮影する。

ファイル名は、「YYmmdd HH:MM:SS.jpg」とする

③slackのプロジェクトに画像をアップする。

 

今回記載するのは、②と③ついて記載します。

なお、カメラモジュールの動作確認などは、以下にまとめてあります。

Raspberry Pi 入門-カメラホルダーの組み立て方法- - yamadaTarouの日記

 

【部品】

raspberry Pi Zero WH

ラズパイ用のカメラモジュール

https://www.amazon.co.jp/gp/product/B07PSFFF47/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1

 

 写真撮影プログラム

take_picture.py

# -*- coding: utf-8 -*-
import picamera
import datetime

# 定数
PATH = '/home/pi/Desktop/Test/pictureData/'
FILE_TYPE = '.jpg'

# ファイル名生成(フルパス)
now = datetime.datetime.now()
file_name = 'test' + '{0:%y%m%d_%H:%M:%S}'.format(now)
full_path = PATH + file_name + FILE_TYPE

# 撮影ファンクション
def taking_picture_function(file_name):
  camera = picamera.PiCamera()
  camera.capture(file_name)

 

taking_picture_function(full_path)

 

こんな感じです。

これで、以下のコマンドで写真が取れれば、OKです。

$ python take_picture.py

 

 

 slackのプロジェクトに画像をアップする

プログラム自体はあまり難しくないですが、slackのアプリを使いこなすことが難しいです。

私は参考サイトでなんとかできましたが、改めて勉強が必要だと感じています。

以下のサイトが非常に丁寧に記載されておりましたので、こちらを参考に進めるのがいいです。

ただ、POSTでslackのAPIを呼び出す際にchannelIdを指定する必要があるようだったのですが、channelIdを指定するとinvalid_channelとなってしまいました。

そのため、channelIdは指定せずに記載しています。

qiita.com

 

また、tokenは以下のページから確認できます。

Slack API: Applications | Slack

 

写真撮影とslackへのアップロードを合わせると、以下のようなコードとなりました。

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

# 定数
PATH = '/home/pi/Desktop/Test/testCamera/'
FILE_TYPE = '.jpg'
SLACK_URL = 'https://slack.com/api/files.upload'
ACCESS_TOKEN = 'xxxxxx'

# ファイル名生成(フルパス)
now = datetime.datetime.now()
file_name = 'test' + '{0:%y%m%d_%H:%M:%S}'.format(now)
full_path = PATH + file_name + FILE_TYPE

# 撮影ファンクション
def taking_picture_function(file_name):
camera = picamera.PiCamera()
camera.capture(file_name)

# 写真転送ファンクション
def send_picture_function(file_name):
files = {'file': open(file_name, 'rb')}
param = {'token': ACCESS_TOKEN}
post_result = requests.post(url="https://slack.com/api/files.upload", params=param, files= files)
print(post_result)

taking_picture_function(full_path)
send_picture_function(full_path)
print('end')

 

参考

Ubuntu 18.04 LTS : Samba : フルアクセスの共有フォルダ作成 : Server World

Raspberry Pi 3B+とSlackbotで遠隔から写真撮影 - Qiita

PythonでSlackに画像をアップロードする方法 - Qiita

SlackのOAuth認証を使ってユーザ情報を取得してみた - Qiita