Web inference-sdk
inference-sdk を使用してブラウザから Roboflow クラウドでリアルタイム動画推論を実行します
WebRTCストリーミングとは何ですか?
@roboflow/inference-sdk はWebRTCを使用してブラウザからRoboflowの推論サーバーへリアルタイムのビデオストリーミングを可能にします。これにより次のことができます:
ワークフローを実行 - 複雑なマルチステップのコンピュータビジョンパイプラインを実行する
すべてのモデルにアクセス - 任意のRoboflowモデルタイプを使用する
サーバーサイド処理 - 強力なGPUを活用する
低レイテンシ - WebRTCはほぼリアルタイムの結果を提供します
双方向通信 - ストリーミング中にデータを送受信する
インストール
npm install @roboflow/inference-sdkクイックスタート
開始するには下のビデオ/サンプルコードを参照してください:
import { connectors, webrtc, streams } from '@roboflow/inference-sdk';
// ⚠️ 開発時のみ withApiKey を使用してください
// ⚠️ 本番環境でこれを使用しないでください。APIキーが漏洩します
// 本番ではバックエンドプロキシを使用してください(次のセクション参照)
const connector = connectors.withApiKey("your-api-key");
// カメラストリームを取得
const stream = await streams.useCamera({
video: {
facingMode: { ideal: "environment" },
width: { ideal: 640 },
height: { ideal: 480 }
}
});
// WebRTC接続を開始
const connection = await webrtc.useStream({
source: stream,
connector,
wrtcParams: {
workspaceName: "your-workspace",
workflowId: "your-workflow",
imageInputName: "image",
streamOutputNames: ["output"],
dataOutputNames: ["predictions"]
},
onData: (data) => {
console.log("Inference results:", data);
}
});
// 処理済みビデオを表示
const videoElement = document.getElementById('video');
videoElement.srcObject = await connection.remoteStream();
// 対応が終わったらクリーンアップ
await connection.cleanup();🔐 セキュリティのベストプラクティス
本番アプリケーションのフロントエンドコードにAPIキーを決して公開しないでください。
The connectors.withApiKey() メソッドはデモでは便利ですが、ブラウザ内でAPIキーを公開してしまいます。 本番では常にバックエンドプロキシを使用してください:
安全な本番パターン
フロントエンド:
import { connectors, webrtc, streams } from '@roboflow/inference-sdk';
// 直接APIキーを使う代わりにプロキシエンドポイントを使用
const connector = connectors.withProxyUrl('/api/init-webrtc');
const stream = await streams.useCamera({ video: true });
const connection = await webrtc.useStream({
source: stream,
connector,
wrtcParams: { /* ... */ }
});バックエンド(Express):
import { InferenceHTTPClient } from '@roboflow/inference-sdk/api';
app.post('/api/init-webrtc', async (req, res) => {
const { offer, wrtcparams } = req.body;
// APIキーはサーバー上で安全に保たれます
const client = InferenceHTTPClient.init({
apiKey: process.env.ROBOFLOW_API_KEY
});
const answer = await client.initializeWebrtcWorker({
offer,
workspaceName: wrtcparams.workspaceName,
workflowId: wrtcparams.workflowId,
config: {
imageInputName: wrtcparams.imageInputName,
streamOutputNames: wrtcparams.streamOutputNames,
dataOutputNames: wrtcparams.dataOutputNames
}
});
res.json(answer);
});主な機能
動的な出力再構成
再起動せずに実行時にストリームおよびデータ出力を変更できます:
// 別の可視化に切り替え
connection.reconfigureOutputs({
streamOutput: ["blur_visualization"]
});
// すべてのデータ出力を有効にする
connection.reconfigureOutputs({
dataOutput: ["*"]
});
// 両方を同時に変更
connection.reconfigureOutputs({
streamOutput: ["annotated_image"],
dataOutput: ["predictions", "counts"]
});完全な動作例
フロントエンドとバックエンドの両方のコードを含む完全な動作例については、以下を参照してください: サンプルアプリケーションリポジトリ. サンプルアプリは以下を示します:
APIキーのセキュリティのための適切なバックエンドプロキシ設定
カメラストリーミングの統合
エラーハンドリングと接続管理
本番対応のパターン
リソース
Last updated
Was this helpful?