From 27cb69c094dedb7b89dbaadf883f61a7340089f2 Mon Sep 17 00:00:00 2001 From: Christopher Mahoney Date: Sat, 21 Sep 2024 16:08:00 -0400 Subject: [PATCH 1/7] Support selecting Object Detection models (#1359) This PR is for part 1 of #1354. It focuses on adding a model selection interface for models that exist in `photonvision_config/models/`. Upon completion we can ship more than 1 model and users could upload their own through `ssh` without deleting the shipped model. This PR also adds the abstractions need to support more DNN backends (say OpenCV, or RPI AI Kit) Up next is adding a CRUD interface for managing models through the UI. --- .../dashboard/CameraAndPipelineSelectCard.vue | 4 +- .../dashboard/tabs/ObjectDetectionTab.vue | 27 +- .../stores/settings/GeneralSettingsStore.ts | 6 +- photon-client/src/types/PipelineTypes.ts | 4 +- photon-client/src/types/SettingTypes.ts | 3 +- .../NeuralNetworkModelManager.java | 297 +++++++++++++++--- .../configuration/PhotonConfiguration.java | 5 +- .../org/photonvision/jni/RknnDetectorJNI.java | 96 ------ .../photonvision/jni/RknnObjectDetector.java | 147 +++++++++ .../vision/objects/Letterbox.java | 105 +++++++ .../photonvision/vision/objects/Model.java | 24 ++ .../vision/objects/NullModel.java | 67 ++++ .../vision/objects/ObjectDetector.java | 60 ++++ .../vision/objects/RknnModel.java | 91 ++++++ .../vision/pipe/impl/ObjectDetectionPipe.java | 75 +++++ .../vision/pipe/impl/RknnDetectionPipe.java | 153 --------- .../pipeline/ObjectDetectionPipeline.java | 36 ++- .../ObjectDetectionPipelineSettings.java | 6 + .../src/main/java/org/photonvision/Main.java | 9 +- ...v5.txt => note-640-640-yolov5s-labels.txt} | 0 20 files changed, 895 insertions(+), 320 deletions(-) create mode 100644 photon-core/src/main/java/org/photonvision/jni/RknnObjectDetector.java create mode 100644 photon-core/src/main/java/org/photonvision/vision/objects/Letterbox.java create mode 100644 photon-core/src/main/java/org/photonvision/vision/objects/Model.java create mode 100644 photon-core/src/main/java/org/photonvision/vision/objects/NullModel.java create mode 100644 photon-core/src/main/java/org/photonvision/vision/objects/ObjectDetector.java create mode 100644 photon-core/src/main/java/org/photonvision/vision/objects/RknnModel.java create mode 100644 photon-core/src/main/java/org/photonvision/vision/pipe/impl/ObjectDetectionPipe.java delete mode 100644 photon-core/src/main/java/org/photonvision/vision/pipe/impl/RknnDetectionPipe.java rename photon-server/src/main/resources/models/{labels_v5.txt => note-640-640-yolov5s-labels.txt} (100%) diff --git a/photon-client/src/components/dashboard/CameraAndPipelineSelectCard.vue b/photon-client/src/components/dashboard/CameraAndPipelineSelectCard.vue index 38505dee0f..8f5f3b33e3 100644 --- a/photon-client/src/components/dashboard/CameraAndPipelineSelectCard.vue +++ b/photon-client/src/components/dashboard/CameraAndPipelineSelectCard.vue @@ -132,7 +132,7 @@ const validNewPipelineTypes = computed(() => { { name: "AprilTag", value: WebsocketPipelineType.AprilTag }, { name: "Aruco", value: WebsocketPipelineType.Aruco } ]; - if (useSettingsStore().general.rknnSupported) { + if (useSettingsStore().general.supportedBackends.length > 0) { pipelineTypes.push({ name: "Object Detection", value: WebsocketPipelineType.ObjectDetection }); } return pipelineTypes; @@ -170,7 +170,7 @@ const pipelineTypesWrapper = computed<{ name: string; value: number }[]>(() => { { name: "AprilTag", value: WebsocketPipelineType.AprilTag }, { name: "Aruco", value: WebsocketPipelineType.Aruco } ]; - if (useSettingsStore().general.rknnSupported) { + if (useSettingsStore().general.supportedBackends.length > 0) { pipelineTypes.push({ name: "Object Detection", value: WebsocketPipelineType.ObjectDetection }); } diff --git a/photon-client/src/components/dashboard/tabs/ObjectDetectionTab.vue b/photon-client/src/components/dashboard/tabs/ObjectDetectionTab.vue index 25de890ac0..5128f1db44 100644 --- a/photon-client/src/components/dashboard/tabs/ObjectDetectionTab.vue +++ b/photon-client/src/components/dashboard/tabs/ObjectDetectionTab.vue @@ -1,14 +1,15 @@