2022-06-22 15:18:29 +00:00
|
|
|
import sys
|
|
|
|
|
|
2022-07-12 08:48:04 +00:00
|
|
|
from PyQt5.QtCore import pyqtSignal
|
|
|
|
|
from PyQt5.QtGui import QImage, QPixmap
|
|
|
|
|
from ui.test_test import Test_Test
|
2022-06-22 15:18:29 +00:00
|
|
|
|
|
|
|
|
|
2022-07-12 08:48:04 +00:00
|
|
|
class Test_Vision(Test_Test):
|
2022-06-22 15:18:29 +00:00
|
|
|
request_frame = pyqtSignal()
|
|
|
|
|
|
2022-07-19 09:59:00 +00:00
|
|
|
def __init__(self, components=None, recipe=None, step=None):
|
2022-06-22 15:18:29 +00:00
|
|
|
if "--sim-camera" not in sys.argv:
|
2022-07-12 08:48:04 +00:00
|
|
|
self.ok_counter_limit = 2
|
2022-06-22 15:18:29 +00:00
|
|
|
else:
|
2022-07-12 08:48:04 +00:00
|
|
|
self.ok_counter_limit = 1
|
2022-07-19 09:59:00 +00:00
|
|
|
super().__init__(components=components, recipe=recipe, step=step)
|
2022-06-22 15:18:29 +00:00
|
|
|
|
2022-07-19 09:59:00 +00:00
|
|
|
def start(self, recipe=None, step=None):
|
|
|
|
|
super().start(recipe=recipe, step=step)
|
2022-06-22 15:18:29 +00:00
|
|
|
# setup camera-vision loop
|
|
|
|
|
self.components["galaxy_camera"].set_period(period=None) # only get frame on request
|
|
|
|
|
self.components["galaxy_camera"].add_sources({"test_vision": self.request_frame})
|
|
|
|
|
self.request_frame_connection = self.components["vision"].out.connect(self.request_frame) # request new frame as soon as vision finishes
|
2022-07-12 08:48:04 +00:00
|
|
|
self.get_connection = self.components["vision"].out.connect(self.get)
|
2022-07-19 09:59:00 +00:00
|
|
|
self.components["vision"].set_recipe(self.step.spec.get("recipe", "1.ini"))
|
2022-06-22 15:18:29 +00:00
|
|
|
self.components["vision"].resume()
|
|
|
|
|
self.components["galaxy_camera"].resume()
|
|
|
|
|
self.request_frame.emit() # request first frame
|
|
|
|
|
|
|
|
|
|
def stop(self):
|
|
|
|
|
# disable camera-vision loop
|
|
|
|
|
self.components["galaxy_camera"].pause()
|
|
|
|
|
self.components["vision"].pause()
|
2022-07-12 08:48:04 +00:00
|
|
|
self.disconnect(self.get_connection)
|
2022-06-22 15:18:29 +00:00
|
|
|
self.disconnect(self.request_frame_connection)
|
2022-06-28 10:31:27 +00:00
|
|
|
self.components["galaxy_camera"].remove_sources(["test_vision", ])
|
2022-07-12 08:48:04 +00:00
|
|
|
super().stop()
|
2022-06-22 15:18:29 +00:00
|
|
|
|
2022-07-12 08:48:04 +00:00
|
|
|
def get(self, data=None, override=False):
|
2022-06-22 15:18:29 +00:00
|
|
|
if self.ok_timer.isActive():
|
|
|
|
|
# avoid proccessing if vision was completed
|
|
|
|
|
return
|
2022-07-12 08:48:04 +00:00
|
|
|
if data is None or data[-1] is None:
|
|
|
|
|
super().get(None, override=override)
|
|
|
|
|
return
|
2022-06-22 15:18:29 +00:00
|
|
|
data = data[-1]
|
2022-07-12 08:48:04 +00:00
|
|
|
super().get([{
|
|
|
|
|
"time": data.get("time", None),
|
|
|
|
|
"frame": data["vision"].get("frame", None),
|
|
|
|
|
"detections": data["vision"].get("detections", None),
|
|
|
|
|
"results": data["vision"].get("results", None),
|
|
|
|
|
"render": data["vision"].get("render", None),
|
|
|
|
|
}], override=override)
|
|
|
|
|
|
|
|
|
|
def visualize(self, data=None):
|
|
|
|
|
if data is None:
|
|
|
|
|
data = {}
|
|
|
|
|
overridden = data.get("overridden", False)
|
2022-06-22 15:18:29 +00:00
|
|
|
frame = data.get("frame", None)
|
2022-06-28 10:31:27 +00:00
|
|
|
render = data.get("render", None)
|
2022-06-22 15:18:29 +00:00
|
|
|
if overridden:
|
2022-07-12 08:48:04 +00:00
|
|
|
img = self.status_imgs_full["warning"]
|
2022-06-28 10:31:27 +00:00
|
|
|
elif render is not None:
|
2022-07-12 08:48:04 +00:00
|
|
|
img = render
|
2022-06-22 15:18:29 +00:00
|
|
|
elif frame is not None:
|
2022-07-12 08:48:04 +00:00
|
|
|
img = QPixmap.fromImage(QImage(
|
2022-06-22 15:18:29 +00:00
|
|
|
frame.data,
|
|
|
|
|
frame.shape[1], # width
|
|
|
|
|
frame.shape[0], # height
|
|
|
|
|
frame.shape[2] * frame.shape[1], # width * channels
|
|
|
|
|
QImage.Format_RGB888
|
|
|
|
|
))
|
|
|
|
|
else:
|
2022-07-12 08:48:04 +00:00
|
|
|
img = self.status_imgs_full[None]
|
|
|
|
|
super().visualize(data, img=img)
|
2022-06-22 15:18:29 +00:00
|
|
|
|
2022-07-12 08:48:04 +00:00
|
|
|
def save_last(self):
|
|
|
|
|
if self.last is None:
|
2022-06-22 15:18:29 +00:00
|
|
|
return
|
|
|
|
|
|
|
|
|
|
def emit_ok(self):
|
2022-07-12 08:48:04 +00:00
|
|
|
self.last.pop("frame", None)
|
|
|
|
|
self.last.pop("render", None)
|
|
|
|
|
self.ok.emit(self.last)
|