ラズパイとOpenCVで監視カメラを自作してみた【前編】の続きを行っていきたいと思います!
目次
実装したい内容
改めて、実装したいことを確認しておきます。
実用的な監視カメラの作成。

簡易的なフロー図

主要な3つの機能
- 動体検知
- LINE通知
- 顔認証
は実装してきました。
ソースコード等は前回の記事を参考にしてください。
ソフトウェア側の最後の設定として、ラズパイの電源を入れたら自動でプログラムを起動する設定を行っていきます。
自動起動
自動起動の種類
Raspberry Piでプログラムを自動起動する5種類の方法を比較・解説によると自動起動の方法は大きく5つあるそうです。
- /etc/rc.local
- autostart
- crontab
@reboot
- /etc/init.d
- systemd
様々な方法でトライしてみたのですが、結局うまくいったのがcrontab @reboot
のみでした。
今回はcrontabを使用した設定方法について解説していきます!
crontabとは
事前に「いついつになったら、このプログラムを動かしてね」と指示をしておくと、その通りに行ってくれるUNIX系のプログラムに入っているOSのひとつです。
決まった時間に実行するよう設定できるのがcronなのですが、再起動時にプログラムを実行するよう設定することもできるのです。今回はそれを利用します。
crontabの設定
設定方法はかなりシンプルです!
ターミナルで以下のコマンドを入力します。
1 |
crontab -e |
下の画像のようにテキストエディタが表示されます。

一番下の行に以下のように記入してください。
1 2 |
@reboot export DISPLAY=:0 ; cd ~/SecurityPJT ; python3 ./security_camera.py #@reboot export DISPLAY=:0 ; cd ~/ディレクトリ移動先 ; python3 ./実行するファイル |
「Ctrl + X」→ Y → Enter の手順で保存できます。
保存が終わったら再起動してプログラムが動くかどうか確認しましょう!
export DISPLAY=:0というコマンドを入力しないと、’cannot connect to X server’というエラーが発生してしまうので注意してください。
【補足】crontab書式について
crontabの書式は以下のようになります
1 |
@状態 コマンド |
状態は種類が豊富にあります。rebootは起動後一度だけ実行されます。
1 2 3 4 5 6 7 8 9 |
状態 内容 @reboot Run once, at startup. @yearly Run once a year, "0 0 1 1 *". @annually (same as @yearly) @monthly Run once a month, "0 0 1 * *". @weekly Run once a week, "0 0 * * 0". @daily Run once a day, "0 0 * * *". @midnight (same as @daily) @hourly Run once an hour, "0 * * * *". |
監視カメラ設置の様子
次に実際に設置するために使用したもの、作成手順をご紹介します。
以下のようなものを100均で買ってきました。

キリを使ってネジと木箱をくっつけます。マスキングテープは貫通したネジの保護用に使いました。

電源を指すために、横に小さな穴をあけます(キリで掘りました(笑))

家の玄関に設置しました!

ラズパイの中身はこんな感じになっています。

実際に動いているところを載せたかったのですが、ディスプレイがなく撮影できませんでした。申し訳ありません。
反省・改善点
最初の構想と同じように監視カメラを作成できたのですが、実際に作っている中でいくつか反省点に気づきました。
【ソフトウェア】
- 10秒待機は長すぎる
- 顔認証後、動体検知が起こってしまう→2秒ほど待機の時間を加えるべき
【ハードウェア】
- 雨対策ができていない
- 明らかに変な見た目で警戒される
- 電源を家の裏からつなげているので、侵入の危険がある
どんなものを作るかを考える段階で様々なことを検討しておかないと今回のようなことになってしまうんですね…
反省です。実用的な監視カメラを目指していましたが、まだ実用的と呼ぶには程遠いですね。
おわりに
とはいえ、監視カメラっぽいものはしっかり作れたので良かったです。
皆さんも是非やってみてください!
わかりにくい所などありましたらコメントにてお教えください。
以下、実装の際に試行錯誤した点をまとめてありますので、気になる方は読んでみてください。
試行錯誤した点
自動起動の設定でかなりの時間を費やした。
- systemdで何度やってもプログラムが起動しない
- systemdの設定等を調べながら調整してもうまくいかない
- 他の方法にシフトしAutostartでやるもうまくいかない
- crontabも失敗
- Teratermを利用し、外部からプログラムを起動
- cannnot connect to Xserverというエラーが出る
- export DISPLAY=:0で解決するかもという記事を発見
- export DISPLAY=:0→プログラム起動でついに動く
- コマンドの設定ができるcrontabでついに自動起動に成功
詳しい原因は理解していませんが、おそらくターミナルから実行する際はXserverに接続がされていて、ターミナルを介さない場合は接続がされていないという仕組みに問題があったのだと思います。
今回はカメラを使用していたので上記のようなエラーが発生したのだと思うので、今後はカメラを使用せずにsystemdやAutostartを使えるかどうか確認してみたいと思います。