54
63

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Raspberry Piで室内カメラを作る①

Last updated at Posted at 2019-02-18

概要

自宅でのペット監視用に室内カメラを設置したくなりました。
始めは普通の室内カメラを買う予定だったのですが、Raspberry PiやPythonの勉強ついでに一から作ってみようと思います。

要件

室内カメラとして使う際に欲しい機能の一覧を記載しました。

  • 任意のタイミングでストリーム配信を行える
  • 一定間隔で画像を保存する
  • 外出先のスマホから確認ができるようにする

最終的には全ての機能を実装したいところですが、今回はストリーミング配信の確認をしたいと思います。

調査

1. 実装言語
Raspberry Piを操作するための言語はPythonを採用します。
Raspberry PiにはPython実行環境が標準で搭載されており、2019年2月現在、Python2.7.13とPython3.5.3がインストールされています。現状Python2を選択する理由はないのでPython3系列を採用します。
3.5のままで良いのであればそのままでよいのですが、今後のためにPythonのバージョンは3.6または3.7にしておきたいので、今回はPython3.6を追加でインストールします。

※自分の環境のpythonのバージョンを調べたい場合はpython --versionおよび、python3 --versionで確認ができます

2. ソフトウェアの選別
Raspberry Piでストリーミング配信と画像撮影を行うにはmotionかMJPG-streamerが一般的のようです。
調べているうちにmotionは遅延が発生しやすいということ、ブラウザが限定されてしまうようです。外出時にAndroidで配信を閲覧できるようにしたかったため、今回はMJPG-streamerを選択します。

3. Webカメラ
Raspberry Piでは専用カメラモジュールが発売されていますが、今回は手軽に実装したかったので
USBカメラでの実装を行います。
調査時にこの記事BSW200MBKを知り、広角撮影が可能なことからこちらをそのまま採用しました。

3. まとめ
調査の結果、今回必要なソフト・機器の一覧を下にまとめました。
必要に応じてこちらは追記をしていきます。

種別 ソフトもしくは機器 備考
言語 Python 3.6.x 実行時の最新バージョン
配信ソフト MJPG-streamer
Webカメラ BSW200MBK

準備物

初回の購入物品に追加して、バッファローから発売されているBSW200MBKを購入しました。

Webカメラ・ソフトウェアの準備

Raspberry PiとWebカメラの準備ができたら必要なソフトウェアのインストールを行います。
次回以降ではPython経由でサービス起動や静止画撮影を行う予定ですが、今回は動画配信のみなのでWebカメラの設定とMJPG-streamerのインストールのみ実施します。

##1. Webカメラの接続
開封後Raspberry Piに購入したWebカメラを接続しておきます。
接続後、ターミナルでlsusbls /dev/video*を実行してWebカメラが認識されているかを確認します。

lsusb
# WebCamもしくはWideCamといった記載があるデバイスが存在するかを確認する
Bus 001 Device 00X: ID XXXX:XXXX ~ WideCam F100

ls /dev/video*
# Webカメラが正常に接続されている場合ビデオキャプチャデバイスが認識される
/dev/video0

認識がされていることが確認できたらsudo rpi-updateを実行して再起動をします。

Webカメラの撮影確認(任意)
Webカメラが認識されているかを確認するためにfswebcamをインストールします。
sudo apt-get install fswebcamを実行してインストール後、fswebcam /tmp/test.jpgを入力して静止画撮影ができるかを確認します。

##2. MJPG-streamerのインストール
オリジナル版MJPG-streamerはRaspberry Piに対応していないので、フォーク版をインストールします。
オリジナル版、フォーク版どちらを利用する場合でもコンパイルが必要になります。

1.インストール
コンパイルに必要なものとMJPG-streamerを取得し、コンパイルを実行。

# /opt配下に移動
cd /opt
# 現在のユーザのホームディレクトリに作成する場合は下記を実行
cd ~
# 必要に応じてインストール用ディレクトリを作成した方が管理がしやすい
# sudo mkdir mjpg-streamer
# sudo cd mjpg-streamer

# cmake、libjpeg8-devを取得
sudo apt-get install cmake libjpeg8-dev
sudo git clone https://github.com/jacksonliam/mjpg-streamer.git
# コンパイル
cd mjpg-streamer/mjpg-streamer-experimental
sudo make
# コンパイル後のバイナリファイルを配置
sudo make install

ストリーム配信の確認

下記コマンドを実行した後、PCのブラウザにhttp://192.168.XXX.XXX:8080/?action=streamを入力して配信が行われているかを確認します。
ストリーム以外の動作はこちらで確認することができます。

cd /usr/local/lib
# ポート8080、画面サイズ640×480、30fps、クオリティ10(1~100まで)で実行
mjpg_streamer -o "./output_http.so -w ./www -p 8080" -i "./input_uvc.so -d /dev/video0 -r 640x480 -fps 30 -q 10 -y -n"
# カメラモジュールで実行する場合
mjpg_streamer -o "./output_http.so -w ./www -p 8080" -i "./input_raspicam.so -x 640 -y 480 -fps 30 -q 10"

本来は上記のコマンドで実行できるはずなのですが、ERROR: could not find input pluginというエラーが発生してしまったためプラグインファイルをフルパスで記載しました。

mjpg_streamer -o "/usr/local/lib/mjpg-streamer/output_http.so -w ./www -p 8080" -i "/usr/local/lib/mjpg-streamer/input_uvc.so -d /dev/video0 -r 640x480 -fps 30 -q 10 -y -n"

終了させたい場合はCtrl+Cを押せば終了させることができます。

#総括

これでストリーム配信ができる環境が整いました。
次回はPython3.6のインストール及び開発環境を構築し、任意のタイミングでストリーム配信や静止画撮影ができるように設定を行います。

参考

この記事を書くにあたって、以下のサイトを参考にさせて頂きました。
【BUFFALO】「BSW200MBK」をUbuntuとRaspberry Piで使ってみた
はじめてのRaspberry PIで監視カメラを作ってみた。
Raspberry Piに外部ネットワークからアクセスできる様にして携帯でペットを遠隔監視する方法
Raspberry Pi 3 の標準カメラで撮影した動画をブラウザに配信する方法まとめ
Raspberry Piでwebカメラの映像を配信する方法(MJPG-streamer編)
RasPi:MJPG-streamer動画配信で遊んでみた♬
mjpg-streamerでストリーミング配信
Raspberry Piでカメラが認識しない際の対処法
第8回: MJPG-streamerのインストール

54
63
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
63

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?