From e89b2b8bf061d8732bc84b3765a86b29102750dd Mon Sep 17 00:00:00 2001 From: Yasmine Moumou <yasmine.moumou@polymtl.ca> Date: Tue, 11 Aug 2020 20:55:00 -0400 Subject: [PATCH] [robots](armor-lines) Add line detection function structure --- .../dataset/armor_lines_detector.py | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 robots-at-robots/research/robots_at_robots/dataset/armor_lines_detector.py diff --git a/robots-at-robots/research/robots_at_robots/dataset/armor_lines_detector.py b/robots-at-robots/research/robots_at_robots/dataset/armor_lines_detector.py new file mode 100644 index 0000000..bf50395 --- /dev/null +++ b/robots-at-robots/research/robots_at_robots/dataset/armor_lines_detector.py @@ -0,0 +1,47 @@ +from typing import Tuple + +import cv2 +import numpy as np +import matplotlib.pyplot as plt +from polystar.common.models.image import Image + +from polystar.common.models.image_annotation import ImageAnnotation +from research.common.dataset.twitch.twitch_roco_datasets import TwitchROCODataset +from .armor_dataset_factory import ArmorDatasetFactory +#from ..code/robots-at-robots/research/robots_at_robots/dataset/armor_dataset_factory.py import ArmorDatasetFactory + + +class ArmorLinesDetector: + @staticmethod + def detect_lines(image: Image): + + edges = cv2.Canny(image, image.size, image.size) #size? + lines = cv2.HoughLines(edges, 1, np.pi / 180, 50) + len(lines) + + armor_lines = image.copy() + + for objet in lines[0:50]: + rho, theta = objet[0] + a = np.cos(theta) + b = np.sin(theta) + x0 = a * rho + y0 = b * rho + x1 = int(x0 + 1000 * (-b)) + y1 = int(y0 + 1000 * (a)) + x2 = int(x0 - 1000 * (-b)) + y2 = int(y0 - 1000 * (a)) + + cv2.line(armor_lines, (x1, y1), (x2, y2), (0, 0, 255), 2) + plt.imshow(armor_lines, cmap='gray') + plt.title('50 lignes principales') + + +if __name__ == "__main__": + + lineDetector = ArmorLinesDetector() + armorFactory = ArmorDatasetFactory() + + armorData = armorFactory.from_dataset(TwitchROCODataset.TWITCH_470158483) + for element in armorData: + lineDetector.detect_lines(element[0]) # get first image to test \ No newline at end of file -- GitLab