読者です 読者をやめる 読者になる 読者になる

Raspberry Piのカメラモジュール V1とV2を比較してみました

Raspberry Pi カメラモジュール V2

 もう2ヶ月くらい前になりますが、Raspberry Pi Camera Module V2が発売されました。V1のカメラのセンサOmniVision OV5647のディスコンを受けてSony製センサのIMX219に変更となっています。画素数は500万画素から800万画素に向上していますし、ソニー製センサということで、性能向上も期待できそうというわけで、一度比較してみることにしました。

Raspberry Pi カメラモジュール V1 V2比較

外観

 まずは外観から。V1の方はRev 1.3 V2の方はV2.1のシルクが印字されているので確実に見分けられますね。パッと見もレンズと基板の接続部がV1は黄色なのに対してV2は黒いです。ちなみにこの接続部がカメラの上側になります。 f:id:karaage:20160704223148j:plain:w640

撮影比較

 撮影対象としてミクさんを使いました。以下のような形で同じ箇所から撮影して比較しています。

f:id:karaage:20160704230151j:plain:w640  ミクさんかわいい

 今回はRaspistillというRaspbian標準のコマンドと、自作のpythonスクリプトの両方で試してみました。Raspistillのコマンドは以下。

$ raspistill -o test.jpg

 pythonスクリプトのソースコードshutter.pyは以下。

# -*- coding: utf-8 -*-
import subprocess
import picamera
import os
from time import sleep

shutter_numb = 0
photo_dir = os.path.expanduser('~/photo_data')

def cameraLoad():
    global shutter_numb
    filename = os.path.join(photo_dir, 'camera.set')
    try:
        fp = open(filename)
        tmp_shutter_numb = fp.readlines()
        tmp2_shutter_numb = tmp_shutter_numb[0].rstrip()
        shutter_numb = int(tmp2_shutter_numb)
        fp.close()
    except IOError:
        print 'no camera.set data, make set files'

def cameraSave():
    filename = os.path.join(photo_dir, 'camera.set')
    fp = open(filename, 'w')
    fp.write(str(shutter_numb))
    fp.close()

def shutter():
    global shutter_numb
    shutter_numb +=1

    filename = os.path.join(photo_dir, str("{0:06d}".format(shutter_numb)) + '.jpg')
    photofile = open(filename, 'wb')
    print(photofile)

    with picamera.PiCamera() as camera:
        camera.resolution = (2592,1944)
        camera.start_preview()
        sleep(1.000)
        camera.capture(photofile)

    photofile.close()

if __name__ == '__main__':
    cameraLoad()
    shutter()
    cameraSave()

 以下でファイルを保存するディレクトリ作成して

$ mkdir ~/photo_data

 以下コマンドで撮影。

$ python shutter.py
カメラモジュール V1

f:id:karaage:20160704223016j:plain:w640  Raspistill

f:id:karaage:20160704223328j:plain:w640  pythonスクリプト

 ふむ大体同じ感じ

カメラモジュール V2

f:id:karaage:20160704223649j:plain:w640  Raspistill

f:id:karaage:20160704223722j:plain:w640  pythonスクリプト

 V1より広角気味ですね。そして、pythonスクリプトで撮影した方はなんか色が変です。ホワイトバランス?念のためホワイトバランス安定期間(Preview後のスリープ時間)を5sくらいまで長くしたり、解像度とV2カメラに合わせたりしてみたのですが効果無しでした。何故…

画角確認

 V1とV2で画角どの程度違うのか確認するため、OM-D E-M5とM.ZUIKO DIGITAL ED 9-18mm F4.0-5.6で同じ箇所から撮影して、同じ画角になる焦点距離を探ってみました。

f:id:karaage:20160704230534j:plain:w640  15mmでV1の水平方向の画角に近くなりました

f:id:karaage:20160704230602j:plain:w640  12mmでV2の水平方向の画角に近くなりました

 OM-D E-M5はマイクロフォーサーズセンサなので、35mm換算だと焦点距離は2倍なのでV1は約30mm、V2は約24mmといったところでしょうか。V2の方がかなり広角ですね。ちなみにRaspberry Cameraモジュールのセンササイズは1/4インチらしいので3.67mmx2.74で35mmフルサイズセンサの約1/10。ExifデータによるとV1の焦点距離が3.6mm, V2が3mmのようなので、数字上は35mm換算だとV1は36mmでV2が30mm。V2の方が広角なのは同じですが、結構数字がOM-D E-M5での測定結果とずれますね。測定の仕方が悪いのか、何かデータに誤りがあるのか…

 センササイズと画角の関係に関して、詳しく知りたい人は下記参照下さい。

追記(2016/08/23)

 Interface誌 2016年9月号でラズパイ・カメラ2の特集記事がありました。特集の情報によると、レンズの画角はV1.3が35mm換算で35mm、V2.1が35mm換算で29mmがスペックでほぼ私がセンササイズから計算した理論値通りですね。実測の方法がいい加減過ぎるのかもしれませんね。

 Interface誌の特集、カメラの性能評価やソニー技術者の裏話、フォーカスの調整方法等読み応えありましたので、興味ある方は購入してみてもよいかなと思います。

Interface(インターフェース) 2016年09月号

Interface(インターフェース) 2016年09月号

まとめ

 気になっていたRaspberry PiカメラモジュールのV1とV2の比較しました。ただ、V2だとraspistillとpythonのスクリプトで出てくる絵が全然違ったり、画角が計算と合わなかったりと色々謎が深まるばかりでした。

 そして、以前V2のカメラだと何故か画像が反転してしまうという謎の現象に悩んでいたのですが、今回は再現しませんでした。どうも、どこかのソフトアップデートのタイミングで問題解消していたようです。もし画像反転している人は、sudo apt-get upgradesudo rpi-upgradeあたりを実行すればなおるのじゃないかなと思います。

参考リンク

Raspberry Pi Camera Module V2.1がリリース | Japanese Raspberry Pi Users Group

raspistill - Raspberry Pi Documentation

Raspberry Pi メモ (23) - カメラモジュールの使い方

IMX219仕様