このプロジェクトについて
インストールは pip install -U streamlit-webrtc で行います。基本的なアプリでは webrtc_streamer(key="sample") を呼び出します。key は必須の一意な識別子です。ユーザーが START を押し、カメラまたはマイクの使用を許可するとセッションが開始されます。
中心となる処理 API は video_frame_callback と audio_frame_callback です。コールバックは PyAV の av.VideoFrame または av.AudioFrame オブジェクトを受け取り、同じフレーム型を返す必要があります。フレームは NumPy 配列に変換し、OpenCV などのライブラリで処理してから元に戻せます。UI の値はクロージャを通じてコールバックに渡せます。一方、コールバックはフォークされたスレッドで実行されるため、コールバック内で生成したデータを共有する際は注意が必要です。ドキュメントでは、ロックやキューなどのスレッドセーフなコンテナを使い、Streamlit のメインスクリプトにポーリングループを設けることを推奨しています。コールバック内では Streamlit の st.* 呼び出しは動作しないため、共有状態は同期しなければなりません。
このコンポーネントは、WebRTC を停止したり再ネゴシエーションしたりせずにトラックを無効化できる、カメラとマイクのトグル操作を表示できます。映像を無効にすると黒フレームが送信され、音声を無効にすると無音が送信されます。on_video_ended と on_audio_ended は、トラックが停止したとき、ページが閉じられたとき、または接続が切断されたときのクリーンアップフックを提供します。ソーストラックとシンクトラック用のファクトリヘルパーは、オブジェクトを st.session_state にキャッシュし、WebRTC セッションまたは Streamlit セッションのライフサイクルスコープのいずれかをサポートします。関数ベースのコールバックが推奨 API です。旧来のクラスベースのプロセッサも引き続きサポートされていますが、将来のメジャーリリースで削除される予定です。
リモートにデプロイする場合、localhost 上を除き、ブラウザからメディアにアクセスするには HTTPS が必要です。WebRTC の接続には rtc_configuration を通じた STUN 設定も必要です。制限の厳しいネットワークやプロキシの背後では TURN が必要になる場合があります。README には Cloudflare Realtime TURN、Twilio、Open Relay、セルフホスト TURN の選択肢と、HTTPS またはトンネリングによる開発を支援する streamlit-remote について記載されています。ロギングには Python 標準の logging モジュールを使用します。プロジェクトの例には、物体検出、OpenCV フィルタ、音声処理、単方向映像、リアルタイム音声テキスト変換、スタイル変換、MediaPipe ポーズ推定、ビデオチャットが含まれます。API は v1.0 まで確定しないと説明されています。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.