Sora Python SDK for Raspberry Pi¶
Sora Python SDK は Raspberry Pi OS (64 bit) 向けに通常とは異なるパッケージを提供しています。
これは Raspberry Pi の H.264 ハードウェアアクセラレーターや libcamera を利用するためです。
インストール¶
# Raspberry Pi OS (64 bit) 向けの sora-sdk をインストールする
uv add sora-sdk-rpi
利用方法¶
Raspberry Pi OS (64 bit) 向けの sora-sdk-rpi をインストールした後は、通常の sora-sdk と同じように利用できます。
V4L2-M2M 経由でのハードウェアアクセラレーターの利用¶
Sora Python SDK for Raspberry Pi は Raspberry Pi に搭載されている H.264 ハードウェアアクセラレーターを利用することができます。
video_codec_preference = SoraVideoCodecPreference(
codecs=[
# Raspberry Pi 5 には H.264 ハードウェアアクセラレーターが搭載されていません。
SoraVideoCodecPreference.Codec(
# H.264 を指定します
type=SoraVideoCodecType.H264,
# encoder と decoder に V4L2 M2M を指定します
encoder=SoraVideoCodecImplementation.RASPI_V4L2M2M,
decoder=SoraVideoCodecImplementation.RASPI_V4L2M2M,
),
],
)
libcamera の利用¶
Raspberry Pi Camera を利用する場合は libcamera を利用する必要があります。 Sora Python SDK for Raspberry Pi では libcamera を利用するためのライブラリを提供しています。
sora = Sora(
video_codec_preference=video_codec_preference,
# native_frame_output=True を指定する場合 force_i420_conversion=False を指定します
force_i420_conversion=False,
)
# libcamera を利用するには create_libcamera_source
video_source = sora.create_libcamera_source(
width=1280,
height=720,
fps=30,
# native_frame_output=True を指定すると libcamera から直接 I420 フォーマットのフレームが取得できます。
native_frame_output=True,
# libcamera のオートフォーカスを有効にする。
# libcamera-controls をタプル形式で指定出来ます
controls=[("AsFocusMode", "1")],
)
libcamera コントロール¶
libcamera は 75 以上のカメラパラメーターを提供しています。 Sora Python SDK for Raspberry Pi の create_libcamera_source では controls で libcamera コントロールを指定する事が出来ます。
指定方法¶
[tuple[str, str]]の形式で指定します[("AsFocusMode", "1"), ("AeEnable", "1")]のように複数指定できます- 値は数字やブーリアンでも文字列で指定してください
AsFocusModeのように数値を指定する場合も"1"と文字列で指定してください
対応している値の形式¶
基本型¶
- bool:
"0"または"1"、"true"または"false"[("AeEnable", "1")] [("AeEnable", "true")] - int32: 整数値
[("ExposureTime", "10000")] - int64: 長整数値
[("FrameDuration", "33333")] - float: 小数値
[("AnalogueGain", "2.0")] [("Brightness", "-0.5")] enum: 文字列または数値(主要な enum のみ文字列対応)
[("AfMode", "Continuous")] # または [("AfMode", "2")]文字列対応済みの enum:
AfMode,AfRange,AfSpeedAeMeteringModeAwbModeExposureTimeMode,AnalogueGainMode
複合型¶
配列: カンマ区切り
[("ColourGains", "1.5,2.0")] [("FrameDurationLimits", "33333,33333")]対応済み:
float[],int32[],int64[]- 矩形(Rectangle): x,y,width,height
[("ScalerCrop", "100,100,640,480")] - 複数矩形: セミコロン区切り
[("AfWindows", "100,100,200,200;300,300,200,200")] - マトリクス: カンマ区切り(行優先)(未対応)
[("ColourCorrectionMatrix", "1.0,0,0,0,1.0,0,0,0,1.0")]
未対応の型¶
- Size 型
- Point 型
- マトリクス型(3x3 など)
- その他の複雑な構造体
主要なコントロール¶
露出制御(AE: Auto Exposure)¶
コントロール |
型 |
説明 |
値の例 |
|---|---|---|---|
AeEnable |
bool |
自動露出の有効/無効 |
"0", "1" |
ExposureTime |
int32 |
露出時間(マイクロ秒) |
10000 (1/100秒) |
AnalogueGain |
float |
アナログゲイン(1.0以上) |
2.0 |
ExposureTimeMode |
enum |
露出時間モード |
Auto, Manual |
AnalogueGainMode |
enum |
ゲインモード |
Auto, Manual |
AeMeteringMode |
enum |
測光モード |
CentreWeighted, Spot, Matrix |
ExposureValue |
float |
EV補正値 |
-2.0 〜 2.0 |
オートフォーカス(AF)¶
コントロール |
型 |
説明 |
値の例 |
|---|---|---|---|
AfMode |
enum |
AFモード |
Manual, Auto, Continuous |
AfRange |
enum |
フォーカス範囲 |
Normal, Macro, Full |
AfSpeed |
enum |
フォーカス速度 |
Normal, Fast |
AfTrigger |
enum |
AFトリガー |
Start, Cancel |
AfWindows |
Rectangle[] |
AFエリア |
"256,192,512,384" |
LensPosition |
float |
レンズ位置(ジオプター) |
2.0 |
ホワイトバランス(AWB)¶
コントロール |
型 |
説明 |
値の例 |
|---|---|---|---|
AwbEnable |
bool |
AWBの有効/無効 |
"0", "1" |
AwbMode |
enum |
AWBモード |
Auto, Daylight, Cloudy, Tungsten |
ColourTemperature |
int32 |
色温度(ケルビン) |
5500 |
ColourGains |
float[2] |
赤・青ゲイン |
1.5,2.0 |
画質調整¶
コントロール |
型 |
説明 |
値の例 |
|---|---|---|---|
Brightness |
float |
明るさ |
-1.0 〜 1.0 |
Contrast |
float |
コントラスト |
1.0(標準) |
Saturation |
float |
彩度 |
1.0(標準), 0.0(モノクロ) |
Sharpness |
float |
シャープネス |
0.0 〜 10.0 |
Gamma |
float |
ガンマ値 |
2.2(標準) |
フレームレート制御¶
コントロール |
型 |
説明 |
値の例 |
|---|---|---|---|
FrameDurationLimits |
int64[2] |
フレーム時間の最小/最大(マイクロ秒) |
33333,33333 (30fps固定) |
enum 値一覧¶
AfMode(オートフォーカスモード)¶
- 手動フォーカス
-
Manualまたは"0" - シングルAF(一度フォーカスして停止)
-
Autoまたは"1" - コンティニュアスAF
-
Continuousまたは"2"
AfRange(フォーカス範囲)¶
- 通常範囲
-
Normalまたは"0" - マクロ(接写)
-
Macroまたは"1" - フルレンジ
-
Fullまたは"2"
AfSpeed(フォーカス速度)¶
- 通常速度
-
Normalまたは"0" - 高速
-
Fastまたは"1"
ExposureTimeMode / AnalogueGainMode¶
- 自動
-
Autoまたは"0" - 手動
-
Manualまたは"1"
AeMeteringMode(測光モード)¶
- 中央重点測光
-
CentreWeightedまたは"0" - スポット測光
-
Spotまたは"1" - マトリックス測光
-
Matrixまたは"2"
AwbMode(ホワイトバランスモード)¶
- 自動
-
Autoまたは"0" - 白熱灯
-
Incandescentまたは"1" - タングステン
-
Tungstenまたは"2" - 蛍光灯
-
Fluorescentまたは"3" - 屋内
-
Indoorまたは"4" - 昼光
-
Daylightまたは"5" - 曇天
-
Cloudyまたは"6"
HdrMode(HDRモード)¶
- 無効
-
Offまたは"0" - 複数露出(未合成)
-
MultiExposureUnmergedまたは"1" - 複数露出(合成)
-
MultiExposureまたは"2" - 単一露出HDR
-
SingleExposureまたは"3" - ナイトモード
-
Nightまたは"4"
controls 指定例¶
例1: 明るい屋外での撮影設定¶
controls=[
("AeEnable", "1"),
("AeExposureMode", "Short"),
("AwbMode", "Daylight"),
("Contrast", "1.2"),
]
例2: 暗所での撮影設定¶
controls=[
("ExposureTimeMode", "Manual"),
("ExposureTime", "50000"),
("AnalogueGain", "8.0"),
("NoiseReductionMode", "HighQuality"),
]
例3: マクロ撮影設定¶
controls=[
("AfMode", "Continuous"),
("AfRange", "Macro"),
("AfSpeed", "Normal"),
("Sharpness", "2.0"),
]
例4: フレームレート固定(30fps)¶
controls=[
("FrameDurationLimits", "33333,33333"),
]
例5: 手動設定での完全制御¶
controls=[
("AeEnable", "0"),
("AwbEnable", "0"),
("ExposureTime", "20000"),
("AnalogueGain", "4.0"),
("ColourGains", "1.8,1.5"),
("AfMode", "Manual"),
("LensPosition", "2.0"),
]
サンプル¶
V4L2 M2M で H.264 を指定し、 libcamera を利用したサンプルコードです。
from sora_sdk import (
Sora,
SoraVideoCodecImplementation,
SoraVideoCodecPreference,
SoraVideoCodecType,
)
def main():
signaling_urls = ["wss://sora.example.com/signaling"]
video_codec_preference = SoraVideoCodecPreference(
codecs=[
# Raspberry Pi 5 には H.264 ハードウェアアクセラレーターが搭載されていません。
SoraVideoCodecPreference.Codec(
type=SoraVideoCodecType.H264,
encoder=SoraVideoCodecImplementation.RASPI_V4L2M2M,
decoder=SoraVideoCodecImplementation.RASPI_V4L2M2M,
),
],
)
sora = Sora(
video_codec_preference=video_codec_preference,
# native_frame_output=True を指定する場合は force_i420_conversion=False を指定する必要があります。
force_i420_conversion=False,
)
video_source = sora.create_libcamera_source(
width=1280,
height=720,
fps=30,
# native_frame_output=True を指定すると、libcamera から直接 I420 フォーマットのフレームが取得できます。
native_frame_output=True,
# libcamera のオートフォーカスを有効にする。
controls=[("AsFocusMode", "1")],
)
# V4L2 M2M による H.264 と libcamera を利用して Sora に接続して映像を送信する。
sora.create_connection(
signaling_urls=signaling_urls,
role="sendonly",
channel_id="raspberry-pi",
video=True,
video_codec_type="H264",
video_source=video_source,
)