From 4feeeda9044c19a55de0b9b398e60f23d288589a Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Sun, 23 Jul 2023 18:48:07 -0700 Subject: [PATCH] openvino: restart if detection times out --- plugins/openvino/package-lock.json | 4 ++-- plugins/openvino/package.json | 2 +- plugins/openvino/src/ov/__init__.py | 4 ++-- .../tensorflow-lite/src/predict/__init__.py | 19 ++++++++++++++++--- .../tensorflow-lite/src/tflite/__init__.py | 7 ------- 5 files changed, 21 insertions(+), 15 deletions(-) diff --git a/plugins/openvino/package-lock.json b/plugins/openvino/package-lock.json index 42e324c19..69c17fbf5 100644 --- a/plugins/openvino/package-lock.json +++ b/plugins/openvino/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scrypted/openvino", - "version": "0.1.32", + "version": "0.1.33", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@scrypted/openvino", - "version": "0.1.32", + "version": "0.1.33", "devDependencies": { "@scrypted/sdk": "file:../../sdk" } diff --git a/plugins/openvino/package.json b/plugins/openvino/package.json index 8b96c43e8..dcd1ebecd 100644 --- a/plugins/openvino/package.json +++ b/plugins/openvino/package.json @@ -40,5 +40,5 @@ "devDependencies": { "@scrypted/sdk": "file:../../sdk" }, - "version": "0.1.32" + "version": "0.1.33" } diff --git a/plugins/openvino/src/ov/__init__.py b/plugins/openvino/src/ov/__init__.py index a39c702f5..c90658900 100644 --- a/plugins/openvino/src/ov/__init__.py +++ b/plugins/openvino/src/ov/__init__.py @@ -109,7 +109,7 @@ class OpenVINOPlugin(PredictPlugin, scrypted_sdk.BufferConverter, scrypted_sdk.S self.storage.removeItem('mode') self.storage.removeItem('model') self.storage.removeItem('precision') - asyncio.run_coroutine_threadsafe(scrypted_sdk.deviceManager.requestRestart(), asyncio.get_event_loop()) + self.requestRestart() labels_contents = open(labelsFile, 'r').read() self.labels = parse_label_contents(labels_contents) @@ -163,7 +163,7 @@ class OpenVINOPlugin(PredictPlugin, scrypted_sdk.BufferConverter, scrypted_sdk.S 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() + self.requestRestart() # width, height, channels def get_input_details(self) -> Tuple[int, int, int]: diff --git a/plugins/tensorflow-lite/src/predict/__init__.py b/plugins/tensorflow-lite/src/predict/__init__.py index 67bf0ac09..c8d67ed20 100644 --- a/plugins/tensorflow-lite/src/predict/__init__.py +++ b/plugins/tensorflow-lite/src/predict/__init__.py @@ -13,6 +13,7 @@ from scrypted_sdk.types import (ObjectDetectionResult, ObjectDetectionSession, ObjectsDetected, Setting) from detect import DetectPlugin +import traceback from .rectangle import (Rectangle, combine_rect, from_bounding_box, intersect_area, intersect_rect, to_bounding_box) @@ -187,6 +188,18 @@ class PredictPlugin(DetectPlugin, scrypted_sdk.BufferConverter): async def detect_once(self, input: Image.Image, settings: Any, src_size, cvss) -> ObjectsDetected: pass + async def safe_detect_once(self, input: Image.Image, settings: Any, src_size, cvss) -> ObjectsDetected: + try: + f = self.detect_once(input, settings, src_size, cvss) + return await asyncio.wait_for(f, 60) + except: + traceback.print_exc() + print( + "encountered an error while detecting. requesting plugin restart." + ) + self.requestRestart() + raise + async def run_detection_image(self, image: scrypted_sdk.Image, detection_session: ObjectDetectionSession) -> ObjectsDetected: settings = detection_session and detection_session.get('settings') src_size = image.width, image.height @@ -217,7 +230,7 @@ class PredictPlugin(DetectPlugin, scrypted_sdk.BufferConverter): }) single = await ensureRGBData(data, (w, h), image.format) try: - ret = await self.detect_once(single, settings, src_size, cvss) + ret = await self.safe_detect_once(single, settings, src_size, cvss) return ret finally: single.close() @@ -281,9 +294,9 @@ class PredictPlugin(DetectPlugin, scrypted_sdk.BufferConverter): def cvss2(point): return point[0] / sx + ow, point[1] / sy + oh - ret1 = await self.detect_once(first, settings, src_size, cvss1) + ret1 = await self.safe_detect_once(first, settings, src_size, cvss1) first.close() - ret2 = await self.detect_once(second, settings, src_size, cvss2) + ret2 = await self.safe_detect_once(second, settings, src_size, cvss2) second.close() two_intersect = intersect_rect(Rectangle(*first_crop), Rectangle(*second_crop)) diff --git a/plugins/tensorflow-lite/src/tflite/__init__.py b/plugins/tensorflow-lite/src/tflite/__init__.py index 1f82405e8..30d723008 100644 --- a/plugins/tensorflow-lite/src/tflite/__init__.py +++ b/plugins/tensorflow-lite/src/tflite/__init__.py @@ -229,13 +229,6 @@ class TensorFlowLitePlugin( interpreter, score_threshold=0.2, image_scale=(1, 1) ) return objs - except: - traceback.print_exc() - print( - "tensorflow-lite encountered an error while detecting. requesting plugin restart." - ) - self.requestRestart() - raise e finally: self.interpreters.put(interpreter)