Skip to content

Commit

Permalink
detection plugins: remove image splitting logic, let upstream handle …
Browse files Browse the repository at this point in the history
…that. switch to yolov8_320 as default.
  • Loading branch information
koush committed Jul 31, 2023
1 parent af860d8 commit 62c4a8b
Show file tree
Hide file tree
Showing 12 changed files with 96 additions and 253 deletions.
4 changes: 2 additions & 2 deletions plugins/coreml/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion plugins/coreml/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,5 @@
"devDependencies": {
"@scrypted/sdk": "file:../../sdk"
},
"version": "0.1.21"
"version": "0.1.23"
}
7 changes: 2 additions & 5 deletions plugins/coreml/src/coreml/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,7 @@ def __init__(self, nativeId: str | None = None):

model = self.storage.getItem("model") or "Default"
if model == "Default":
# model = "ssdlite_mobilenet_v2"
if "arm" in platform.processor():
model = "yolov8n"
else:
model = "ssdlite_mobilenet_v2"
model = "yolov8n_320"
self.yolo = "yolo" in model
self.yolov8 = "yolov8" in model
model_version = "v2"
Expand Down Expand Up @@ -111,6 +107,7 @@ async def getSettings(self) -> list[Setting]:
"ssdlite_mobilenet_v2",
"yolov4-tiny",
"yolov8n",
"yolov8n_320",
],
"value": model,
},
Expand Down
4 changes: 2 additions & 2 deletions plugins/openvino/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion plugins/openvino/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,5 @@
"devDependencies": {
"@scrypted/sdk": "file:../../sdk"
},
"version": "0.1.34"
"version": "0.1.37"
}
24 changes: 13 additions & 11 deletions plugins/openvino/src/ov/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,20 +76,13 @@ def __init__(self, nativeId: str | None = None):

model = self.storage.getItem('model') or 'Default'
if model == 'Default':
model = 'ssd_mobilenet_v1_coco'
model = 'yolov8n_320'
self.yolo = 'yolo' in model
self.yolov8 = "yolov8" in model
self.sigmoid = model == 'yolo-v4-tiny-tf'

print(f'model/mode/precision: {model}/{mode}/{precision}')

if self.yolov8:
self.model_dim = 640
elif self.yolo:
self.model_dim = 416
else:
self.model_dim = 300

model_version = 'v4'
xmlFile = self.downloadFile(f'https://raw.githubusercontent.com/koush/openvino-models/main/{model}/{precision}/{model}.xml', f'{model_version}/{precision}/{model}.xml')
binFile = self.downloadFile(f'https://raw.githubusercontent.com/koush/openvino-models/main/{model}/{precision}/{model}.bin', f'{model_version}/{precision}/{model}.bin')
Expand All @@ -111,6 +104,12 @@ def __init__(self, nativeId: str | None = None):
self.storage.removeItem('precision')
self.requestRestart()

# mobilenet 1,300,300,3
# yolov3/4 1,416,416,3
# yolov8 1,3,320,320
# second dim is always good.
self.model_dim = self.compiled_model.inputs[0].shape[2]

labels_contents = open(labelsFile, 'r').read()
self.labels = parse_label_contents(labels_contents)

Expand All @@ -132,6 +131,7 @@ async def getSettings(self) -> list[Setting]:
'yolo-v3-tiny-tf',
'yolo-v4-tiny-tf',
'yolov8n',
'yolov8n_320',
],
'value': model,
},
Expand Down Expand Up @@ -175,17 +175,19 @@ def get_input_size(self) -> Tuple[int, int]:
async def detect_once(self, input: Image.Image, settings: Any, src_size, cvss):
def predict():
infer_request = self.compiled_model.create_infer_request()
# the input_tensor can be created with the shared_memory=True parameter,
# but that seems to cause issues on some platforms.
if self.yolov8:
im = np.stack([input])
im = im.transpose((0, 3, 1, 2)) # BHWC to BCHW, (n, 3, h, w)
im = im.astype(np.float32) / 255.0
im = np.ascontiguousarray(im) # contiguous
im = ov.Tensor(array=im, shared_memory=True)
im = ov.Tensor(array=im)
input_tensor = im
elif self.yolo:
input_tensor = ov.Tensor(array=np.expand_dims(np.array(input), axis=0).astype(np.float32), shared_memory=True)
input_tensor = ov.Tensor(array=np.expand_dims(np.array(input), axis=0).astype(np.float32))
else:
input_tensor = ov.Tensor(array=np.expand_dims(np.array(input), axis=0), shared_memory=True)
input_tensor = ov.Tensor(array=np.expand_dims(np.array(input), axis=0))
# Set input tensor for model with one input
infer_request.set_input_tensor(input_tensor)
infer_request.start_async()
Expand Down
25 changes: 17 additions & 8 deletions plugins/openvino/src/yolo/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,29 @@

from predict import Prediction, Rectangle

def parse_yolov8(results, scale = 1):
defaultThreshold = .2

def parse_yolov8(results, threshold = defaultThreshold, scale = None, confidence_scale = None):
objs = []
keep = np.argwhere(results[4:] > .2)
keep = np.argwhere(results[4:] > threshold)
for indices in keep:
class_id = indices[0]
index = indices[1]
confidence = results[class_id + 4, index]
x = results[0][index].astype(float) * scale
y = results[1][index].astype(float) * scale
w = results[2][index].astype(float) * scale
h = results[3][index].astype(float) * scale
confidence = results[class_id + 4, index].astype(float)
x = results[0][index].astype(float)
y = results[1][index].astype(float)
w = results[2][index].astype(float)
h = results[3][index].astype(float)
if scale:
x = scale(x)
y = scale(y)
w = scale(w)
h = scale(h)
if confidence_scale:
confidence = confidence_scale(confidence)
obj = Prediction(
int(class_id),
confidence.astype(float),
confidence,
Rectangle(
x - w / 2,
y - h / 2,
Expand Down
8 changes: 4 additions & 4 deletions plugins/tensorflow-lite/.vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@

{
// docker installation
"scrypted.debugHost": "koushik-ubuntu",
"scrypted.serverRoot": "/server",
// "scrypted.debugHost": "koushik-ubuntu",
// "scrypted.serverRoot": "/server",

// pi local installation
// "scrypted.debugHost": "192.168.2.119",
// "scrypted.serverRoot": "/home/pi/.scrypted",

// local checkout
// "scrypted.debugHost": "127.0.0.1",
// "scrypted.serverRoot": "/Users/koush/.scrypted",
"scrypted.debugHost": "127.0.0.1",
"scrypted.serverRoot": "/Users/koush/.scrypted",
// "scrypted.debugHost": "koushik-windows",
// "scrypted.serverRoot": "C:\\Users\\koush\\.scrypted",

Expand Down
4 changes: 2 additions & 2 deletions plugins/tensorflow-lite/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion plugins/tensorflow-lite/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,5 @@
"devDependencies": {
"@scrypted/sdk": "file:../../sdk"
},
"version": "0.1.30"
"version": "0.1.38"
}
Loading

0 comments on commit 62c4a8b

Please sign in to comment.