# Workflow をデプロイ

Workflowは4つの方法でデプロイできます:

1. 画像を [Roboflow API](https://inference.roboflow.com/workflows/modes_of_running/#http-api-request) に送信して、Workflowで処理します。
2. を作成します [Roboflow Dedicated Deployment](https://docs.roboflow.com/roboflow/roboflow-jp/deploy/dedicated-deployments) を、専用に用意されたインフラ上で使用します。
3. 以下を使用して、独自のハードウェア上でWorkflowを実行します [Roboflow Inference](https://inference.roboflow.com/install/).
4. を使用します [Batch Processing](https://docs.roboflow.com/roboflow/roboflow-jp/deploy/batch-processing) を使って、大量のデータをコーディングコストを抑えて効率的に処理します。

独自のハードウェア上でWorkflowを実行する場合、通常の **webcams** および業務用の **CCTV cameras**).

からのストリームを含む、画像と動画ファイルの両方で実行できます。オンプレミスのデプロイを選択すると、InferenceをデプロイできるあらゆるシステムでWorkflowを実行できます。これには以下が含まれます:

* NVIDIA Jetson
* AWS EC2、GCP Cloud Engine、Azure Virtual Machines
* Raspberry Pi

{% hint style="info" %}
Roboflow Enterpriseのお客様は、Baslerカメラでの推論実行など、追加のビデオストリームオプションをご利用いただけます。提供内容の詳細については、 [Roboflowの営業チームにお問い合わせください](https://roboflow.com/sales).
{% endhint %}

### Workflowをデプロイする

Workflowをデプロイするには、Workflowsエディタの左上にある「Deploy」ボタンをクリックします。すべてのデプロイオプションはこのページに記載されています。

Workflowsエディタ内のコードスニペットには、WorkflowsのURLとAPIキーがあらかじめ入力されています。

{% hint style="info" %}
Workflowsの使用制限の詳細については、 [Roboflowの料金ページ](https://roboflow.com/workflows).
{% endhint %}

#### 画像を処理する

Roboflow APIまたはローカルのInference serverを使用して、単一の画像でWorkflowを実行できます。

まず、Roboflow Inference SDKをインストールします:

```python
pip install inference-sdk inference-cli 
```

ローカルで実行する場合は、 [公式のDockerインストール手順](https://docs.docker.com/get-docker/) に従って、マシンにDockerをインストールし、Inference serverを起動してください:

```
inference server start
```

次に、新しいPythonファイルを作成し、以下のコードを追加します:

```python
from inference_sdk import InferenceHTTPClient

client = InferenceHTTPClient(
    api_url="https://detect.roboflow.com",  # ローカルデプロイの場合は "http://127.0.0.1:9001"
    api_key="API_KEY"
)

result = client.run_workflow(
    workspace_name="workspace-name",
    workflow_id="workflow-id",
    images={
        "image": "YOUR_IMAGE.jpg"
    }
)

```

上記の `API_KEY` をRoboflow APIキーに置き換えてください。 `workspace-name` および `workflow-id` を、Roboflowのワークスペース名とWorkflow IDに置き換えてください。

これらの値を見つけるには、Roboflow Workflowを開き、「Deploy Workflow」をクリックします。次に、ページに表示されるコードスニペットからワークスペース名とWorkflow IDをコピーしてください。

ローカル実行はCPUおよびNVIDIA CUDA GPUデバイスで動作します。最適なパフォーマンスを得るには、NVIDIA JetsonやNVIDIA GPUを搭載したクラウドサーバーなど、GPU対応デバイスにデプロイしてください。

#### ビデオストリームを処理する（RTSP、Webcam）

ビデオストリームのフレーム上でWorkflowをデプロイできます。WebcamやRTSPストリームを使用できます。また、動画ファイル上でWorkflowを実行することもできます。

まず、Inferenceをインストールします:

```
pip install inference  # GPUマシンでは inference-gpu でも可
```

Inferenceのインストールには数分かかる場合があります。

次に、新しいPythonファイルを作成し、以下のコードを追加します:

```python
# InferencePipelineオブジェクトをインポート
from inference import InferencePipeline

def my_sink(result, video_frame):
    print(result) # 各フレームの予測結果を使って何かを行う
    

# パイプラインオブジェクトを初期化
pipeline = InferencePipeline.init_with_workflow(
    api_key="API_KEY",
    workspace_name="workspace-name",
    workflow_id="workflow-id",
    video_reference=0, # 動画へのパス、RSTPストリーム、デバイスID（int、通常は内蔵Webcamの場合0）、またはRTSPストリームURL
    on_prediction=my_sink
)
pipeline.start() # パイプラインを開始
pipeline.join() # パイプラインスレッドの終了を待機

```

上記の `API_KEY` をRoboflow APIキーに置き換えてください。 `workspace-name` および `workflow-id` を、Roboflowのワークスペース名とWorkflow IDに置き換えてください。

これらの値を見つけるには、Roboflow Workflowを開き、「Deploy Workflow」をクリックします。次に、ページに表示されるコードスニペットからワークスペース名とWorkflow IDをコピーしてください。

上記のコードを実行すると、Workflowは動画または動画ストリーム上で実行されます。

#### データのバッチを処理する

Roboflow Batch Processingサービスを使用すると、画像ディレクトリや動画ファイルなど、データのバッチ全体を効率的に処理できます。この完全管理型ソリューションでは、コーディングやローカルでの計算は不要です。データとWorkflowを選択するだけで、あとはRoboflowが処理します。

Batch Processingでは、UI、CLI、REST APIのいずれの操作にも対応しています。以下ではCLIコマンドを紹介します。 [すべてのオプション](https://inference.roboflow.com/workflows/batch_processing/about/#cli).

処理を実行するには、Inference CLIをインストールします:

```
pip install inference-cli
```

次に、データを取り込みます:

```
inference rf-cloud data-staging create-batch-of-images \
    --images-dir <your-images-dir-path> \
    --batch-id <your-batch-id>
```

データが読み込まれたら、処理ジョブを開始します:

```
inference rf-cloud batch-processing process-images-with-workflow \
    --workflow-id <workflow-id> \
    --batch-id <batch-id>
```

ジョブの進行状況は以下で表示できます:

```
inference rf-cloud batch-processing show-job-details \
    --job-id <your-job-id>  # job-idはジョブ作成時に表示されます
```

ジョブが完了したら、結果をエクスポートします:

```
inference rf-cloud data-staging export-batch \
    --target-dir <dir-to-export-result> \
    --batch-id <output-batch-of-a-job>
```
