diff --git a/lib/fischertechnik/camera/CameraFactory.py b/lib/fischertechnik/camera/CameraFactory.py index d4cac43756d885ab9e9685b0dafb06dfac20dc31..209d25b0973e0a0aa2b0a067b3aad0c81f58dfde 100644 --- a/lib/fischertechnik/camera/CameraFactory.py +++ b/lib/fischertechnik/camera/CameraFactory.py @@ -7,9 +7,9 @@ from .MotionDetector import MotionDetector class CameraFactory(): - def create_line_detector(self, x, y, width, height, min_line_width=5, max_line_width=20, start_range_value=-100, end_range_value=100, number_of_lines=1): + def create_line_detector(self, x, y, width, height, min_line_width=5, max_line_width=20, start_range_value=-100, end_range_value=100, number_of_lines=1, invert=False): """@ReturnType fischertechnik.camera.LineDetector""" - return LineDetector(x, y, width, height, min_line_width, max_line_width, start_range_value, end_range_value, number_of_lines) + return LineDetector(x, y, width, height, min_line_width, max_line_width, start_range_value, end_range_value, number_of_lines, invert) def create_ball_detector(self, x, y, width, height, min_ball_diameter=5, max_ball_diameter=20, start_range_value=-100, end_range_value=100, rgb=[255,0,0], hue_tolerance=20): """@ReturnType fischertechnik.camera.BallDetector""" diff --git a/lib/fischertechnik/camera/LineDetector.py b/lib/fischertechnik/camera/LineDetector.py index 5346b7fc301a9e469aa36599f349b5cca969583c..8248be961b3400285bd76e0bbf5af1b2891d4024 100644 --- a/lib/fischertechnik/camera/LineDetector.py +++ b/lib/fischertechnik/camera/LineDetector.py @@ -9,7 +9,7 @@ from .DetectorResult import DetectorResult class LineDetector(Detector): - def __init__(self, x, y, width, height, min_line_width=5, max_line_width=20, start_range_value=-100, end_range_value=100, number_of_lines=1, identifier="line_detector"): + def __init__(self, x, y, width, height, min_line_width=5, max_line_width=20, start_range_value=-100, end_range_value=100, number_of_lines=1, invert=False, identifier="line_detector"): Detector.__init__(self, identifier) self.__x = x self.__y = y @@ -20,6 +20,7 @@ class LineDetector(Detector): self.__start_range_value = start_range_value self.__end_range_value = end_range_value self.__number_of_lines = number_of_lines + self.__invert = invert self.__lines = None def analyze_frame(self, frame): @@ -30,6 +31,10 @@ class LineDetector(Detector): # convert to grayscale gray = cv2.cvtColor(crop, cv2.COLOR_BGR2GRAY) + # if invert True, white lines are detected + if self.__invert == True: + gray = cv2.bitwise_not(gray) + # blurred image blur = cv2.GaussianBlur(gray, (5, 5), 0) @@ -90,6 +95,8 @@ class LineDetector(Detector): mask = np.zeros(crop.shape[:2], np.uint8) cv2.drawContours(mask, [contour], -1, 255, -1) mask = cv2.erode(mask, None, iterations=2) + # FT-6868 RPC 6.1.5: Rot und Blau beim Linienfeld vertauscht + # [:3] entfernen, dreht das Array um mean = cv2.mean(crop, mask=mask)[:3] color = Color(rgb=[int(mean[0]), int(mean[1]), int(mean[2])]) diff --git a/lib/fischertechnik/mqtt/Client.py b/lib/fischertechnik/mqtt/Client.py index 1400e094faf9ad5e7a7f93f92567a6fe18cb1b60..b94b520a75126ccec440a2b457953d376338a796 100644 --- a/lib/fischertechnik/mqtt/Client.py +++ b/lib/fischertechnik/mqtt/Client.py @@ -6,7 +6,7 @@ import paho.mqtt.client as mqtt class Client: - KEEP_ALIVE = 60 + KEEP_ALIVE = 30 def __init__(self, client_id="", clean_session=True, userdata=None, protocol=mqtt.MQTTv311, transport="tcp", path="/"): @@ -39,6 +39,7 @@ class Client: def disconnect(self): if self.paho_client: self.paho_client.disconnect() + self.paho_client.loop_stop() def is_connected(self): return self.connected @@ -63,7 +64,7 @@ class Client: if rc != 0: print("Unexpected connection.") else: - for topic in self.handler: + for topic in self.handler.copy(): self.paho_client.subscribe(topic, self.handler[topic]["qos"]) self.connected = True @@ -74,6 +75,6 @@ class Client: self.connected = False def __on_message(self, client, userdata, msg): - for topic in self.handler: + for topic in self.handler.copy(): if mqtt.topic_matches_sub(topic, msg.topic): self.handler[topic]["callback"](msg)