dev
This commit is contained in:
parent
d189af13b6
commit
59ddc333c7
|
|
@ -23,7 +23,7 @@ class HikrobotSmartCamera(Component):
|
|||
self.ok_frames = []
|
||||
self.ok_results =[]
|
||||
|
||||
def config_changed(self):
|
||||
def config_changed(self, vision_recipe=None):
|
||||
self.connected = False
|
||||
global MV_VS_OK
|
||||
device_info_list = MV_VS_DEVICE_INFO_LIST()
|
||||
|
|
@ -85,8 +85,32 @@ class HikrobotSmartCamera(Component):
|
|||
return -2
|
||||
|
||||
# Set the camera recipe
|
||||
if self.config.get("general", {}).get("solution_name", None) is not None:
|
||||
# Load recipe from vision/recipes directory
|
||||
if vision_recipe is not None:
|
||||
# Use the vision_recipe parameter to load the recipe
|
||||
from configparser import ConfigParser
|
||||
from pathlib import Path
|
||||
|
||||
recipes_dir = Path("./config/vision/recipes")
|
||||
recipe_path = recipes_dir / f"{vision_recipe}.ini"
|
||||
|
||||
if recipe_path.exists():
|
||||
config = ConfigParser(inline_comment_prefixes="#")
|
||||
config.read(recipe_path)
|
||||
if "general" in config and "solution_name" in config["general"]:
|
||||
solutionName = config["general"]["solution_name"]
|
||||
self.log.info(f"Loading solution: {solutionName} from {recipe_path}")
|
||||
mv_lib.MV_VS_SetStringValue(pHandle, "SrcOperateSolutionName", solutionName)
|
||||
mv_lib.MV_VS_SetCommandValue(pHandle, "CommandProjectLoad")
|
||||
time.sleep(5)
|
||||
else:
|
||||
self.log.error(f"No solution_name found in {recipe_path}")
|
||||
else:
|
||||
self.log.error(f"Recipe file not found: {recipe_path}")
|
||||
elif self.config.get("general", {}).get("solution_name", None) is not None:
|
||||
# Fallback to the old method if vision_recipe is not provided
|
||||
solutionName = self.config["general"]["solution_name"]
|
||||
self.log.info(f"Using fallback solution: {solutionName}")
|
||||
mv_lib.MV_VS_SetStringValue(pHandle, "SrcOperateSolutionName", solutionName)
|
||||
mv_lib.MV_VS_SetCommandValue(pHandle, "CommandProjectLoad")
|
||||
time.sleep(5)
|
||||
|
|
@ -98,9 +122,9 @@ class HikrobotSmartCamera(Component):
|
|||
self.connected = True
|
||||
|
||||
@Component.reconfig_on_error
|
||||
def _get(self):
|
||||
def _get(self, vision_recipe=None):
|
||||
if not self.connected:
|
||||
self.config_changed()
|
||||
self.config_changed(vision_recipe=vision_recipe)
|
||||
if not self.connected:
|
||||
return
|
||||
concat_frame = None
|
||||
|
|
@ -136,6 +160,7 @@ class HikrobotSmartCamera(Component):
|
|||
frame = cv2.rotate(frame, cv2.ROTATE_180)
|
||||
else:
|
||||
self.connected = False
|
||||
return
|
||||
if concat_frame is None:
|
||||
concat_frame = copy.deepcopy(frame)
|
||||
else:
|
||||
|
|
@ -147,10 +172,10 @@ class HikrobotSmartCamera(Component):
|
|||
|
||||
super()._get([concat_frame, self.ok_results])
|
||||
|
||||
def resume(self):
|
||||
def resume(self, vision_recipe=None):
|
||||
self.log.info(f"RESUMING")
|
||||
if not self.connected:
|
||||
self.config_changed()
|
||||
self.config_changed(vision_recipe=vision_recipe)
|
||||
if self.connected:
|
||||
# init OK result memory
|
||||
self.ok_frames = [None for n in range(self.num_cameras)]
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ class Vision(Component):
|
|||
|
||||
status_signal = pyqtSignal(object)
|
||||
loading_model_signal = pyqtSignal(object)
|
||||
recipe_changed_signal = pyqtSignal(str) # Signal to notify when a recipe is changed
|
||||
|
||||
def __init__(self, config=None, name=None, period=None, lazy=True, paused=False, threaded=True):
|
||||
super().__init__(config=config, name=name, period=period, lazy=lazy, paused=paused, threaded=threaded)
|
||||
|
|
@ -178,12 +179,19 @@ class Vision(Component):
|
|||
read = config.read(self.recipe_path)
|
||||
if len(read) != 1 or self.recipe_path not in read:
|
||||
raise AssertionError("Recipe could not be read.")
|
||||
os.path.splitext(os.path.basename(read[0]))[0]
|
||||
recipe_name = os.path.splitext(os.path.basename(read[0]))[0]
|
||||
self.vision_config = config._sections.get("general", None)
|
||||
self.markers = self.parse_markers(config._sections.get("markers", None))
|
||||
self.zones = self.parse_zones(config._sections.get("zones", None))
|
||||
self.labels = self.parse_labels(config._sections.get("labels", None))
|
||||
self.recipe_watcher.addPath(str(self.recipe_path))
|
||||
|
||||
# Emit a signal that can be connected to the HikrobotSmartCamera component
|
||||
self.log.info(f"Recipe loaded: {recipe_name}")
|
||||
|
||||
# Emit the recipe_changed_signal with the recipe name
|
||||
# This signal can be connected to the HikrobotSmartCamera component in main.py
|
||||
self.recipe_changed_signal.emit(recipe_name)
|
||||
except Exception:
|
||||
self.log.exception(traceback.format_exc())
|
||||
self.log.exception(f"Error reading {self.recipe_path!r}:")
|
||||
|
|
|
|||
|
|
@ -178,6 +178,10 @@ try:
|
|||
|
||||
if "vision" in self.components and "hikrobot_sc" in self.components:
|
||||
self.components["vision"].set_sources({"hikrobot_sc": self.components["hikrobot_sc"].out})
|
||||
# Connect the recipe_changed_signal from Vision to HikrobotSmartCamera
|
||||
self.components["vision"].recipe_changed_signal.connect(
|
||||
lambda recipe_name: self.components["hikrobot_sc"].config_changed(vision_recipe=recipe_name)
|
||||
)
|
||||
|
||||
# connect tecna to screwdriver
|
||||
if "screwdriver" in self.components and "tecna_t3" in self.components:
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user