st-ten-1/src/ui/test_vision/test_vision.py

85 lines
3.1 KiB
Python
Raw Normal View History

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():
2022-07-25 13:36:42 +00:00
# avoid proccessing if completed
2022-06-22 15:18:29 +00:00
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)