fixes
This commit is contained in:
parent
75abe24c54
commit
02cf4797eb
BIN
requirements.txt
BIN
requirements.txt
Binary file not shown.
|
|
@ -14,15 +14,16 @@ export QT_NO_WARNING_OUTPUT=0
|
|||
# export QT_QPA_PLATFORM=${XDG_SESSION_TYPE}
|
||||
python -B -u "./src/main.py" \
|
||||
--auto-login-admin \
|
||||
--auto-select \
|
||||
--no-autotest \
|
||||
--no-edgetpu \
|
||||
--no-gpu \
|
||||
--sim-camera \
|
||||
--sim-modbus \
|
||||
--sim-os-label-printer \
|
||||
--sim-serial-neo-pixels \
|
||||
--style windows \
|
||||
$* 2> >(sed $'s/.*/\e[31m&\e[m/' >&2) # &
|
||||
# --auto-select \
|
||||
# --about \
|
||||
# --archive \
|
||||
# --auto-login-user \
|
||||
|
|
|
|||
|
|
@ -5,12 +5,11 @@ from configparser import ConfigParser
|
|||
from pathlib import Path
|
||||
|
||||
import cv2
|
||||
import numpy
|
||||
import numpy as np
|
||||
import tensorflow as tf
|
||||
from lib.helpers.object_detection.utils import label_map_util
|
||||
from PyQt5.QtCore import (QFileSystemWatcher, QLineF, QMutex, QPointF, QRectF,
|
||||
Qt, QThread, QTimer, pyqtSignal)
|
||||
Qt, QThread, pyqtSignal)
|
||||
from PyQt5.QtGui import (QBrush, QColor, QFont, QImage, QPainter, QPainterPath,
|
||||
QPen, QPixmap)
|
||||
|
||||
|
|
@ -20,27 +19,26 @@ from .consumer import Consumer
|
|||
if "--no-edgetpu" not in sys.argv:
|
||||
try:
|
||||
from pycoral.utils.edgetpu import make_interpreter
|
||||
except (ImportError, ModuleNotFoundError) as e:
|
||||
except (ImportError, ModuleNotFoundError):
|
||||
def make_interpreter(*args, **kwargs):
|
||||
raise ValueError(f"{e!r}")
|
||||
raise ValueError("the 'pycoral' module is not available")
|
||||
else:
|
||||
def make_interpreter(*args, **kwargs):
|
||||
raise ValueError("\"--no-edgetpu\" in sys.argv")
|
||||
|
||||
if "--no-tflite" not in sys.argv:
|
||||
try:
|
||||
from pycoral.adapters import detect
|
||||
from tflite_runtime.interpreter import Interpreter
|
||||
except (ImportError, ModuleNotFoundError) as e:
|
||||
except (ImportError, ModuleNotFoundError):
|
||||
def Interpreter(*args, **kwargs):
|
||||
raise ValueError(f"{e!r}")
|
||||
raise ValueError("the 'tflite-runtime' module is not available")
|
||||
else:
|
||||
def Interpreter(*args, **kwargs):
|
||||
raise ValueError("\"--no-tflite\" in sys.argv")
|
||||
|
||||
if "--no-gpu" in sys.argv:
|
||||
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
|
||||
|
||||
# os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
|
||||
#
|
||||
# # Patch the location of gfile
|
||||
# tf.gfile = tf.io.gfile
|
||||
|
||||
|
|
@ -94,14 +92,14 @@ class Vision(Component):
|
|||
self.models_dir = Path(self.config[self.name].get("models_dir", "./data/neural_networks"))
|
||||
self.allowed_modes = dict.fromkeys([
|
||||
"edgetpu",
|
||||
"tflite_cpu",
|
||||
"tflite",
|
||||
"normal",
|
||||
])
|
||||
if "--no-edgetpu" in sys.argv:
|
||||
self.allowed_modes.pop("edgetpu", None)
|
||||
if "--no-tflite" in sys.argv:
|
||||
self.allowed_modes.pop("edgetpu", None)
|
||||
self.allowed_modes.pop("tflite_cpu", None)
|
||||
self.allowed_modes.pop("tflite", None)
|
||||
self.load_model(self.config[self.name].get("neural_network", None))
|
||||
# LOAD LABELS
|
||||
label_map = label_map_util.load_labelmap("./config/vision/labels/labels.pbtxt")
|
||||
|
|
@ -284,11 +282,11 @@ class Vision(Component):
|
|||
tf_mode = "edgetpu"
|
||||
except Exception:
|
||||
self.log.exception(traceback.format_exc())
|
||||
if tf_mode is None and "tflite_cpu" in self.allowed_modes:
|
||||
if tf_mode is None and "tflite" in self.allowed_modes:
|
||||
try:
|
||||
# create tflite cpu interpreter
|
||||
interpreter = Interpreter(str(self.models_dir / model_name / f"{model_name}.tflite"))
|
||||
tf_mode = "tflite_cpu"
|
||||
tf_mode = "tflite"
|
||||
except Exception:
|
||||
self.log.exception(traceback.format_exc())
|
||||
# reset tensorflow variables
|
||||
|
|
@ -306,19 +304,9 @@ class Vision(Component):
|
|||
self.tf_mode = tf_mode
|
||||
self.model_name = model_name
|
||||
if interpreter is not None:
|
||||
# if there is a new tflite interpreter initialize it and the related values
|
||||
self.tflite_input_details = interpreter.get_input_details()
|
||||
self.tflite_output_details = interpreter.get_output_details()
|
||||
self.inf_index = self.tflite_input_details[0]["index"]
|
||||
self.inf_shape = self.tflite_input_details[0]["shape"]
|
||||
# interpreter.resize_tensor_input(self.inf_index, self.inf_shape)
|
||||
# if there is a new tflite interpreter initialize it
|
||||
interpreter.allocate_tensors()
|
||||
interpreter.invoke() # warmup
|
||||
else:
|
||||
self.tflite_input_details = None
|
||||
self.tflite_output_details = None
|
||||
self.inf_index = None
|
||||
self.inf_shape = None
|
||||
self.interpreter = interpreter
|
||||
# if there is a new model to be used, remove previous model if present
|
||||
if model is not None and self.model is not None:
|
||||
|
|
@ -336,26 +324,46 @@ class Vision(Component):
|
|||
# "center": self.get_center(test_box),
|
||||
# "size": self.get_size(test_box),
|
||||
# }]
|
||||
if self.inf_shape is not None and frame.shape != self.inf_shape[1:3]:
|
||||
tensor = np.expand_dims(cv2.resize(frame, self.inf_shape[1:3], interpolation=cv2.INTER_LINEAR), axis=0)
|
||||
if self.interpreter is not None and frame.shape != self.interpreter.get_input_details()[0]["shape"][1:3]:
|
||||
tensor = np.expand_dims(cv2.resize(frame, self.interpreter.get_input_details()[0]["shape"][1:3], interpolation=cv2.INTER_LINEAR), axis=0)
|
||||
else:
|
||||
tensor = np.expand_dims(frame, axis=0)
|
||||
# Run inference
|
||||
if lock:
|
||||
self.lock.lock()
|
||||
if self.tf_mode in {"edgetpu", "tflite_cpu"}:
|
||||
self.interpreter.set_tensor(self.inf_index, tensor)
|
||||
if self.tf_mode in {"edgetpu", "tflite"}:
|
||||
i_d = self.interpreter.get_input_details()
|
||||
# print(i_d)
|
||||
o_d = self.interpreter.get_output_details()
|
||||
# print(o_d)
|
||||
self.interpreter.set_tensor(i_d[0]["index"], tensor)
|
||||
self.interpreter.invoke()
|
||||
objs = detect.get_objects(self.interpreter, self.detection_threshold, (1, 1))
|
||||
# PARSE TFLITE DETECTIONS
|
||||
# signature_list = self.interpreter._get_full_signature_list()
|
||||
# if signature_list:
|
||||
# if len(signature_list) > 1:
|
||||
# raise ValueError("Only support model with one signature.")
|
||||
# signature = signature_list[next(iter(signature_list))]
|
||||
# # count = int(self.interpreter.get_tensor(signature["outputs"]["output_0"])[0])
|
||||
# scores = self.interpreter.get_tensor(signature["outputs"]["output_1"])[0]
|
||||
# class_ids = self.interpreter.get_tensor(signature["outputs"]["output_2"])[0]
|
||||
# boxes = self.interpreter.get_tensor(signature["outputs"]["output_3"])[0]
|
||||
if self.interpreter.get_tensor(o_d[3]["index"]).size == 1:
|
||||
boxes = self.interpreter.get_tensor(o_d[0]["index"])[0]
|
||||
class_ids = self.interpreter.get_tensor(o_d[1]["index"])[0]
|
||||
scores = self.interpreter.get_tensor(o_d[2]["index"])[0]
|
||||
# count = int(self.interpreter.get_tensor(o_d[3]["index"])[0])
|
||||
else:
|
||||
scores = self.interpreter.get_tensor(o_d[0]["index"])[0]
|
||||
boxes = self.interpreter.get_tensor(o_d[1]["index"])[0]
|
||||
# count = int(self.interpreter.get_tensor(o_d[2]["index"])[0])
|
||||
class_ids = self.interpreter.get_tensor(o_d[3]["index"])[0]
|
||||
if lock:
|
||||
self.lock.unlock()
|
||||
boxes = [(obj.bbox.ymin / self.inf_shape[1], obj.bbox.xmin / self.inf_shape[2], obj.bbox.ymax / self.inf_shape[1], obj.bbox.xmax / self.inf_shape[2]) for obj in objs]
|
||||
classes = [obj.id + 1 for obj in objs]
|
||||
scores = [obj.score for obj in objs]
|
||||
detections = {
|
||||
"detection_boxes": [boxes],
|
||||
"detection_classes": [classes],
|
||||
"detection_scores": [scores],
|
||||
"detection_boxes": [boxes],
|
||||
"detection_classes": [map(lambda class_id: class_id + 1, class_ids)],
|
||||
}
|
||||
else:
|
||||
detections = self.model(tensor)
|
||||
|
|
|
|||
|
|
@ -13,4 +13,5 @@ pyqt5
|
|||
pyserial
|
||||
requests
|
||||
tensorflow
|
||||
tflite-runtime
|
||||
zebra
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user