5GHz WiFi対応させたPi Zero rev1.3とPi Cameraでミニマムなネットワークカメラを作ってみた(mjpg-streamer版)

カメラ
この記事は約13分で読めます。
スポンサーリンク
スポンサーリンク

前回に引き続きPi Zero rev1.3ネタです。

rev1.3を使うからには、増設されたPi Cameraコネクタを使ってナンボでしょう!

という事で、今回はPi Cameraモジュールを使って無線LANなミニマムなネットワークカメラにしてみようと思います。

 

<ご参考>Pi Zeroで5GHz WiFiなGW-450D2を使える様にしたお話。

Pi Zero rev1.3をGW-450D2で5GHz WiFi対応にしてみた(RASPBIAN JESSIE LITE版)
RaspberryPiの超小型バージョンのPi Zeroを5GHz無線LAN対応にしてみました。

 

【2017/09/21追記】

2017年版として、もっと小型のPi Zeroカメラシステムを公開しました。詳しくはコチラ↓

Pi Zeroと互換Piカメラを使った超小型ケースを作ってみた(STLデータ公開有り)
RaspberryPi財団公式Pi Zeroケースが出る前に、このブログでもフリスクっぽい感じのケースを自作してましたが、Piカメラが内蔵出来ないという点で後発の財団公式ケースに負けてしまいました。 だって普通に買えるPiカメラ用フレキがメチャ長なんだもん。ヽ(`Д´)ノプンプン リベンジとして、前回記事の3Dプリンタサーバーで使ったとても小さい互換Piカメラを使って、財団...【続きを読む】

 

Piをネットワークカメラとして使う方法いろいろ

ネットワークカメラソフトウェアを使えば、ネットワークカメラに早変わりです。

Raspberry Piで動くモノも幾つかあるみたい。

 

Motion

公式リンクはコチラ

動態検知などの機能がある様で、監視カメラ用途に使えそう。

Pi Zeroでも動作しました。遅延も少ないです。

但し、監視カメラ用途でデフォルトでストレージアクセスが頻繁な為、microSDカードの寿命を気にして今回は採用せず。

設定でストレージキャッシュ書き込み無しに出来そうではありましたが、追求してません。

 

GStreamer

公式リンクはコチラ

ストリーミング用途で圧縮されるのか、遅延が大きい。

Pi Zeroで安定させて動作できなかったので、現状では採用せず。

 

mjpg-streamer

githubリンクはコチラ

昔のデジカメや低価格ネットワークカメラなどの採用されているMotion JPEG(MJPEG)を使ってるので、CPUパワーがそれほど必要なく低遅延。

今回採用した方式です。

 

 

必要なモノの準備

先日用意したPi Zero rev1.3 & GW-450D2周り以外に必要なモノはこれだけ。dsc04671

Pi Camera v2.1

別に最新のv2.1じゃなきゃいけない理由は有りません。単に私がv2.1で試したというだけです。

公式Piカメラの通常タイプ(v2.1)

公式Piカメラの赤外線対応(赤外線フィルタ無し)タイプ(v2.1)

 

Pi Zero専用フレキケーブル

残念ながら、Pi Cameraに同梱されてるフレキは使えません。

Pi Zero rev1.3とPi Cameraを繋ぐには、Pi Zero専用のフレキが必要です。

 

作業概要

トランジスタ技術の2016年11月号でRaspberryPiとPi Cameraモジュールを使った特集があり、参考にさせて頂きました。

しかし、トラ技にこんな記事が載るとは・・・時代を感じます。(笑)

 

また、コチラのサイトの情報も参考にさせて頂きました。有難うございます。m(__)m

Raspberry Pi用カメラモジュールおよび赤外線カメラPi NoIRの映像をandroidで表示してみた
Raspberry Pi用カメラモジュールおよび赤外線カメラPi NoIRの映像をandroidで表示してみた

 

大雑把な流れになりますが、こんな感じです。

  1. Pi Cameraを接続し、コンフィグでアクティブ化
  2. mjpg-streamerのインストール
  3. 配信画質設定と自動起動の設定
  4. ネットワーク視聴確認

 

では作業を進めましょう。

 

 

Pi Cameraを接続し、コンフィグでアクティブ化

Pi Cameraを接続する

Pi Cameraとフレキを繋ぎます。

フレキには裏表有りますので向きに注意しましょう。この向きになる様に繋ぎましょう。dsc04672

 

っと、剥き出しだと万が一接触ショートして壊れる危険もありますので、ケースに入れておきます。

 

Pi Zero専用ケース(rev1.3対応)はコチラ↓

RaspberryPiZero用のケースを作成してみた(STLデータ公開有り)
先日Raspberry Pi2/3用ケースをご紹介しましたが、もっと小型のRaspberry Pi Zero用のケースもご紹介しようと思います。 カメラ用のフレキコネクタが追加された新型Pi Zero(ver1.3)に対応しています。

Pi Camera専用ケースはコチラ↓

レーザーカッターでRaspberryPi専用カメラのケースを作成してみた(SVGデータ公開有り)
先日レーザーカッターでRaspberryPiケースを作った話をご紹介しました。 今回は、RaspberryPi専用カメラのケースも作ってみたというお話。 ちょっと拘って、パン・チルトも可能な造りにしてみました!!

 

尚、Pi Camera専用ケースに収めるには、穴からフレキを通してから繋ぐ必要が有ります。dsc04673

Pi Zeroケースに載せてみました。dsc04674

うん、凄いミニマム感。(笑)

 

一通り接続出来たら、起動させてSSH接続しましょう。

 

初期設定を行う

続いて、下記コマンドで初期設定を行います。

$ sudo raspi-config

 

下記の項目を修正してください。

 

[Enable Camera]

Pi Cameraをアクティブにします。

 

以上の項目を修正したら、Finishを選んで再起動しましょう。

 

 

mjpg-streamerのインストール

再起動したらもう一度SSH接続します。

Pi Cameraがアクティブになっているか確認する

フレキ接続のミスや、初期不良などの可能性もありますので、念の為に。

$ vcgencmd get_camera

正しく動いているなら下記の様に返ってくる筈です。

supported=1 detected=1

 

mjpg-streamerをインストールする

下記コマンドを実行します。

$ sudo apt-get update
$ sudo apt-get install libjpeg9-dev cmake
$ sudo git clone https://github.com/jacksonliam/mjpg-streamer.git mjpg-streamer
$ cd mjpg-streamer/mjpg-streamer-experimental
$ sudo make
$ cd
$ sudo mv mjpg-streamer/mjpg-streamer-experimental /opt/mjpg-streamer

補足すると、「libjpeg9-dev」は、JPEGイメージファイルの読み書きをするアプリケーションだそうで。

「mjpg-streamer」は、今回のメイン動画ストリーミングアプリケーションで、「mjpg-streamer-experimental」は、「mjpg-streamer」をPi Camera対応にしたアプリケーションで、オプショナルなのかコンパイルしないと使えないという事みたい。

 

 

配信画質設定と自動起動の設定

mjpg-streamerの設定スクリプトを作成する

下記コマンドで、配信画質を設定するスクリプトファイルを新規作成します。

$ sudo vi /home/pi/start_stream.sh

下記の内容をコピーして保存終了させてください。

#!/bin/bash

if pgrep mjpg_streamer > /dev/null
then
echo "mjpg_streamer already running"
else
LD_LIBRARY_PATH=/opt/mjpg-streamer/ /opt/mjpg-streamer/mjpg_streamer -i "input_raspicam.so -fps 15 -q 50 -x 640 -y 480" -o "output_http.so -p 9000 -w /opt/mjpg-streamer/www" > /dev/null 2>&1&
echo "mjpg_streamer started"
fi

 

スクリプトの赤字部分は下記のパラメータを挿してます。お好みに合わせて修正してください。

-fps 15 で、1秒当たりのフレーム数を指定しています。

-x 640 -y 480 で、解像度を指定しています。

-q 50 で、JPEGの品質を指定しています。(1~100)

-p 9000 で、配信するポート番号を指定しています。

 

スクリプトが自動起動する様に設定する

先程のスクリプトを「/etc/rc.local」に追記します。

$ sudo vi /etc/rc.local

最終行「exit 0」の前の行に、下記を差し込みましょう。

sh /home/pi/start_stream.sh

 

書込み後保存終了したら、一度再起動させます。

$ sudo reboot

 

 

ネットワーク視聴確認

ここまでうまく行っていれば、再起動後にブラウザで「PiのIP:9000」にアクセスしてみましょう。

例:http://192.168.xx.xx:9000

※赤字はPi Zero(GW-450D2)のIPアドレスに読み替えて下さい。

 

Pi Cameraから、dsc04623

こんな感じに見えてる筈です。(Streamを選択すると動画、Staticは静止画です)mjpg-streamer%e3%82%ad%e3%83%a3%e3%83%97%e3%83%81%e3%83%a3%e7%94%bb%e9%9d%a2

※キャプチャ時は画面回転させて正位置にしてあります。

 

 

尚、本記事では、宅内ネットワーク止まりとなっております。

外出先でも見れる様にするには、セキュリティ対応などもうひと手間必要なので、また改めて。

 

 

(参考データ)画質設定によるデータ転送量の比較

ネットストリーミングでスループット10Mbps程度で抑えれて、画質が良い組み合わせを探したいと思います。

先程の画像のと違って、赤外線対応タイプのPi Cameraでキャプチャしたので、画像がやや赤っぽいですが、ご容赦を。

マクベスチャートとかあれば比較しやすいのですが・・・流石に持ってないのです。(;´・ω・)

作業台に置いて映しただけなので、対象の画像がイマイチなのはお目こぼし下さい。m(__)m

 

VGA(640×480)、15fps、JPEG品質100

Windows10のタスクマネージャー読みで、スループットは21Mpbs程度。

静止画キャプチャしたJPEG画像は品質100だけにかなりクッキリしてる。640-480_15fps_q100

 

VGA(640×480)、15fps、JPEG品質50

18Mpbs程度。

品質100と比べて差を感じない。640-480_15fps_q50

 

VGA(640×480)、15fps、JPEG品質25

11Mpbs程度。

まだ品質100と比べて差を感じない。640-480_15fps_q25

 

VGA(640×480)、15fps、JPEG品質10

4Mpbs程度。まだ十分な画質。差を感じない。640-480_15fps_q10

 

VGA(640×480)、15fps、JPEG品質5

2Mpbs程度。かなり劣化してきた。640-480_15fps_q5

 

VGA(640×480)、15fps、JPEG品質1

800k~1Mpbs程度。 設定再下限だけに、画質はモザイク画像レベルまで超絶劣化。(笑)640-480_15fps_q1

 

ということで、品質設定は10程度でも画質劣化を気にせずに使えそう。

(撮影対象によって差がある可能性有ります)

 

続いて、品質設定10のまま、解像度を上げてみる。

 

SXVGA(1280×960)、15fps、JPEG品質10

11Mbps程度。1280-960_15fps_q10

 

HD(1280×720)、15fps、JPEG品質10

9Mbps程度。 16:9だと左右が広がるかと思いきや、上下がトリミングされただけだった。(笑)1280-720_15fps_q10

 

FullHD(1920×1080)、15fps、JPEG品質10

17Mbps程度。 HDと同じ16:9なのにトリミング量が増えてる・・・謎です。1920-1080_15fps_q10

 

という事で、11Mbpsと実用的なレベルで最大画角になる設定は「SXVGA(1280×960)、15fps、JPEG品質10」でしょうか。

もっとも、外出先からモバイルで視聴とか出来る様にするには、3~5Mbps程度には抑えないとパケ死しそう。(笑)

ちなみに、Raspberry PiのGPUにはH.264のハードエンコーダーが載ってるみたいなので、コレが活用できるとCPUパワーも抑えれてデータ帯域も抑えれてと万々歳なんですが、まだ使える状況には辿り着いてません。

 

 

CPU温度とのバランスも必要

「SXVGA(1280×960)、15fps、JPEG品質10」設定で放置してみたところ、CPU温度が結構上がってました。

下記コマンドでCPU温度を見る事が出来ます。

$ vcgencmd measure_temp

とすると下記の様に出てきました。

temp=54.1’C

Pi Zeroをケース入れた状態で、30分程放置してこの温度でした。

 

ちょっと危険域かもしれませんので、フレームレートを15fpsから10fpsへ落としたところ、11Mbpsから7~8Mbpsへ転送量が落ち、温度も50℃付近へやや落ちてくれました。

 

 

謝辞

参考にさせて頂いた諸々のサイトリンクです。

mjpg-streamerのインストールについて、参考にさせて頂きました。

Raspberry Pi用カメラモジュールおよび赤外線カメラPi NoIRの映像をandroidで表示してみた
Raspberry Pi用カメラモジュールおよび赤外線カメラPi NoIRの映像をandroidで表示してみた

 

同じく、mjpg-streamerのインストールについて、参考にさせて頂きました。

Raspberry Pi 3でネットワーク ライブカメラを構築する方法 MJPG-streamer編 (ラズパイのカメラで遠隔監視カメラ(ネットワークカメラ、ライブカメラ))
Raspberry Pi 3でネットワーク ライブカメラを構築する方法 MJPG-streamer編

 

CPU温度を測る方法について、参考にさせて頂きました。

RaspberryPi(Raspbian)のCPUの温度をcatを使わないで取得してみた - Qiita
raspiのCPUの温度を知りたいときは多くの人がcatで取得していると思います$ cat /sys/class/thermal/thermal_zone0/temp#40084これって打つの…

 

動画コーデックの種類と違いについて、参考にさせて頂きました。

動画コーデックの種類と違い(H.264・VP9・MPEG・Xvid・DivX・WMV等)【比較】
動画に使用されている有名な「動画コーデック」の種類と、それぞれの違いについて解説したいと思います。その前に!このページを読む前に、 「動画形式ってなに?」 「コーデックとコンテナってなに?」 「なにがどう違うの?」みたいに思っている人

 

有難うございました。m(__)m

 

 

 

トランジスタ技術2016年11月号

公式Piカメラの通常タイプ v2.1

公式Piカメラの赤外線対応(赤外線フィルタ無し)タイプ v2.1

新型Pi Zero(ver1.3)のセット

Pi Zero用カメラケーブル

コメント

  1. 林 伸夫 より:

    素晴らしい記事をありがとうござます。私はこの記事を参考にしてPi Zero Wを用いて実験してみました。オンボードの2.4GHz Wi-Fiでストリーミングしてみましたが、1920×1080 15fps、JPEG品質10でも途切れなく配信できるのに驚いています。すごくお安く、しかも満足すべき性能が出るネットワークカメラですね。
    当方3Dプリンターを持ち合わせていませんので、ラズパイ財団オフィシャルのケースに押し込んで使っています。SDカードの部分は削ってスリットを開け、無理やりメモリー交換可能にしました。
    ストリーミングのビットレートは21.4Mbps程度です。寒いせいかCPU温度は56.7度cくらいで安定しています。
    Raspberry PiのGPUにはH.264のハードエンコーダーが載ってるのでこれが使えるようになれば、もっと快適な利用状況になると思いますが、その辺の解が出てくるのを心待ちにしています。
    ご本家のmjpg-streamerチーム内でもその辺の開発が進んでいないようなので、やっぱり難しいんだろうなあ。

    • rin_ofumi rin_ofumi より:

      林さん コメント有難う御座います。

      mjpg-streamerでH.264ハードエンコーダーが使えると良いんですがねぇ・・・。
      上手く動かす方法はまだ追及出来てません。

      林さんは、Pi Zero Wをお使いなんですね~。
      ちなみに、私もPi Zero Wで新たなネットワークカメラを構築しております。
      新しいネットワークカメラシステムは録画前提になってますが、このブログ内にて投稿してますので、興味がおありであればそちらも参照頂けると幸いです。m(__)m