PythonでRasPi3の公式カメラモジュール V2.1からストリーミング配信

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

ラズベリーパイの公式サイトで、新しい公式のHDカメラモジュール「RaspberryPi Camera V.2.1」が発表されていたので、イベントのライブ配信をHDで手軽に行いたいと思いを購入しました。(ソニー製808万画素CMOSセンサを使用)

まずはRaspbianに標準で入っているシェル・コマンドのraspistillで動作確認後、raspividを使ってYoutubeのライブ配信を試してみたら簡単に出来た。(RaspberryPi3 ModeBでテスト)

では、次はPythonやPHPで出来ないものか調べてたら、Dave Jonesさんという猛者が、なんとraspividのラッパーでなくPythonだけでライブラリを作ったという公式の記事を発見。Youtubeへのライブ配信はこれからテストしてみるが、まずはストリーミング・サーバーとしてサクッと動いてしまったので、その手順。

ストリーミング・サーバのインストールと起動

出典元: https://github.com/waveform80/pistreaming

$ sudo apt-get install libav-tools git python3-picamera python3-ws4py
$ git clone https://github.com/waveform80/pistreaming.git
$ cd pistreaming
$ python3 server.py
Initializing websockets server on port 8084
Initializing HTTP server on port 8082
Initializing camera
Initializing broadcast thread
Spawning background conversion process
Starting websockets thread
Starting HTTP server thread
Starting broadcast thread

上記で、サーバーが起動したら、ChromeやFirefoxなどのモダン・ブラウザからhttp://<ラズパイのアドレス>:8082/にアクセスするとWebSocketを使ったHTML5による配信動画が見れます。


PYTHON PICAMERA(基本仕様の日本語訳)

python-picameraは、Pythonだけで作られたRaspberryPiカメラモジュール用のPython2(2.7以上)およびPython3(3.2以上)インターフェースで、Dave Jones氏によって作成・メンテナンスされています。

また、公式のカメラモジュールのセットアップも併せてご覧ください。(英語)

カメラを有効にする

sudo raspi-configで、本体設定画面のメニューからpi cameraを有効にし、再起動を行ってください。

インストール

python-picameraライブラリがRaspbianのアーカイブから利用できるので、aptを使ってインストールします。

sudo apt-get update
sudo apt-get install python-picamera

Python3のパッケージを使いたい場合は、sudo apt-get install python3-picameraを代わりに使います。

PiCameraのドキュメントをオフラインでも参照したい場合は、sudo apt-get install python-picamera-docsでインストール可能です。

基本的な使い方

Pythonのコマンド・プロンプトもしくは自作のスクリプトの冒頭に、下記コマンドで”picamera”ライブラリをインポートします。

import picamera

これでスクリプト内でライブラリが使えるようになるので、”PiCamera”クラスのインスタンスを生成します。

camera = picamera.PiCamera()

写真を撮るコマンドは下記の通り

camera.capture('/path/to/your/image.jpg')

画像の回転(縦・横をフリップ)させる

raspistillコマンドと同じように、画像上下や左右を反転させることができます。カメラの設置が、都合により天地が逆になっていたり、横置きにしないといけない場合に利用します。これはオプジェクトのhflipプロパティやvflipプロパティの値を直接変えることで可能です。

camera.hflip = True
camera.vflip = True

PythonはTrueの頭文字Tは大文字でないといけないことに注意してください。

プレビュー

下記メソッド(クラス関数)で、カメラのプレビューを表示させることができます。

camera.start_preview()

注意点として、現在のPythonセッションにオーバーレイ(手前のレイヤーに)表示されます。そのため、コマンド・プロンプトでプレビューを止めたい場合はCtrl+Dでセッションを終了させます。

メソッドで止める場合は、stop_previewを呼び出すと、プレビュー・オーバーレイが終了し、もとのディスプレイ表示に戻ります。

camera.stop_preview()

別の方法として、ラズパイにSSHで接続して、Pythonプロンプトから上記のコマンドを事項すると、SSH接続画面でなく、ラズパイ本体に接続したモニタ(ディスプレイ)上に表示されます。

カメラ設定

画像の回転同様、オブジェクトのプロパティ値を変更することで、カメラの諸設定を変更することができます。

例えば、次のサンプルは明度(明るさ)を初期値の50から70に変更します。(変更できる値の範囲は0-100です)

camera.brightness = 70

その他の一般的な設定項目と初期値は下記の通りです。

camera.sharpness = 0
camera.contrast = 0
camera.brightness = 50
camera.saturation = 0
camera.ISO = 0
camera.video_stabilization = False
camera.exposure_compensation = 0
camera.exposure_mode = 'auto'
camera.meter_mode = 'average'
camera.awb_mode = 'auto'
camera.image_effect = 'none'
camera.color_effects = None
camera.rotation = 0
camera.hflip = False
camera.vflip = False
camera.crop = (0.0, 0.0, 1.0, 1.0)

一時停止

timeモジュールのsleep関数で一時停止させることができます。

import picamera
from time import sleep

camera = picamera.PiCamera()

camera.capture('image1.jpg')
sleep(5)
camera.capture('image2.jpg')

また、プレビュー中にカメラ設定を変更する場合など、sleep関数を使って一時停止させることもできます。

camera.start_preview()

for i in range(100):
    camera.brightness = i
    sleep(0.2)

ビデオ録画

下記サンプルは、動画で5秒録画します。

camera.start_recording('video.h264')
sleep(5)
camera.stop_recording()

ドキュメント

python-picameraの完全なドキュメントは”picamera.readthedocs.org“で確認できます。

開発者・著作者

python-picameraプロジェクトは、Dave Jones氏によって作成され、 github.com/waveform80/picameraにて、議題を提案したりプロジェクトに参加できます。


raspividを使ったシェルスクリプト


スポンサーリンク
レクタングル(大)広告
レクタングル(大)広告

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存