openvino: restart if detection times out

This commit is contained in:
Koushik Dutta
2023-07-23 18:48:07 -07:00
parent 753373a691
commit 4feeeda904
5 changed files with 21 additions and 15 deletions

View File

@@ -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"
}

View File

@@ -40,5 +40,5 @@
"devDependencies": {
"@scrypted/sdk": "file:../../sdk"
},
"version": "0.1.32"
"version": "0.1.33"
}

View File

@@ -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]:

View File

@@ -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))

View File

@@ -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)