diff --git a/.github/workflows/build-rk.yml b/.github/workflows/build-rk.yml new file mode 100644 index 000000000..c0dfad247 --- /dev/null +++ b/.github/workflows/build-rk.yml @@ -0,0 +1,66 @@ +name: Build Rockchip + +on: + workflow_dispatch: + push: + branches: + - dev + - fix-rk3588s-support + +concurrency: + group: ${{ github.ref }} + cancel-in-progress: true + +jobs: + rockchip_build: + runs-on: ubuntu-latest + name: Build Rockchip Image + permissions: + contents: read + packages: write + steps: + - name: Check out code + uses: actions/checkout@v4 + + - id: lowercaseRepo + uses: ASzc/change-string-case-action@v6 + with: + string: ${{ github.repository }} + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Create version file + run: make version + + - name: Create short sha + id: sha + run: echo "SHORT_SHA=${GITHUB_SHA::7}" >> $GITHUB_OUTPUT + + - name: Build and push Rockchip image + uses: docker/bake-action@v5 + with: + push: true + targets: rk + files: docker/rockchip/rk.hcl + set: | + rk.tags=ghcr.io/${{ steps.lowercaseRepo.outputs.lowercase }}:${{ steps.sha.outputs.SHORT_SHA }}-rk + rk.tags=ghcr.io/${{ steps.lowercaseRepo.outputs.lowercase }}:latest-rk + *.cache-from=type=gha + *.cache-to=type=gha,mode=max + + - name: Show image tags + run: | + echo "Images published:" + echo " ghcr.io/${{ steps.lowercaseRepo.outputs.lowercase }}:${{ steps.sha.outputs.SHORT_SHA }}-rk" + echo " ghcr.io/${{ steps.lowercaseRepo.outputs.lowercase }}:latest-rk" diff --git a/docs/docs/configuration/object_detectors.md b/docs/docs/configuration/object_detectors.md index 81e81e821..4f4406514 100644 --- a/docs/docs/configuration/object_detectors.md +++ b/docs/docs/configuration/object_detectors.md @@ -1356,7 +1356,7 @@ To convert a onnx model to the rknn format using the [rknn-toolkit2](https://git This is an example configuration file that you need to adjust to your specific onnx model: ```yaml -soc: ["rk3562", "rk3566", "rk3568", "rk3576", "rk3588"] +soc: ["rk3562", "rk3566", "rk3568", "rk3576", "rk3588", "rk3588s"] quantization: false output_name: "{input_basename}" diff --git a/docs/docs/frigate/hardware.md b/docs/docs/frigate/hardware.md index 8fd972aa7..2c310fb87 100644 --- a/docs/docs/frigate/hardware.md +++ b/docs/docs/frigate/hardware.md @@ -271,6 +271,7 @@ Frigate supports hardware video processing on all Rockchip boards. However, hard - RK3568 - RK3576 - RK3588 +- RK3588S | Name | YOLOv9 Inference Time | YOLO-NAS Inference Time | YOLOx Inference Time | | -------------- | --------------------- | --------------------------- | ----------------------- | diff --git a/frigate/const.py b/frigate/const.py index 6b1e227d5..3d373bfb2 100644 --- a/frigate/const.py +++ b/frigate/const.py @@ -79,7 +79,7 @@ FFMPEG_HWACCEL_AMF = "preset-amd-amf" FFMPEG_HVC1_ARGS = ["-tag:v", "hvc1"] # RKNN constants -SUPPORTED_RK_SOCS = ["rk3562", "rk3566", "rk3568", "rk3576", "rk3588"] +SUPPORTED_RK_SOCS = ["rk3562", "rk3566", "rk3568", "rk3576", "rk3588", "rk3588s"] # Regex constants diff --git a/frigate/detectors/plugins/rknn.py b/frigate/detectors/plugins/rknn.py index 15ab93dcb..6bde44715 100644 --- a/frigate/detectors/plugins/rknn.py +++ b/frigate/detectors/plugins/rknn.py @@ -102,6 +102,9 @@ class Rknn(DetectionApi): def parse_model_input(self, model_path, soc): model_props = {} + # Map rk3588s to rk3588 for model compatibility + model_soc = "rk3588" if soc == "rk3588s" else soc + # find out if user provides his own model # user provided models should be a path and contain a "/" if "/" in model_path: @@ -158,7 +161,7 @@ class Rknn(DetectionApi): model_props["model_type"] = model_type if model_matched: - model_props["filename"] = model_path + f"-{soc}-v2.3.2-2.rknn" + model_props["filename"] = model_path + f"-{model_soc}-v2.3.2-2.rknn" model_props["path"] = model_cache_dir + model_props["filename"] diff --git a/frigate/util/rknn_converter.py b/frigate/util/rknn_converter.py index 5660c7601..34f12987d 100644 --- a/frigate/util/rknn_converter.py +++ b/frigate/util/rknn_converter.py @@ -190,13 +190,16 @@ def convert_onnx_to_rknn( logger.debug("Could not determine SoC type") return False + # Map rk3588s to rk3588 for RKNN toolkit compatibility + target_soc = "rk3588" if soc == "rk3588s" else soc + # Get model config for the specified type if model_type not in MODEL_TYPE_CONFIGS: logger.debug(f"Unsupported model type: {model_type}") return False config = MODEL_TYPE_CONFIGS[model_type].copy() - config["target_platform"] = soc + config["target_platform"] = target_soc # RKNN toolkit requires .onnx extension, create temporary copy if needed temp_onnx_path = None