置き配チェックに便利!自宅の玄関に Raspberry Pi を使ったカメラを設置
2024年03月13日 水曜日
CONTENTS
近年では置き配が当たり前な世の中となってきました。
- 玄関のチャイムも鳴らず置いていかれる荷物にいち早く気が付きたい
- そして、届いているかも分からない荷物を何度も玄関外に行き確認したくない
- さらには、外出先から荷物の置き配状況を確認したい(外部にWebを公開していないのでVPN接続が必要)
- 他にも、玄関のインターホンにカメラが無いからチャイムだけで来客時に扉を開けるのが不安など
そんなめんどくさがり屋がITの力を頼り、引きこもり生活を充実させるお話です。
そもそもドアの外をカメラで確認したいならパナソニックさんがいい感じの商品出してるよと言いたい方もいると思います。
でもこの商品のお値段がちょっと高いんですよ。
だから欲しいと思っていてもなかなか購入ボタンを押せなかった。
だったら大好きな Raspberry Pi も供給が追い付き購入しやすくなっているから自分で作ればいいじゃないか。
材料の準備
- Raspberry Pi Zero W本体
- Raspberry Pi Zero Wのケース
- microSDカード(OSインストール)
- フレキシブルケーブルが長めのカメラ
- 曲がりやすい金属の金具
- USB電源や給電用USBケーブル
Raspberry Pi Zero Wのセットアップ
Raspberry Pi Zero WへのOSインストールに関しては記載しませんが、「Raspberry Pi Imager」を使ってmicroSDカードに書き込んでいただければ大丈夫です。
それでは構築をしていきます。
管理者権限になる
admin@RasPi-Camera-01:~ $ sudo -i
viの設定変更
root@RasPi-Camera-01:~# vi ~/.vimrc set nocompatible set backspace=indent,eol,start
「ll」コマンドを使えるようにalias追加
root@RasPi-Camera-01:~# vi .bashrc alias ll='ls $LS_OPTIONS -l'
ApacheとPHPをインストール
root@RasPi-Camera-01:~# apt update root@RasPi-Camera-01:~# apt upgrade root@RasPi-Camera-01:~# apt install apache2 php php-dev php-fpm php-gd php-cli php-curl libapache2-mod-php root@RasPi-Camera-01:~# systemctl restart apache2
FFmpegをインストール
root@RasPi-Camera-01:~# sudo apt install ffmpeg
fswebcamをインストール
root@RasPi-Camera-01:~# apt-get install fswebcam
sudo権限を追加
root@RasPi-Camera-01:~# visudo www-data ALL=(ALL:ALL) NOPASSWD: /usr/bin/fswebcam
書き込み権限を付ける
root@RasPi-Camera-01:~# cd /var/www root@RasPi-Camera-01:/var/www# chmod 777 html
メモリ領域に保存する画像のリンクを作成
root@RasPi-Camera-01:/var/www# cd /var/www/html root@RasPi-Camera-01:/var/www/html# ln -s /dev/shm/img_scope_real-time.jpg img_scope_real-time.jpg root@RasPi-Camera-01:/var/www/html# mv index.html Def_index.html root@RasPi-Camera-01:/var/www/html# ll total 16 -rw-r--r-- 1 root root 10701 Sep 5 23:48 Def_index.html lrwxrwxrwx 1 root root 32 Sep 6 00:36 img_scope_real-time.jpg -> /dev/shm/img_scope_real-time.jpg root@RasPi-Camera-01:/var/www/html#
撮影スクリプトの設置
root@RasPi-Camera-01:/var/www/html# vi camera_load.sh
#!/usr/bin/bash # 多重起動の場合は処理をしない if [ $$ -ne $(pgrep -fo "$0") ]; then echo "起動済みです。(Maine)" exit 1 fi if [ $$ -ne $(pgrep -fo "/usr/bin/ffmpeg") ]; then echo "起動済みです。(/usr/bin/ffmpeg)" exit 1 fi # 撮影 /usr/bin/ffmpeg -y -pix_fmt yuv420p -s 640x480 -framerate 2 -i /dev/video0 -update true -vf "drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSansBold.ttf: fontsize=20: text='%{localtime:%Y-%m-%d %X}': fontcolor=red@0.9: x=10: y=10" -r 1 /dev/shm/img_scope_real-time.jpg > /dev/null 2>&1
※「/dev/shm/*」保存先はメモリ領域にしないとSDカードの読み書きが多くなり安定性が極端に下がります。
撮影用スクリプトの自動起動設定
root@RasPi-Camera-01:/var/www/html# vi /etc/crontab * * * * * root cd /var/www/html/ && /usr/bin/bash /var/www/html/camera_load.sh& > /dev/null 2>&1
Webページの作成
root@RasPi-Camera-01:/var/www/html# vi index.php
<form method="post" action="./index.php"> <p> <button type="submit" name="Button_Refresh" value="Refresh">画像更新</button> </p> </form> <?php $UserData_POST_Button_Refresh = $_POST["Button_Refresh"]; if ( "Refresh" == $UserData_POST_Button_Refresh ) { $CMD = 'sudo /usr/bin/fswebcam -r 640x480 -F 10 --timestamp '%Y-%m-%d %H:%M:%S (%Z)' /dev/shm/img_scope_real-time.jpg'; exec($CMD); sleep(3); echo $UserData_POST_Button_Refresh ." '". $CMD ."' OK<BR>"; } ?> <script> function reloadimg(e,timer){ setTimeout( function(){ e.src = "./img_scope_real-time.jpg?r=" + Math.random(); },timer); } </script> <img src="./img_scope_real-time.jpg" onload="reloadimg(this,1000)" onerror="reloadimg(this,1500)" /><BR>
「画像更新」ボタンでfswebcamを呼び出しているのは、FFmpegで画像が取得できなくなった場合に強制的に画像を更新するために書いていますが、数週間連続稼働させても止まったことは無いので無くても良いと思います。
設置
右上に設置したのが今回の制作物です。(赤枠内)
※それ以外のドアスコープのカメラやドアの開閉センサーは今回の記事に関係ありません。
外からの見た目も目立たず景観を損なわないので管理会社からクレームも来ないだろうと信じています。
実際の映像(画像)
右が今回設置したカメラの映像です。
Amazonからの荷物が届いていることが確認できます。
上記の「index.php」を読んで頂いた方であればお気づきとは思いますが、1秒毎に画像は自動で更新されます。(取得に失敗した場合は1.5秒後に再取得)
※左はドアスコープに刺してあるカメラで今回の記事には関係ありませんがおまけで掲載しています。
執筆者X(旧Twitter) | @ryota_imanishi |
2024年3月14日追記
編集部より: マンションなどの共用部にカメラ等を設置する場合は管理会社に相談すべきとのご指摘をいただきました。ご指摘は筆者にも伝えています。