置き配チェックに便利!自宅の玄関に Raspberry Pi を使ったカメラを設置

2024年03月13日 水曜日


【この記事を書いた人】
今西 亮太

IIJのコンテンツ配信事業やグループ会社のJOCDNやIIJエンジニアリングに所属。CDNサービスの運用保守以外にもイベントで現場からライブ配信作業や動画編集などやってます。にじさんじ所属の星川サラが大好きなエンジニア。

「置き配チェックに便利!自宅の玄関に Raspberry Pi を使ったカメラを設置」のイメージ

近年では置き配が当たり前な世の中となってきました。

  • 玄関のチャイムも鳴らず置いていかれる荷物にいち早く気が付きたい
  • そして、届いているかも分からない荷物を何度も玄関外に行き確認したくない
  • さらには、外出先から荷物の置き配状況を確認したい(外部にWebを公開していないのでVPN接続が必要)
  • 他にも、玄関のインターホンにカメラが無いからチャイムだけで来客時に扉を開けるのが不安など

そんなめんどくさがり屋がITの力を頼り、引きこもり生活を充実させるお話です。

そもそもドアの外をカメラで確認したいならパナソニックさんがいい感じの商品出してるよと言いたい方もいると思います。

画像引用元:https://panasonic.jp/hns/products/hc400.html

でもこの商品のお値段がちょっと高いんですよ。
だから欲しいと思っていてもなかなか購入ボタンを押せなかった。

だったら大好きな Raspberry Pi も供給が追い付き購入しやすくなっているから自分で作ればいいじゃないか。

材料の準備

  1. Raspberry Pi Zero W本体
  2. Raspberry Pi Zero Wのケース
  3. microSDカード(OSインストール)
  4. フレキシブルケーブルが長めのカメラ
  5. 曲がりやすい金属の金具
  6. USB電源や給電用USBケーブル

4.フレキシブルケーブルが長めのカメラ

5.曲がりやすい金属の金具

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日追記
編集部より: マンションなどの共用部にカメラ等を設置する場合は管理会社に相談すべきとのご指摘をいただきました。ご指摘は筆者にも伝えています。

今西 亮太

2024年03月13日 水曜日

IIJのコンテンツ配信事業やグループ会社のJOCDNやIIJエンジニアリングに所属。CDNサービスの運用保守以外にもイベントで現場からライブ配信作業や動画編集などやってます。にじさんじ所属の星川サラが大好きなエンジニア。

Related
関連記事