# 与 Roboflow 集成

Roboflow 是一个用于构建和部署自定义计算机视觉模型的工具。当与 Luxonis OAK 设备结合使用时，可以高效地部署各种模型。

> 请注意，目前我们在 OAK 设备上部署 Roboflow 模型时仅支持目标检测任务。

## 安装

要部署您的模型，您需要安装 roboflowoak、depthai 和 opencv-python：

```bash
pip install roboflowoak
pip install depthai
pip install opencv-python
```

## 从 Roboflow 部署模型

按照以下示例，在 OAK 设备上部署您的 Roboflow 目标检测模型。请注意，您需要修改某些参数以适配您的特定模型和需求：

 * model: 替换为 Roboflow 中您的模型 ID。
 * version: 填写您模型的具体版本号。
 * api_key: 使用 Roboflow 为您的账户提供的私有 API 密钥。

```python
from roboflowoak import RoboflowOak
import cv2
import time
import numpy as np

if __name__ == '__main__':
    # 使用 RoboflowOak 模块实例化一个对象 (rf)
    rf = RoboflowOak(model="YOUR-MODEL-ID", confidence=0.05, overlap=0.5,
    version="YOUR-MODEL-VERSION-#", api_key="YOUR-PRIVATE_API_KEY", rgb=True,
    depth=True, device=None, blocking=True)
    # 运行模型并显示带有检测结果的视频输出
    while True:
        t0 = time.time()
        # rf.detect() 函数执行模型推理
        result, frame, raw_frame, depth = rf.detect()
        predictions = result["predictions"]
        # {
        #     predictions:
        #     [ {
        #         x: (中心),
        #         y: (中心),
        #         width:
        #         height:
        #         depth: ###->
        #         confidence:
        #         class:
        #         mask: {
        #     ]
        # }
        # frame - 经过预处理后的帧，带有预测结果
        # raw_frame - 来自 OAK 的原始帧
        # depth - raw_frame 的深度图，已中心校正至中央摄像头
        
        # 计时：用于基准测试
        t = time.time()-t0
        print("FPS ", 1/t)
        print("PREDICTIONS ", [p.json() for p in predictions])

        # 设置深度计算参数
        # 如果使用的是不带深度的 OAK，请注释掉以下两行
        max_depth = np.amax(depth)
        cv2.imshow("depth", depth/max_depth)
        # 将视频流显示为连续帧
        cv2.imshow("frame", frame)
    
        # 如何关闭 OAK 推理窗口/停止推理：CTRL+q 或 CTRL+c
        if cv2.waitKey(1) == ord('q'):
            break
```

更多信息，请参考官方 Roboflow 教程，详见 [此处](https://docs.roboflow.com/deploy/luxonis-oak)。
