From 91da184f458aa7c3cb9f80d216da4573a84f319f Mon Sep 17 00:00:00 2001 From: Che Kun Law Date: Sun, 22 Nov 2020 13:02:33 -0800 Subject: [PATCH 01/12] Add SORT code in third_party folder as git submodule --- .gitmodules | 3 +++ perception/third_party/sort | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 perception/third_party/sort diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..68b4e36 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "perception/third_party/sort"] + path = perception/third_party/sort + url = https://github.com/lawchekun/sort.git diff --git a/perception/third_party/sort b/perception/third_party/sort new file mode 160000 index 0000000..517935c --- /dev/null +++ b/perception/third_party/sort @@ -0,0 +1 @@ +Subproject commit 517935cbe088ffc76ebf7e15cd5a6765b2d88bad From 3a590112f57977f32a983f334a78d5f456a7810b Mon Sep 17 00:00:00 2001 From: PZ Zhang Date: Sat, 28 Nov 2020 23:45:55 -0800 Subject: [PATCH 02/12] add listing directory --- perception/vis/algo_stats | Bin 5441 -> 7048 bytes perception/vis/vis.py | 17 +++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/perception/vis/algo_stats b/perception/vis/algo_stats index edd4cf5661573c93313bc05cc1650ad0680e24f1..83a77101ccde643ec448d127b552ec00514bded3 100644 GIT binary patch literal 7048 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 literal 5441 zcmcIo4{%h)84p|_Z~+7vKtLdof5yUH2m~mcw}D_7pdILt0E+GP<+9m4c=z79?_K_# zL(!^3+o1(zP#m3VrGpf~)DmnFM3`c$b=uCrRJe|I2C?)gc4DDLB6a$G?{4?KmzQL0 zXSkW{e3$+0@B6dge*5ixUKZ#cuq9gnpYExV1htxshLV{|GD-D@nI%SJ$xKZ(Es*Lr z(YR$s%Lb`kfr0{iU>_FD{maSKvxpSZ`vcutxXz^94C^Y_XtSz^ml^R?g6ftTUP}39 zs?oN!R;sbl3@@o$XI2}Doj3-h6`$#xt@~~#a6)mi(_2Fb2 z_^i(jEeM;cMQ100Ltzx`PbHFV;kdzR*lbdgG*+*e6jc_Z%AjItR57jCoCeVN8EV9V zby(5JsvV<<6!r)BP*{*9o>djFD!T>##czXwbv1pot@E>sQ7M3($}Nl|#1cKZ6KyI? zD5_po$cLjfIIzl=YbPH3!C)eV^0EL2=L+~h7`jVknrKD~<+&^|Efi#uWNr8uWP?BZ zBLz&7O}Egw8m=VhdX714r^rfBpBb*xRx8$^SV|161b5LkdysZX!Rzi_(p?VOM_YUK z*G0Gelg<~ezx`H}2_enLf-a9rF(om5scbZOLc!w)2eD^}$D;?hh3xrZKYViirMrm~ zAjEte%w(s-kQow-+1|&%2E_NV$ZNxt2%a))wyKxptAhPq)y)uXrEw?(E}zE*&yA?L z5+E$3zck?3zot~By=0U7Cex^nMP=3?I6*kDMLWO!vpt>jh!oPi5RCSm>m6^dIP*f& z2*QNGhvXp6LEQ7t(w8S34-zH>KFo&L2QGK&a=XwacB(6yKdb6g$llDLd^yS9#E?yc zfmNSg_?^)~INUIoBqXhco8@f$ozs@xcy#Pi!i10(ZuEmeg=i!nj6)F&!0EXC zpEsiBpY}aSSl1ib-IFf7O458fV%%lLhY_4vgAk zu)`@uLnAGUYOSJeQP6}7`dH-+*F;~q;EXke;#AczQdp6536k69QnBBqj#vF)zLYNW zA#U%A6T#rIr&j+c0auj}dWoQzk{GY9**?GQJ1m5ESSXRwELGuLX$#pS9=c7iqxQfa zcsRKA(_t%#6d=ysk^lXs1ch*S$Ki6ZuS2*dO+|0B6~Y1TN8kVFNjv2R_9U)MJid3% z1Iz2y5+;OR;wYvh#;bkqmyBcF(Bq0lb@;<*E`Zz79@smR=I`87{4S9K)?>R1I0Ctq z8Qh#NEiSWfG@MSR3XTyb1hL|Zy`o91z&eyGMq5suKS(R~5+($G7tFyqa3H_9Y<7@cJ3~l78xV32ACOjVZ0F8MALe47#J}{9oU`_Sp0gVM0jzjS*84gT|DD$#$mj zIcU5)C4-rZT`OinnW{L@^2AyiAA7d6u9je(veirkHGDDR-EE=|FZu0?Fv8|{Ria(zI*)(w zBy`&8#|K>xOkODYvzO7H9Djd!$sdt;_o>h#6oU+k=1#P$sqtT&84jE;o(n#^ zd&B*}xgck!lZ-x$;N%O@&adX|bnwQq>#uA+93kwzqQXT_&Ht%mXFnLhX{S*x{%$*m z9cZ0;^|yrN6R8e3eW%lhk(@D1&7l!Sp>0cYtS!!)tNDAE4?c3Rf-oTn=Ke5}naON) zTf1TV^jEh3yqYi}2u{}#7gG`=Ik8*fQ+r0W?xppCT~BNxEWEk?kyrnA2qI9}bEkY5 zYbUP0Cwu6jvI`y?XgYn`ehX{N9wPkD%wwYyt%#a8)#?UuJZ6JJ27!4^6DzdxB z_pL-tc85F#lwgMpZ$BQ3dDP`zkLRQ8Mve7{qc!h<3nS4aH?a>Ri1}o60ogr=qNTk4 z#|7V42>bZ#@5?)Bph|K&hr)-EoOd86_Wd3^e{*&G8UxH@=Nh)RZ$mrt&haY5FG0N9 zW*;8;?G6;re5N>+gm)5+H7nfo*uL$|iX%s#gNnR^p8WNc`w~t(9NT>u!Odr&Ei=&; zcaiAacJ~ZpYa3yIzc7EoTN~f&jnjugPDr}^d$e3W(4ciz>NT2sF2yu6$&JR)8W>c~ zey7%p-!NP`1vK_YzW(f|OBDW>1L3>f6YWd$iVrW|dk2)Y#;wJ#<&w~`hL<4T9c>>T ztnW_V!uM}2HLY63+-!zXTB0!n-}?Ca$rLHNqP4YC&lYIAe^+zqW-Vcd_a9w8fBo6s zw!nw+ZozE11)M7R-;LtU6`^%%12w9Zq?O{hD>DAs4PXsl0Ry}8=*h~KT?4D6AYUUm z-3P|2y(m(x=sLUs+`W6{<;ht2fGg`Yj9W&18kGi#|xOmdvydO@n);q z&GMs52?1*c)&RZ~hw7d_2$;lsl?{og3A4#) zK`)$QaIEF*Gb7DT!i3OEu@h4g)03D}6IxF%aVhU^f3xvd(A4DxnKX`aF(ok`Vm=E! dbQ?<(Ya^kfw^y->kE_>Ig3ybxK1_M}e*p+aRIUI3 diff --git a/perception/vis/vis.py b/perception/vis/vis.py index 81f08e8..3b3665f 100644 --- a/perception/vis/vis.py +++ b/perception/vis/vis.py @@ -1,4 +1,6 @@ import argparse +import os + from FrameWrapper import FrameWrapper import cv2 as cv from window_builder import Visualizer @@ -18,12 +20,19 @@ exec("from TestTasks.{} import {} as Algorithm".format(args.algorithm, args.algorithm)) # Initialize image source -data_sources = [args.data] +# detects args.data, get a list of all file directory when given a directory +# change data_source to a list of all files in the directory +if os.path.isfile(args.data): + data_sources = [args.data] +elif os.path.isdir(args.data): + data_sources = os.listdir(args.data) data = FrameWrapper(data_sources, 0.25) algorithm = Algorithm() window_builder = Visualizer(algorithm.var_info()) video_frames = [] + + # Main Loop def main(): for frame in data: @@ -38,9 +47,9 @@ def main(): key_pressed = cv.waitKey(60) & 0xFF if key_pressed == 112: - cv.waitKey(0) # pause + cv.waitKey(0) # pause if key_pressed == 113: - break # quit + break # quit cp.run('main()', 'algo_stats') @@ -55,4 +64,4 @@ def main(): height2, width2, _ = img.shape if (height2, width2) == (height, width): out.write(img) - out.release() \ No newline at end of file + out.release() From 124dc662f4be5b9a633e8b1cd95dd898238c2130 Mon Sep 17 00:00:00 2001 From: nLevin13 Date: Sun, 29 Nov 2020 16:40:21 -0800 Subject: [PATCH 03/12] pyplot integration --- perception/vis/TestTasks/TestAlgo.py | 20 +++++++++++++++++--- perception/vis/algo_stats | Bin 7048 -> 143583 bytes 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/perception/vis/TestTasks/TestAlgo.py b/perception/vis/TestTasks/TestAlgo.py index 15ca31f..e46e507 100644 --- a/perception/vis/TestTasks/TestAlgo.py +++ b/perception/vis/TestTasks/TestAlgo.py @@ -1,16 +1,30 @@ from TaskPerceiver import TaskPerceiver from typing import Dict -import sys -import os import numpy as np import cv2 as cv +import matplotlib.pyplot as plt class TestAlgo(TaskPerceiver): def __init__(self): super().__init__(canny_low=((0, 255), 100), canny_high=((0, 255), 200)) def analyze(self, frame: np.ndarray, debug: bool, slider_vals: Dict[str, int]): + fig = plt.figure() + x1 = np.linspace(0.0, 5.0) + x2 = np.linspace(0.0, 2.0) + + y1 = np.cos(2 * np.pi * x1) * np.exp(-x1) + y2 = np.cos(2 * np.pi * x2) + + line1, = plt.plot(x1, y1, 'ko-') + line1.set_ydata(np.cos(2 * np.pi * (x1 + slider_vals['canny_low'] * 3.14 / 2)) * np.exp(-x1)) + fig.canvas.draw() + img = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, + sep='') + img = img.reshape(fig.canvas.get_width_height()[::-1] + (3,)) + img = cv.cvtColor(img, cv.COLOR_RGB2BGR) + img = cv.resize(img, (frame.shape[1], frame.shape[0])) return frame, [frame, cv.cvtColor(frame, cv.COLOR_BGR2GRAY), cv.flip(cv.cvtColor(frame, cv.COLOR_BGR2GRAY), cv.ROTATE_180), cv.Canny(frame, slider_vals['canny_low'], slider_vals['canny_high']), - cv.flip(cv.Canny(frame, slider_vals['canny_low'], slider_vals['canny_high']), 0)] \ No newline at end of file + cv.flip(cv.Canny(frame, slider_vals['canny_low'], slider_vals['canny_high']), 0), img] \ No newline at end of file diff --git a/perception/vis/algo_stats b/perception/vis/algo_stats index 83a77101ccde643ec448d127b552ec00514bded3..f64d29873ed1d216f02a06d2829e8272206aa0a7 100644 GIT binary patch literal 143583 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

~k>>3c+{Ru6+U&>j6QA-4($ChZj&7k}-xIW)Wi$ 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 QCRn|k2fMbU(O0ede>dqAr~m)} literal 7048 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 From a0aba3ad388840b4a251214a4b64e05bc461b945 Mon Sep 17 00:00:00 2001 From: nLevin13 Date: Sun, 3 Jan 2021 15:48:51 -0800 Subject: [PATCH 04/12] Refactoring finished --- perception/tasks/TaskPerceiver.py | 22 ++- perception/tasks/__init__.py | 0 perception/tasks/cross/CrossPerceiver.py | 3 +- perception/tasks/gate/GateCenter.py | 135 ++++++++++++++++++ perception/tasks/gate/GateSegmentation.py | 99 +++++++++++++ perception/tasks/gate/__init__.py | 0 perception/tasks/gate/gateDetectionVideo.avi | Bin 5686 -> 0 bytes .../tasks/gate/{ => legacy}/GatePerceiver.py | 2 +- .../gate/{ => legacy}/GateSegmentationAlgo.py | 0 perception/tasks/gate/legacy/__init__.py | 0 .../tasks/segmentation/combinedFilter.py | 7 +- perception/vis/TaskPerceiver.py | 31 ---- .../vis/TestTasks/GateSegmentationAlgo.py | 6 +- perception/vis/TestTasks/TestAlgo.py | 9 +- perception/vis/TestTasks/__init__.py | 0 perception/vis/__init__.py | 0 perception/vis/algo_stats | Bin 143583 -> 21209 bytes perception/vis/vis.py | 35 ++++- 18 files changed, 288 insertions(+), 61 deletions(-) create mode 100644 perception/tasks/__init__.py create mode 100644 perception/tasks/gate/GateCenter.py create mode 100644 perception/tasks/gate/GateSegmentation.py create mode 100644 perception/tasks/gate/__init__.py delete mode 100644 perception/tasks/gate/gateDetectionVideo.avi rename perception/tasks/gate/{ => legacy}/GatePerceiver.py (90%) rename perception/tasks/gate/{ => legacy}/GateSegmentationAlgo.py (100%) create mode 100644 perception/tasks/gate/legacy/__init__.py delete mode 100644 perception/vis/TaskPerceiver.py create mode 100644 perception/vis/TestTasks/__init__.py create mode 100644 perception/vis/__init__.py diff --git a/perception/tasks/TaskPerceiver.py b/perception/tasks/TaskPerceiver.py index 40f5995..b384555 100644 --- a/perception/tasks/TaskPerceiver.py +++ b/perception/tasks/TaskPerceiver.py @@ -1,18 +1,32 @@ -from typing import Any +from typing import Any, Dict, Tuple import numpy as np + class TaskPerceiver: - def __init__(self): + def __init__(self, **kwargs): + """Initializes the TaskPerceiver. + Args: + kwargs: Each keyworded argument is of the form + var_name = (range, default_val), where range is the range of values + for the slider which controls this variable, and default_val is + the initial value of the slider. + """ self.time = 0 + self.variables = kwargs - def analyze(self, frame: np.ndarray, debug: bool) -> Any: + def analyze(self, frame: np.ndarray, debug: bool, slider_vals: Dict[str, int]) -> Any: """Runs the algorithm and returns the result. Args: frame: The frame to analyze debug: Whether or not to display intermediate images for debugging - + slider_vals: A list of names of the variables which the user should be + able to control from the Visualizer, mapped to current slider + value for that variable Returns: the result of the algorithm + debug frames must each be same size as original input frame. Might change this in the future. """ raise NotImplementedError("Need to implement with child class.") + def var_info(self) -> Dict[str, Tuple[Tuple[int, int], int]]: + return self.variables \ No newline at end of file diff --git a/perception/tasks/__init__.py b/perception/tasks/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/perception/tasks/cross/CrossPerceiver.py b/perception/tasks/cross/CrossPerceiver.py index 65c2424..5c12123 100644 --- a/perception/tasks/cross/CrossPerceiver.py +++ b/perception/tasks/cross/CrossPerceiver.py @@ -1,8 +1,7 @@ from collections import namedtuple import numpy as np import sys -sys.path.insert(0, '..') -from TaskPerceiver import TaskPerceiver +from perception.tasks.TaskPerceiver import TaskPerceiver class CrossPerceiver(TaskPerceiver): named_tuple = namedtuple("CrossOutput", ["centerx", "centery"]) diff --git a/perception/tasks/gate/GateCenter.py b/perception/tasks/gate/GateCenter.py new file mode 100644 index 0000000..fda3b33 --- /dev/null +++ b/perception/tasks/gate/GateCenter.py @@ -0,0 +1,135 @@ +from perception.tasks.gate.GateSegmentation import GateSegmentationAlgo +from perception.tasks.TaskPerceiver import TaskPerceiver +from collections import namedtuple +import sys + +import numpy as np +import math +import cv2 as cv +import time +import statistics + + +class GateCenter(TaskPerceiver): + center_x_locs, center_y_locs = [], [] + output_class = namedtuple("GateOutput", ["centerx", "centery"]) + output_type = {'centerx': np.int16, 'centery': np.int16} + + def __init__(self): + super().__init__(optical_flow_c=((0, 100), 10)) + self.gate_center = self.output_class(250, 250) + self.use_optical_flow = False + self.optical_flow_c = 0.1 + self.gate = GateSegmentationAlgo() + self.prvs = None + + def analyze(self, frame, debug, slider_vals): + self.optical_flow_c = slider_vals['optical_flow_c'] / 100 + rect1, rect2, debug_filter = self.gate.analyze(frame, True) + if self.prvs is None: + # frame = cv.resize(frame, None, fx=0.3, fy=0.3) + self.prvs = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) + else: + if rect1 and rect2: + self.gate_center = self.get_center(rect1, rect2, frame) + if self.use_optical_flow: + cv.circle(debug_filter, self.gate_center, 5, (3, 186, 252), -1) + else: + cv.circle(debug_filter, self.gate_center, 5, (0, 0, 255), -1) + + if debug: + return (self.output_class(self.gate_center[0], self.gate_center[1]), [frame, debug_filter]) + return self.output_class(self.gate_center[0], self.gate_center[1]) + + def center_without_optical_flow(self, center_x, center_y): + # get starting center location, averaging over the first 2510 frames + if len(self.center_x_locs) == 0: + self.center_x_locs.append(center_x) + self.center_y_locs.append(center_y) + + elif len(self.center_x_locs) < 25: + self.center_x_locs.append(center_x) + self.center_y_locs.append(center_y) + center_x = int(statistics.mean(self.center_x_locs)) + center_y = int(statistics.mean(self.center_y_locs)) + + # use new center location only when it is close to the previous valid location + else: + self.center_x_locs.append(center_x) + self.center_y_locs.append(center_y) + self.center_x_locs.pop(0) + self.center_y_locs.pop(0) + x_temp_avg = int(statistics.mean(self.center_x_locs)) + y_temp_avg = int(statistics.mean(self.center_y_locs)) + if math.sqrt((center_x - x_temp_avg) ** 2 + (center_y - y_temp_avg) ** 2) > 10: + center_x, center_y = int(x_temp_avg), int(y_temp_avg) + + return (center_x, center_y) + + def dense_optical_flow(self, frame): + next = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) + flow = cv.calcOpticalFlowFarneback(self.prvs, next, None, 0.5, 3, 15, 3, 5, 1.2, 0) + mag, ang = cv.cartToPolar(flow[..., 0], flow[..., 1]) + mag = cv.normalize(mag, None, 0, 255, cv.NORM_MINMAX) + # hsv[...,0] = ang*180/np.pi + # hsv[...,2] = mag + # bgr = cv.cvtColor(hsv,cv.COLOR_HSV2BGR) + # cv.imshow('bgr', bgr) + return next, mag, ang + + def get_center(self, rect1, rect2, frame): + x1, y1, w1, h1 = rect1 + x2, y2, w2, h2 = rect2 + center_x, center_y = (x1 + x2) // 2, ((y1 + h1 // 2) + (y2 + h2 // 2)) // 2 + self.prvs, mag, ang = self.dense_optical_flow(frame) + # print(np.mean(mag)) + if len(self.center_x_locs) < 25 or (np.mean(mag) < 40 and ((not self.use_optical_flow) or \ + (self.use_optical_flow and ( + center_x - self.gate_center[0]) ** 2 + ( + center_y - self.gate_center[ + 1]) ** 2 < 50))): + self.use_optical_flow = False + return self.center_without_optical_flow(center_x, center_y) + else: + self.use_optical_flow = True + return (int(self.gate_center[0] + self.optical_flow_c * np.mean(mag * np.cos(ang))), \ + (int(self.gate_center[1] + self.optical_flow_c * np.mean(mag * np.sin(ang))))) + + +# this part is temporary and will be covered by other files in the future +if __name__ == '__main__': + cap = cv.VideoCapture(sys.argv[1]) + ret_tries = 0 + start_time = time.time() + frame_count = 0 + paused = False + speed = 1 + ret, frame1 = cap.read() + frame1 = cv.resize(frame1, None, fx=0.3, fy=0.3) + prvs = cv.cvtColor(frame1, cv.COLOR_BGR2GRAY) + hsv = np.zeros_like(frame1) + hsv[..., 1] = 255 + gate_center = GateCenter() + while ret_tries < 50: + for _ in range(speed): + ret, frame = cap.read() + if frame_count == 1000: + break + if ret: + frame = cv.resize(frame, None, fx=0.3, fy=0.3) + center, filtered_frame = gate_center.analyze(frame, True) + cv.imshow('original', frame) + cv.imshow('filtered_frame', filtered_frame) + ret_tries = 0 + key = cv.waitKey(30) + if key == ord('q') or key == 27: + break + if key == ord('p'): + paused = not paused + if key == ord('i') and speed > 1: + speed -= 1 + if key == ord('o'): + speed += 1 + else: + ret_tries += 1 + frame_count += 1 \ No newline at end of file diff --git a/perception/tasks/gate/GateSegmentation.py b/perception/tasks/gate/GateSegmentation.py new file mode 100644 index 0000000..8bbf92b --- /dev/null +++ b/perception/tasks/gate/GateSegmentation.py @@ -0,0 +1,99 @@ +from perception.tasks.TaskPerceiver import TaskPerceiver +from typing import Tuple +import sys + +from perception.tasks.segmentation.combinedFilter import init_combined_filter +import numpy as np +import cv2 as cv +import time + + +class GateSegmentationAlgo(TaskPerceiver): + center_x_locs, center_y_locs = [], [] + + def __init__(self): + super() + self.combined_filter = init_combined_filter() + + def analyze(self, frame: np.ndarray, debug: bool) -> Tuple[float, float]: + """Takes in the background removed image and returns the center between + the two gate posts. + Args: + frame: The background removed frame to analyze + debug: Whether or not tot display intermediate images for debugging + Reurns: + (x,y) coordinate with center of gate + """ + rect1, rect2 = None, None + + filtered_frame = self.combined_filter(frame, display_figs=False) + + max_brightness = max([b for b in filtered_frame[:, :, 0][0]]) + lowerbound = max(0.84 * max_brightness, 120) + upperbound = 255 + _, thresh = cv.threshold(filtered_frame, lowerbound, upperbound, cv.THRESH_BINARY) + debug_filter = cv.cvtColor(thresh, cv.COLOR_GRAY2BGR) + + cnt = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)[-2] + + area_diff = [] + area_cnts = [] + + # remove all contours with zero area + cnt = [cnt[i] for i in range(len(cnt)) if cv.contourArea(cnt[i]) > 0] + + for i in range(len(cnt)): + area_cnt = cv.contourArea(cnt[i]) + area_cnts.append(area_cnt) + area_rect = cv.boundingRect(cnt[i])[-2] * cv.boundingRect(cnt[i])[-1] + area_diff.append(abs((area_rect - area_cnt) / area_cnt)) + + if len(area_diff) >= 2: + largest_area_idx = [area_cnts.index(sorted(area_cnts, reverse=True)[i]) for i in range(min(3, len(cnt)))] + area_diff_copy = sorted([area_diff[i] for i in largest_area_idx]) + min_i1, min_i2 = area_diff.index(area_diff_copy[0]), area_diff.index(area_diff_copy[1]) + + rect1 = cv.boundingRect(cnt[min_i1]) + rect2 = cv.boundingRect(cnt[min_i2]) + x1, y1, w1, h1 = rect1 + x2, y2, w2, h2 = rect2 + cv.rectangle(debug_filter, (x1, y1), (x1 + w1, y1 + h1), (0, 255, 0), 2) + cv.rectangle(debug_filter, (x2, y2), (x2 + w2, y2 + h2), (0, 255, 0), 2) + + if debug: + return (rect1, rect2, debug_filter) + return (rect1, rect2) + + +# this part is temporary and will be covered by other files in the future +if __name__ == '__main__': + cap = cv.VideoCapture(sys.argv[1]) + ret_tries = 0 + start_time = time.time() + frame_count = 0 + paused = False + speed = 1 + gate_task = GateSegmentationAlgo() + while ret_tries < 50: + for _ in range(speed): + ret, frame = cap.read() + if frame_count == 1000: + break + if ret: + frame = cv.resize(frame, None, fx=0.3, fy=0.3) + rect1, rect2, filtered_frame = gate_task.analyze(frame, True) + cv.imshow('original', frame) + cv.imshow('filtered_frame', filtered_frame) + ret_tries = 0 + key = cv.waitKey(30) + if key == ord('q') or key == 27: + break + if key == ord('p'): + paused = not paused + if key == ord('i') and speed > 1: + speed -= 1 + if key == ord('o'): + speed += 1 + else: + ret_tries += 1 + frame_count += 1 \ No newline at end of file diff --git a/perception/tasks/gate/__init__.py b/perception/tasks/gate/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/perception/tasks/gate/gateDetectionVideo.avi b/perception/tasks/gate/gateDetectionVideo.avi deleted file mode 100644 index b67ca42f26fcca7c8f12cc79a4b2e6b61847e02a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5686 zcmWIYbaT@aV_)ek_?v|WsHWvXb6mkz-S1JhQMeD zjE2By2#kinXb6mkz-S1JhQMeDjEE2bjSsK@2OjcMa&v$v Any: - """Runs the algorithm and returns the result. - Args: - frame: The frame to analyze - debug: Whether or not to display intermediate images for debugging - slider_vals: A list of names of the variables which the user should be - able to control from the Visualizer, mapped to current slider - value for that variable - Returns: - the result of the algorithm - """ - raise NotImplementedError("Need to implement with child class.") - - def var_info(self) -> Dict[str, Tuple[Tuple[int, int], int]]: - return self.variables \ No newline at end of file diff --git a/perception/vis/TestTasks/GateSegmentationAlgo.py b/perception/vis/TestTasks/GateSegmentationAlgo.py index 1c791d5..f747dd2 100644 --- a/perception/vis/TestTasks/GateSegmentationAlgo.py +++ b/perception/vis/TestTasks/GateSegmentationAlgo.py @@ -1,16 +1,14 @@ -from TaskPerceiver import TaskPerceiver +from perception.tasks.TaskPerceiver import TaskPerceiver from typing import Tuple import sys import os from pathlib import Path from collections import namedtuple -sys.path.append(str(Path(__file__).parents[2]) + '/tasks') -from segmentation.combinedFilter import init_combined_filter +from perception.tasks.segmentation.combinedFilter import init_combined_filter import numpy as np import cv2 as cv import time -import cProfile class GateSegmentationAlgo(TaskPerceiver): __past_centers = [] diff --git a/perception/vis/TestTasks/TestAlgo.py b/perception/vis/TestTasks/TestAlgo.py index e46e507..3410aad 100644 --- a/perception/vis/TestTasks/TestAlgo.py +++ b/perception/vis/TestTasks/TestAlgo.py @@ -1,4 +1,4 @@ -from TaskPerceiver import TaskPerceiver +from perception.tasks.TaskPerceiver import TaskPerceiver from typing import Dict import numpy as np import cv2 as cv @@ -19,12 +19,7 @@ def analyze(self, frame: np.ndarray, debug: bool, slider_vals: Dict[str, int]): line1, = plt.plot(x1, y1, 'ko-') line1.set_ydata(np.cos(2 * np.pi * (x1 + slider_vals['canny_low'] * 3.14 / 2)) * np.exp(-x1)) fig.canvas.draw() - img = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, - sep='') - img = img.reshape(fig.canvas.get_width_height()[::-1] + (3,)) - img = cv.cvtColor(img, cv.COLOR_RGB2BGR) - img = cv.resize(img, (frame.shape[1], frame.shape[0])) return frame, [frame, cv.cvtColor(frame, cv.COLOR_BGR2GRAY), cv.flip(cv.cvtColor(frame, cv.COLOR_BGR2GRAY), cv.ROTATE_180), cv.Canny(frame, slider_vals['canny_low'], slider_vals['canny_high']), - cv.flip(cv.Canny(frame, slider_vals['canny_low'], slider_vals['canny_high']), 0), img] \ No newline at end of file + cv.flip(cv.Canny(frame, slider_vals['canny_low'], slider_vals['canny_high']), 0), fig] \ No newline at end of file diff --git a/perception/vis/TestTasks/__init__.py b/perception/vis/TestTasks/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/perception/vis/__init__.py b/perception/vis/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/perception/vis/algo_stats b/perception/vis/algo_stats index f64d29873ed1d216f02a06d2829e8272206aa0a7..a871a9bd04c1689d446f5178e550d66565454a05 100644 GIT binary patch literal 21209 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 SV0hRSnQw}pS!2aXOZ$Jub+3B> literal 143583 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

~k>>3c+{Ru6+U&>j6QA-4($ChZj&7k}-xIW)Wi$ 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 QCRn|k2fMbU(O0ede>dqAr~m)} diff --git a/perception/vis/vis.py b/perception/vis/vis.py index 3b3665f..f575ac1 100644 --- a/perception/vis/vis.py +++ b/perception/vis/vis.py @@ -1,23 +1,28 @@ import argparse import os -from FrameWrapper import FrameWrapper +from perception.vis.FrameWrapper import FrameWrapper import cv2 as cv -from window_builder import Visualizer +from perception.vis.window_builder import Visualizer import cProfile as cp import pstats +import imageio +from matplotlib.pyplot import Figure +import numpy as np # Parse arguments parser = argparse.ArgumentParser(description='Visualizes perception algorithms.') parser.add_argument( '--data', default='webcam', type=str ) +parser.add_argument('--algo_folder', default='vis.TestTasks', type=str) parser.add_argument('--algorithm', type=str) +parser.add_argument('--cProfiler', type=str) parser.add_argument('--save_video', action='store_true') args = parser.parse_args() # Get algorithm module -exec("from TestTasks.{} import {} as Algorithm".format(args.algorithm, args.algorithm)) +exec("from perception.{0}.{1} import {1} as Algorithm".format(args.algo_folder, args.algorithm)) # Initialize image source # detects args.data, get a list of all file directory when given a directory @@ -40,6 +45,16 @@ def main(): state, debug_frames = algorithm.analyze( frame, debug=True, slider_vals=window_builder.update_vars() ) + + for i, dframe in enumerate(debug_frames): + if type(dframe) == Figure: + img = np.fromstring(dframe.canvas.tostring_rgb(), dtype=np.uint8, + sep='') + img = img.reshape(dframe.canvas.get_width_height()[::-1] + (3,)) + img = cv.cvtColor(img, cv.COLOR_RGB2BGR) + img = cv.resize(img, (frame.shape[1], frame.shape[0])) + debug_frames[i] = img + to_show = window_builder.display(debug_frames) cv.imshow('Debug Frames', to_show) if args.save_video: @@ -55,13 +70,19 @@ def main(): cp.run('main()', 'algo_stats') cv.destroyAllWindows() p = pstats.Stats('algo_stats') -p.print_stats('analyze') + +if args.cProfiler: + p.print_stats(args.cProfiler) +else: + p.print_stats() if args.save_video: height, width, _ = video_frames[0].shape - out = cv.VideoWriter('deb_cap.avi', cv.VideoWriter_fourcc(*'XVID'), 60, (height, width)) + w = imageio.get_writer('deb_cap.mp4') for img in video_frames: height2, width2, _ = img.shape if (height2, width2) == (height, width): - out.write(img) - out.release() + imag = cv.resize(img, (width - (width % 16), height - (height % 16))) + imag = cv.cvtColor(imag, cv.COLOR_BGR2RGB) + w.append_data(imag) + w.close() From d5e0e497a2d7ffbfb5554a7a57042ced5686e5cb Mon Sep 17 00:00:00 2001 From: nLevin13 Date: Sun, 3 Jan 2021 16:05:38 -0800 Subject: [PATCH 05/12] fixed codefactor warnings except exec --- perception/tasks/gate/GateCenter.py | 13 ++++++------- perception/tasks/gate/GateSegmentation.py | 6 +++--- perception/vis/algo_stats | Bin 21209 -> 21244 bytes perception/vis/vis.py | 2 +- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/perception/tasks/gate/GateCenter.py b/perception/tasks/gate/GateCenter.py index fda3b33..4f90859 100644 --- a/perception/tasks/gate/GateCenter.py +++ b/perception/tasks/gate/GateCenter.py @@ -67,15 +67,15 @@ def center_without_optical_flow(self, center_x, center_y): return (center_x, center_y) def dense_optical_flow(self, frame): - next = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) - flow = cv.calcOpticalFlowFarneback(self.prvs, next, None, 0.5, 3, 15, 3, 5, 1.2, 0) + next_frame = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) + flow = cv.calcOpticalFlowFarneback(self.prvs, next_frame, None, 0.5, 3, 15, 3, 5, 1.2, 0) mag, ang = cv.cartToPolar(flow[..., 0], flow[..., 1]) mag = cv.normalize(mag, None, 0, 255, cv.NORM_MINMAX) # hsv[...,0] = ang*180/np.pi # hsv[...,2] = mag # bgr = cv.cvtColor(hsv,cv.COLOR_HSV2BGR) # cv.imshow('bgr', bgr) - return next, mag, ang + return next_frame, mag, ang def get_center(self, rect1, rect2, frame): x1, y1, w1, h1 = rect1 @@ -90,10 +90,9 @@ def get_center(self, rect1, rect2, frame): 1]) ** 2 < 50))): self.use_optical_flow = False return self.center_without_optical_flow(center_x, center_y) - else: - self.use_optical_flow = True - return (int(self.gate_center[0] + self.optical_flow_c * np.mean(mag * np.cos(ang))), \ - (int(self.gate_center[1] + self.optical_flow_c * np.mean(mag * np.sin(ang))))) + self.use_optical_flow = True + return (int(self.gate_center[0] + self.optical_flow_c * np.mean(mag * np.cos(ang))), \ + (int(self.gate_center[1] + self.optical_flow_c * np.mean(mag * np.sin(ang))))) # this part is temporary and will be covered by other files in the future diff --git a/perception/tasks/gate/GateSegmentation.py b/perception/tasks/gate/GateSegmentation.py index 8bbf92b..6faca7d 100644 --- a/perception/tasks/gate/GateSegmentation.py +++ b/perception/tasks/gate/GateSegmentation.py @@ -42,10 +42,10 @@ def analyze(self, frame: np.ndarray, debug: bool) -> Tuple[float, float]: # remove all contours with zero area cnt = [cnt[i] for i in range(len(cnt)) if cv.contourArea(cnt[i]) > 0] - for i in range(len(cnt)): - area_cnt = cv.contourArea(cnt[i]) + for i in cnt: + area_cnt = cv.contourArea(i) area_cnts.append(area_cnt) - area_rect = cv.boundingRect(cnt[i])[-2] * cv.boundingRect(cnt[i])[-1] + area_rect = cv.boundingRect(i)[-2] * cv.boundingRect(i)[-1] area_diff.append(abs((area_rect - area_cnt) / area_cnt)) if len(area_diff) >= 2: diff --git a/perception/vis/algo_stats b/perception/vis/algo_stats index a871a9bd04c1689d446f5178e550d66565454a05..a8faa4c28cb42d7410594fcf0b58fcc5b79446ff 100644 GIT binary patch literal 21244 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 xQ_3)|R$h~|Be0d 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 SV0hRSnQw}pS!2aXOZ$Jub+3B> diff --git a/perception/vis/vis.py b/perception/vis/vis.py index f575ac1..5461b9d 100644 --- a/perception/vis/vis.py +++ b/perception/vis/vis.py @@ -47,7 +47,7 @@ def main(): ) for i, dframe in enumerate(debug_frames): - if type(dframe) == Figure: + if isinstance(dframe, Figure): img = np.fromstring(dframe.canvas.tostring_rgb(), dtype=np.uint8, sep='') img = img.reshape(dframe.canvas.get_width_height()[::-1] + (3,)) From c858349add9e3696ebd403e6c7fa481281ada480 Mon Sep 17 00:00:00 2001 From: nLevin13 Date: Sun, 3 Jan 2021 17:06:07 -0800 Subject: [PATCH 06/12] fixed PZ's resize function --- perception/vis/algo_stats | Bin 21244 -> 143870 bytes perception/vis/vis.py | 1 - perception/vis/window_builder.py | 15 ++++++++++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/perception/vis/algo_stats b/perception/vis/algo_stats index a8faa4c28cb42d7410594fcf0b58fcc5b79446ff..f28e286771749083fcdcf1b853293e16e542fb3d 100644 GIT binary patch literal 143870 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�#SK{nVlud|;L~ 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 literal 21244 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 xQ_3)|R$h~|Be List[np.ndarray]: newLst.append((frame)) return newLst + # set the first frame as the standard dimension, resize every frame after + def reshape(self, frames: List[np.ndarray]) -> List[np.ndarray]: + newLst = [] + img = frames[0] + height = img.shape[0] + width = img.shape[1] + dim = (width, height) + for frame in frames: + if frame.shape[0] != height or frame.shape[1] != width: + frame = cv.resize(frame, dim, interpolation=cv.INTER_AREA) + newLst.append(frame) + return newLst + def display(self, frames: List[np.ndarray]) -> np.ndarray: num_frames = len(frames) assert (num_frames > 0 and num_frames <= 9), 'Invalid number of frames!' - frames = self.three_stack(frames) + frames = self.reshape(self.three_stack(frames)) columns = math.ceil(num_frames/math.sqrt(num_frames)) rows = math.ceil(num_frames/columns) From 45c4264a007045511a1b08ad53ad5b02b651d5da Mon Sep 17 00:00:00 2001 From: nLevin13 Date: Sun, 3 Jan 2021 17:11:04 -0800 Subject: [PATCH 07/12] fixed style issues --- perception/vis/algo_stats | Bin 143870 -> 143905 bytes perception/vis/window_builder.py | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/perception/vis/algo_stats b/perception/vis/algo_stats index f28e286771749083fcdcf1b853293e16e542fb3d..18849e7e04374fa408436ce9523be26382a855e9 100644 GIT binary patch literal 143905 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 literal 143870 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�#SK{nVlud|;L~ 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 diff --git a/perception/vis/window_builder.py b/perception/vis/window_builder.py index 05e5059..664db0e 100644 --- a/perception/vis/window_builder.py +++ b/perception/vis/window_builder.py @@ -7,12 +7,12 @@ def nothing(x): pass class Visualizer: - def __init__(self, vars: Dict[str, Tuple[Tuple[int, int], int]]): - self.variables = vars.keys() + def __init__(self, kwargs: Dict[str, Tuple[Tuple[int, int], int]]): + self.variables = kwargs.keys() cv.namedWindow('Debug Frames') - for name, info in vars.items(): - range, default_val = info - low_range, high_range = range + for name, info in kwargs.items(): + slider_range, default_val = info + low_range, high_range = slider_range cv.createTrackbar(name, 'Debug Frames', low_range, high_range, nothing) cv.setTrackbarPos(name, 'Debug Frames', default_val) @@ -55,7 +55,7 @@ def display(self, frames: List[np.ndarray]) -> np.ndarray: this_row = np.hstack((this_row, to_add)) else: this_row = np.hstack((this_row, np.zeros(frames[0].shape, dtype=np.uint8))) - if type(to_show) != int: + if not isinstance(to_show, int): to_show = np.vstack((to_show, this_row)) else: to_show = this_row From edec8086af414436300d63e900be29a1cb2e0649 Mon Sep 17 00:00:00 2001 From: nLevin13 Date: Sun, 3 Jan 2021 18:19:41 -0800 Subject: [PATCH 08/12] no need for exec --- perception/__init__.py | 7 ++++++ perception/tasks/TaskPerceiver.py | 4 ++-- .../TestTasks/GateSegmentationAlgo.py | 0 .../{vis => tasks}/TestTasks/TestAlgo.py | 0 .../{vis => tasks}/TestTasks/__init__.py | 0 perception/tasks/gate/GateSegmentation.py | 4 ++-- perception/vis/algo_stats | Bin 143905 -> 21410 bytes perception/vis/vis.py | 22 ++++++++++-------- 8 files changed, 23 insertions(+), 14 deletions(-) rename perception/{vis => tasks}/TestTasks/GateSegmentationAlgo.py (100%) rename perception/{vis => tasks}/TestTasks/TestAlgo.py (100%) rename perception/{vis => tasks}/TestTasks/__init__.py (100%) diff --git a/perception/__init__.py b/perception/__init__.py index e69de29..d49c1b6 100644 --- a/perception/__init__.py +++ b/perception/__init__.py @@ -0,0 +1,7 @@ +import perception.tasks.TestTasks.TestAlgo as TestAlgo +import perception.tasks.gate.GateCenter as GateSeg + +ALGOS = { + 'test': TestAlgo.TestAlgo, + 'gateseg': GateSeg.GateCenter +} \ No newline at end of file diff --git a/perception/tasks/TaskPerceiver.py b/perception/tasks/TaskPerceiver.py index b384555..605c090 100644 --- a/perception/tasks/TaskPerceiver.py +++ b/perception/tasks/TaskPerceiver.py @@ -12,7 +12,7 @@ def __init__(self, **kwargs): the initial value of the slider. """ self.time = 0 - self.variables = kwargs + self.kwargs = kwargs def analyze(self, frame: np.ndarray, debug: bool, slider_vals: Dict[str, int]) -> Any: """Runs the algorithm and returns the result. @@ -29,4 +29,4 @@ def analyze(self, frame: np.ndarray, debug: bool, slider_vals: Dict[str, int]) - raise NotImplementedError("Need to implement with child class.") def var_info(self) -> Dict[str, Tuple[Tuple[int, int], int]]: - return self.variables \ No newline at end of file + return self.kwargs \ No newline at end of file diff --git a/perception/vis/TestTasks/GateSegmentationAlgo.py b/perception/tasks/TestTasks/GateSegmentationAlgo.py similarity index 100% rename from perception/vis/TestTasks/GateSegmentationAlgo.py rename to perception/tasks/TestTasks/GateSegmentationAlgo.py diff --git a/perception/vis/TestTasks/TestAlgo.py b/perception/tasks/TestTasks/TestAlgo.py similarity index 100% rename from perception/vis/TestTasks/TestAlgo.py rename to perception/tasks/TestTasks/TestAlgo.py diff --git a/perception/vis/TestTasks/__init__.py b/perception/tasks/TestTasks/__init__.py similarity index 100% rename from perception/vis/TestTasks/__init__.py rename to perception/tasks/TestTasks/__init__.py diff --git a/perception/tasks/gate/GateSegmentation.py b/perception/tasks/gate/GateSegmentation.py index 6faca7d..2c4c052 100644 --- a/perception/tasks/gate/GateSegmentation.py +++ b/perception/tasks/gate/GateSegmentation.py @@ -12,10 +12,10 @@ class GateSegmentationAlgo(TaskPerceiver): center_x_locs, center_y_locs = [], [] def __init__(self): - super() + super().__init__() self.combined_filter = init_combined_filter() - def analyze(self, frame: np.ndarray, debug: bool) -> Tuple[float, float]: + def analyze(self, frame: np.ndarray, debug: bool, slider_vals=None) -> Tuple[float, float]: """Takes in the background removed image and returns the center between the two gate posts. Args: diff --git a/perception/vis/algo_stats b/perception/vis/algo_stats index 18849e7e04374fa408436ce9523be26382a855e9..1ce1d890f9e408b2ee38df558040c8ff5b9d8a61 100644 GIT binary patch literal 21410 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 diff --git a/perception/vis/vis.py b/perception/vis/vis.py index e5f35e7..cd38a83 100644 --- a/perception/vis/vis.py +++ b/perception/vis/vis.py @@ -1,6 +1,7 @@ import argparse import os +from perception import ALGOS from perception.vis.FrameWrapper import FrameWrapper import cv2 as cv from perception.vis.window_builder import Visualizer @@ -15,14 +16,13 @@ parser.add_argument( '--data', default='webcam', type=str ) -parser.add_argument('--algo_folder', default='vis.TestTasks', type=str) parser.add_argument('--algorithm', type=str) -parser.add_argument('--cProfiler', type=str) +parser.add_argument('--cProfiler', default='disabled_cprof', type=str) parser.add_argument('--save_video', action='store_true') args = parser.parse_args() # Get algorithm module -exec("from perception.{0}.{1} import {1} as Algorithm".format(args.algo_folder, args.algorithm)) +Algorithm = ALGOS[args.algorithm] # Initialize image source # detects args.data, get a list of all file directory when given a directory @@ -65,15 +65,17 @@ def main(): if key_pressed == 113: break # quit +if args.cProfiler == 'disabled_cprof': + main() +else: + cp.run('main()', 'algo_stats') + p = pstats.Stats('algo_stats') + if args.cProfiler != 'all_methods': + p.print_stats(args.cProfiler) + else: + p.print_stats() -cp.run('main()', 'algo_stats') cv.destroyAllWindows() -p = pstats.Stats('algo_stats') - -if args.cProfiler: - p.print_stats(args.cProfiler) -else: - p.print_stats() if args.save_video: height, width, _ = video_frames[0].shape From eb0a46a401c213e61d091ac6ad835384eb3a6aca Mon Sep 17 00:00:00 2001 From: nLevin13 Date: Tue, 5 Jan 2021 13:50:37 -0800 Subject: [PATCH 09/12] Ashwin's fixes --- perception/__init__.py | 3 ++- perception/vis/vis.py | 12 +++++------- requirements.txt | 5 ++--- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/perception/__init__.py b/perception/__init__.py index d49c1b6..522e077 100644 --- a/perception/__init__.py +++ b/perception/__init__.py @@ -1,7 +1,8 @@ import perception.tasks.TestTasks.TestAlgo as TestAlgo import perception.tasks.gate.GateCenter as GateSeg +# import perception.tasks as tasks ALGOS = { 'test': TestAlgo.TestAlgo, 'gateseg': GateSeg.GateCenter -} \ No newline at end of file +} diff --git a/perception/vis/vis.py b/perception/vis/vis.py index cd38a83..ceab0f0 100644 --- a/perception/vis/vis.py +++ b/perception/vis/vis.py @@ -13,10 +13,8 @@ # Parse arguments parser = argparse.ArgumentParser(description='Visualizes perception algorithms.') -parser.add_argument( - '--data', default='webcam', type=str -) -parser.add_argument('--algorithm', type=str) +parser.add_argument('--data', default='webcam', type=str) +parser.add_argument('--algorithm', type=str, required=True) parser.add_argument('--cProfiler', default='disabled_cprof', type=str) parser.add_argument('--save_video', action='store_true') args = parser.parse_args() @@ -27,10 +25,10 @@ # Initialize image source # detects args.data, get a list of all file directory when given a directory # change data_source to a list of all files in the directory -if os.path.isfile(args.data): - data_sources = [args.data] -elif os.path.isdir(args.data): +if os.path.isdir(args.data): data_sources = os.listdir(args.data) +else: + data_sources = [args.data] data = FrameWrapper(data_sources, 0.25) algorithm = Algorithm() diff --git a/requirements.txt b/requirements.txt index 2f6349f..6531dbb 100755 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,5 @@ -opencv-python==3.4.3.18 -torch==1.2.0 -torchvision==0.6.0 +opencv-python scipy numpy matplotlib +imageio From 867bc98eebdff330916c078931749091df6ac4f0 Mon Sep 17 00:00:00 2001 From: Nir Levin Date: Tue, 5 Jan 2021 15:16:39 -0800 Subject: [PATCH 10/12] Update README.md Added how to run the visualizer to the read me. Will add how to make your own algorithm file later. --- README.md | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 90e88e2..f37c4eb 100644 --- a/README.md +++ b/README.md @@ -35,9 +35,9 @@ Misc code, camera calibration etc. Code for specific tasks like 1. cross: cross detection -1. segmentation: -1. path_marker: path_marker detection -1. spinny_wheel_detection +2. segmentation: +3. path_marker: path_marker detection +4. spinny_wheel_detection etc @@ -45,5 +45,27 @@ etc Visualization tools Code for testing tasks (Ideally this should be placed a separate folder called `tests`). +After writing the code for your specific task algorithm, you can do one of two things: + +1. Add this to the end of .py file: + + if __name__ == '__main__': + from perception.vis.vis import run + run(, , ) + and then run + + python .py +2. Add this to the perception/__init__.py file: + + import + + ALGOS = { + 'custom_name': . + } + and then run + + python vis.py --algorithm custom_name [--data ] [--profile ] [--save_video] + The **algorithm** parameter is required. If **data** isn't specified, it'll default to your webcam. If **profile** isn't specified, it will be off by default. Add the **save_video** tag if you want to save your vis test as an mp4 file. + ## wiki: Flowchart on TaskPerceiver, TaskReceiver, AlgorithmRunner. From daa6c6df37a0eec24ba0f2c8584990f7b732f2d3 Mon Sep 17 00:00:00 2001 From: Domas Buracas Date: Sun, 17 Jan 2021 16:15:36 -0800 Subject: [PATCH 11/12] vis + gate algo refactor (#34) * Gate task * With optical flow added * Updated optical flow usage * Modified how dense optical flow is used * updated vis * merge to new format * update to new perception directory * deleted outdated files * Updated optical flow & separated classes * Removed unnecessary code * updated with vis * added init * added init * Refactor Vis + Gate Algos * vis updates merged * tidied up formatting and imports * random code style fixes * fixed some style issues * vis now iterates through data frames without error Co-authored-by: Yu Liu Co-authored-by: nLevin13 --- .gitattributes | 1 + .gitignore | 2 + perception/__init__.py | 12 +- perception/tasks/TaskPerceiver.py | 16 +- perception/tasks/cross/CrossPerceiver.py | 8 - .../tasks/{TestTasks => cross}/__init__.py | 0 perception/tasks/cross/cross_detection.py | 29 ++- .../gate/{GateCenter.py => GateCenterAlgo.py} | 89 +++------ ...gmentation.py => GateSegmentationAlgoA.py} | 61 ++---- .../tasks/gate/GateSegmentationAlgoB.py | 94 +++++++++ .../GateSegmentationAlgoC.py} | 78 ++------ perception/tasks/gate/archive/detectGate.py | 4 +- perception/tasks/gate/archive/threshTest.py | 3 + perception/tasks/gate/legacy/GatePerceiver.py | 9 - .../tasks/gate/legacy/GateSegmentationAlgo.py | 108 ---------- .../tasks/path_marker/PathMarkerPerceiver.py | 9 - .../{gate/legacy => path_marker}/__init__.py | 0 .../path_marker/path_marker_detection.py | 16 +- perception/tasks/roulette/__init__.py | 0 .../tasks/roulette/spinny_wheel_detection.py | 119 +++++++++++ .../{spinny => roulette}/threshslider.py | 106 ++++++---- perception/tasks/sanity_test.py | 2 + .../segmentation/GateTaskExample.py.orig | 86 -------- perception/tasks/segmentation/__init__.py | 0 .../tasks/segmentation/aggregateRescaling.py | 8 +- .../tasks/segmentation/combinedFilter.py | 4 +- perception/tasks/segmentation/kmeans.py | 99 +++++++++ .../peak_removal_adaptive_thresholding.py | 188 ++++++++++-------- perception/tasks/slots/__init__.py | 0 .../play_slots_detection.py | 2 + .../tasks/spinny/spinny_wheel_detection.py | 112 ----------- perception/vis/FrameWrapper.py | 17 +- .../{tasks/TestTasks => vis}/TestAlgo.py | 24 ++- .../vis/{window_builder.py => Visualizer.py} | 10 + perception/vis/algo_stats | Bin 21410 -> 0 bytes perception/vis/vis.py | 133 ++++++------- requirements.txt | 12 +- wiki/flowchart.png | Bin 237062 -> 0 bytes 38 files changed, 701 insertions(+), 760 deletions(-) create mode 100644 .gitattributes delete mode 100644 perception/tasks/cross/CrossPerceiver.py rename perception/tasks/{TestTasks => cross}/__init__.py (100%) rename perception/tasks/gate/{GateCenter.py => GateCenterAlgo.py} (57%) rename perception/tasks/gate/{GateSegmentation.py => GateSegmentationAlgoA.py} (62%) create mode 100644 perception/tasks/gate/GateSegmentationAlgoB.py rename perception/tasks/{TestTasks/GateSegmentationAlgo.py => gate/GateSegmentationAlgoC.py} (55%) delete mode 100644 perception/tasks/gate/legacy/GatePerceiver.py delete mode 100644 perception/tasks/gate/legacy/GateSegmentationAlgo.py delete mode 100644 perception/tasks/path_marker/PathMarkerPerceiver.py rename perception/tasks/{gate/legacy => path_marker}/__init__.py (100%) create mode 100644 perception/tasks/roulette/__init__.py create mode 100644 perception/tasks/roulette/spinny_wheel_detection.py rename perception/tasks/{spinny => roulette}/threshslider.py (66%) delete mode 100644 perception/tasks/segmentation/GateTaskExample.py.orig create mode 100644 perception/tasks/segmentation/__init__.py create mode 100644 perception/tasks/segmentation/kmeans.py create mode 100644 perception/tasks/slots/__init__.py rename perception/tasks/{path_marker => slots}/play_slots_detection.py (99%) delete mode 100644 perception/tasks/spinny/spinny_wheel_detection.py rename perception/{tasks/TestTasks => vis}/TestAlgo.py (54%) rename perception/vis/{window_builder.py => Visualizer.py} (86%) delete mode 100644 perception/vis/algo_stats delete mode 100644 wiki/flowchart.png diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..486a232 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.zip filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore index f42b50c..ae9b556 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,5 @@ __pycache__/ # IDE files .idea .vs_code/ + +data/ diff --git a/perception/__init__.py b/perception/__init__.py index 522e077..74b1032 100644 --- a/perception/__init__.py +++ b/perception/__init__.py @@ -1,8 +1,14 @@ -import perception.tasks.TestTasks.TestAlgo as TestAlgo -import perception.tasks.gate.GateCenter as GateSeg +import perception.vis.TestAlgo as TestAlgo +import perception.tasks.gate.GateCenterAlgo as GateSeg +import perception.tasks.gate.GateSegmentationAlgoA as GateSegA +import perception.tasks.gate.GateSegmentationAlgoB as GateSegB +import perception.tasks.gate.GateSegmentationAlgoC as GateSegC # import perception.tasks as tasks ALGOS = { 'test': TestAlgo.TestAlgo, - 'gateseg': GateSeg.GateCenter + 'gateseg': GateSeg.GateCenterAlgo, + 'gatesegA': GateSegA.GateSegmentationAlgoA, + 'gatesegB': GateSegB.GateSegmentationAlgoB, + 'gatesegC': GateSegC.GateSegmentationAlgoC } diff --git a/perception/tasks/TaskPerceiver.py b/perception/tasks/TaskPerceiver.py index 605c090..6c55e69 100644 --- a/perception/tasks/TaskPerceiver.py +++ b/perception/tasks/TaskPerceiver.py @@ -1,8 +1,8 @@ -from typing import Any, Dict, Tuple +from typing import Any, Dict import numpy as np -class TaskPerceiver: +class TaskPerceiver: def __init__(self, **kwargs): """Initializes the TaskPerceiver. Args: @@ -11,22 +11,18 @@ def __init__(self, **kwargs): for the slider which controls this variable, and default_val is the initial value of the slider. """ - self.time = 0 self.kwargs = kwargs def analyze(self, frame: np.ndarray, debug: bool, slider_vals: Dict[str, int]) -> Any: """Runs the algorithm and returns the result. Args: - frame: The frame to analyze + frame: The frame to analyze debug: Whether or not to display intermediate images for debugging slider_vals: A list of names of the variables which the user should be able to control from the Visualizer, mapped to current slider value for that variable - Returns: - the result of the algorithm - debug frames must each be same size as original input frame. Might change this in the future. + Returns: + the result of the algorithm + debug frames must each be same size as original input frame. Might change this in the future. """ raise NotImplementedError("Need to implement with child class.") - - def var_info(self) -> Dict[str, Tuple[Tuple[int, int], int]]: - return self.kwargs \ No newline at end of file diff --git a/perception/tasks/cross/CrossPerceiver.py b/perception/tasks/cross/CrossPerceiver.py deleted file mode 100644 index 5c12123..0000000 --- a/perception/tasks/cross/CrossPerceiver.py +++ /dev/null @@ -1,8 +0,0 @@ -from collections import namedtuple -import numpy as np -import sys -from perception.tasks.TaskPerceiver import TaskPerceiver - -class CrossPerceiver(TaskPerceiver): - named_tuple = namedtuple("CrossOutput", ["centerx", "centery"]) - named_tuple_types = {centerx: np.int16, centery: np.int16} diff --git a/perception/tasks/TestTasks/__init__.py b/perception/tasks/cross/__init__.py similarity index 100% rename from perception/tasks/TestTasks/__init__.py rename to perception/tasks/cross/__init__.py diff --git a/perception/tasks/cross/cross_detection.py b/perception/tasks/cross/cross_detection.py index 0b49772..9410f4f 100644 --- a/perception/tasks/cross/cross_detection.py +++ b/perception/tasks/cross/cross_detection.py @@ -8,10 +8,10 @@ ############################################################################# sys.path.insert(0, '../background_removal') -from peak_removal_adaptive_thresholding import filter_out_highest_peak_multidim -from combined_filter import combined_filter +from perception.tasks.segmentation.peak_removal_adaptive_thresholding import filter_out_highest_peak_multidim +from perception.tasks.segmentation.combinedFilter import init_combined_filter -ret, frame = True, cv2.imread('../data/cross/cross.png') # https://i.imgur.com/rjv1Vcy.png +ret, frame = True, cv2.imread('../data/cross/cross.png') # https://i.imgur.com/rjv1Vcy.png # "hsv" = Apply hsv thresholding before trying to find the path marker # "multidim" = Apply filter_out_highest_peak_multidim @@ -29,7 +29,7 @@ def find_cross(frame, draw_figs=True): gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) ret, thresh = cv2.threshold(gray, 127, 255,0) - __, contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) + __, contours,hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) contours.sort(key=lambda c: cv2.contourArea(c), reverse=True) possible_crosses = [] @@ -44,17 +44,16 @@ def find_cross(frame, draw_figs=True): if defects is not None and len(defects) == 4: possible_crosses.append(defects) - if draw_figs: img = frame.copy() for defects in possible_crosses: for i in range(defects.shape[0]): - s,e,f,d = defects[i,0] + s, e, f, d = defects[i, 0] # start = tuple(cnt[s][0]) # end = tuple(cnt[e][0]) far = tuple(cnt[f][0]) # cv2.line(img,start,end,[0,255,0],2) - cv2.circle(img,far,5,[0,0,255],-1) + cv2.circle(img, far, 5, [0, 0, 255], -1) cv2.imshow('cross at contour number ' + str(i),img) cv2.imshow('original', frame) @@ -64,15 +63,15 @@ def find_cross(frame, draw_figs=True): ########################################### # Main Body ########################################### - +# TODO: port to vis if __name__ == "__main__": + combined_filter = init_combined_filter() + ret_tries = 0 - while(1 and ret_tries < 50): + while 1 and ret_tries < 50: # ret,frame = cap.read() - - if ret == True: + if ret: # frame = cv2.resize(frame, (0,0), fx=0.5, fy=0.5) - if thresholding == "multidim": votes1, threshed = filter_out_highest_peak_multidim(frame) threshed = cv2.morphologyEx(threshed, cv2.MORPH_OPEN, np.ones((5,5),np.uint8)) @@ -86,13 +85,9 @@ def find_cross(frame, draw_figs=True): ret_tries = 0 k = cv2.waitKey(60) & 0xff - if k == 27: # esc - if testing: - print("hsv thresholds:") - print(thresholds_used) + if k == 27: # esc break else: ret_tries += 1 cv2.destroyAllWindows() - cap.release() diff --git a/perception/tasks/gate/GateCenter.py b/perception/tasks/gate/GateCenterAlgo.py similarity index 57% rename from perception/tasks/gate/GateCenter.py rename to perception/tasks/gate/GateCenterAlgo.py index 4f90859..5c3e6f6 100644 --- a/perception/tasks/gate/GateCenter.py +++ b/perception/tasks/gate/GateCenterAlgo.py @@ -1,16 +1,14 @@ -from perception.tasks.gate.GateSegmentation import GateSegmentationAlgo +from perception.tasks.gate.GateSegmentationAlgoA import GateSegmentationAlgoA from perception.tasks.TaskPerceiver import TaskPerceiver from collections import namedtuple -import sys import numpy as np import math import cv2 as cv -import time import statistics -class GateCenter(TaskPerceiver): +class GateCenterAlgo(TaskPerceiver): center_x_locs, center_y_locs = [], [] output_class = namedtuple("GateOutput", ["centerx", "centery"]) output_type = {'centerx': np.int16, 'centery': np.int16} @@ -20,39 +18,43 @@ def __init__(self): self.gate_center = self.output_class(250, 250) self.use_optical_flow = False self.optical_flow_c = 0.1 - self.gate = GateSegmentationAlgo() + self.gate = GateSegmentationAlgoA() self.prvs = None + # TODO: do input and return typing def analyze(self, frame, debug, slider_vals): - self.optical_flow_c = slider_vals['optical_flow_c'] / 100 - rect1, rect2, debug_filter = self.gate.analyze(frame, True) + self.optical_flow_c = slider_vals['optical_flow_c']/100 + rect, debug_filters = self.gate.analyze(frame, True) + debug_filter = debug_filters[-1] + debug_filters = debug_filters[:-1] + if self.prvs is None: # frame = cv.resize(frame, None, fx=0.3, fy=0.3) self.prvs = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) - else: - if rect1 and rect2: - self.gate_center = self.get_center(rect1, rect2, frame) + else: + if rect[0] and rect[1]: + self.gate_center = self.get_center(rect[0], rect[1], frame) if self.use_optical_flow: - cv.circle(debug_filter, self.gate_center, 5, (3, 186, 252), -1) + cv.circle(debug_filter, self.gate_center, 5, (3,186,252), -1) else: - cv.circle(debug_filter, self.gate_center, 5, (0, 0, 255), -1) - + cv.circle(debug_filter, self.gate_center, 5, (0,0,255), -1) + if debug: - return (self.output_class(self.gate_center[0], self.gate_center[1]), [frame, debug_filter]) - return self.output_class(self.gate_center[0], self.gate_center[1]) + return (self.gate_center[0], self.gate_center[1]), list(debug_filters) + [debug_filter] + return (self.gate_center[0], self.gate_center[1]) def center_without_optical_flow(self, center_x, center_y): # get starting center location, averaging over the first 2510 frames if len(self.center_x_locs) == 0: self.center_x_locs.append(center_x) self.center_y_locs.append(center_y) - + elif len(self.center_x_locs) < 25: self.center_x_locs.append(center_x) self.center_y_locs.append(center_y) center_x = int(statistics.mean(self.center_x_locs)) center_y = int(statistics.mean(self.center_y_locs)) - + # use new center location only when it is close to the previous valid location else: self.center_x_locs.append(center_x) @@ -61,11 +63,11 @@ def center_without_optical_flow(self, center_x, center_y): self.center_y_locs.pop(0) x_temp_avg = int(statistics.mean(self.center_x_locs)) y_temp_avg = int(statistics.mean(self.center_y_locs)) - if math.sqrt((center_x - x_temp_avg) ** 2 + (center_y - y_temp_avg) ** 2) > 10: + if math.sqrt((center_x - x_temp_avg)**2 + (center_y - y_temp_avg)**2) > 10: center_x, center_y = int(x_temp_avg), int(y_temp_avg) - + return (center_x, center_y) - + def dense_optical_flow(self, frame): next_frame = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) flow = cv.calcOpticalFlowFarneback(self.prvs, next_frame, None, 0.5, 3, 15, 3, 5, 1.2, 0) @@ -82,12 +84,9 @@ def get_center(self, rect1, rect2, frame): x2, y2, w2, h2 = rect2 center_x, center_y = (x1 + x2) // 2, ((y1 + h1 // 2) + (y2 + h2 // 2)) // 2 self.prvs, mag, ang = self.dense_optical_flow(frame) - # print(np.mean(mag)) - if len(self.center_x_locs) < 25 or (np.mean(mag) < 40 and ((not self.use_optical_flow) or \ - (self.use_optical_flow and ( - center_x - self.gate_center[0]) ** 2 + ( - center_y - self.gate_center[ - 1]) ** 2 < 50))): + + if len(self.center_x_locs) < 25 or (np.mean(mag) < 40 and ((not self.use_optical_flow ) or \ + (self.use_optical_flow and (center_x - self.gate_center[0])**2 + (center_y - self.gate_center[1])**2 < 50))): self.use_optical_flow = False return self.center_without_optical_flow(center_x, center_y) self.use_optical_flow = True @@ -95,40 +94,6 @@ def get_center(self, rect1, rect2, frame): (int(self.gate_center[1] + self.optical_flow_c * np.mean(mag * np.sin(ang))))) -# this part is temporary and will be covered by other files in the future if __name__ == '__main__': - cap = cv.VideoCapture(sys.argv[1]) - ret_tries = 0 - start_time = time.time() - frame_count = 0 - paused = False - speed = 1 - ret, frame1 = cap.read() - frame1 = cv.resize(frame1, None, fx=0.3, fy=0.3) - prvs = cv.cvtColor(frame1, cv.COLOR_BGR2GRAY) - hsv = np.zeros_like(frame1) - hsv[..., 1] = 255 - gate_center = GateCenter() - while ret_tries < 50: - for _ in range(speed): - ret, frame = cap.read() - if frame_count == 1000: - break - if ret: - frame = cv.resize(frame, None, fx=0.3, fy=0.3) - center, filtered_frame = gate_center.analyze(frame, True) - cv.imshow('original', frame) - cv.imshow('filtered_frame', filtered_frame) - ret_tries = 0 - key = cv.waitKey(30) - if key == ord('q') or key == 27: - break - if key == ord('p'): - paused = not paused - if key == ord('i') and speed > 1: - speed -= 1 - if key == ord('o'): - speed += 1 - else: - ret_tries += 1 - frame_count += 1 \ No newline at end of file + from perception.vis.vis import run + run(['..\..\..\data\GOPR1142.MP4'], GateCenterAlgo(), False) \ No newline at end of file diff --git a/perception/tasks/gate/GateSegmentation.py b/perception/tasks/gate/GateSegmentationAlgoA.py similarity index 62% rename from perception/tasks/gate/GateSegmentation.py rename to perception/tasks/gate/GateSegmentationAlgoA.py index 2c4c052..5e3173f 100644 --- a/perception/tasks/gate/GateSegmentation.py +++ b/perception/tasks/gate/GateSegmentationAlgoA.py @@ -1,29 +1,28 @@ from perception.tasks.TaskPerceiver import TaskPerceiver from typing import Tuple -import sys from perception.tasks.segmentation.combinedFilter import init_combined_filter import numpy as np import cv2 as cv -import time -class GateSegmentationAlgo(TaskPerceiver): +class GateSegmentationAlgoA(TaskPerceiver): center_x_locs, center_y_locs = [], [] - + def __init__(self): super().__init__() self.combined_filter = init_combined_filter() + # TODO: fix return typing def analyze(self, frame: np.ndarray, debug: bool, slider_vals=None) -> Tuple[float, float]: """Takes in the background removed image and returns the center between the two gate posts. Args: frame: The background removed frame to analyze debug: Whether or not tot display intermediate images for debugging - Reurns: - (x,y) coordinate with center of gate - """ + Reurns: + (x,y) coordinate with center of gate + """ rect1, rect2 = None, None filtered_frame = self.combined_filter(frame, display_figs=False) @@ -33,19 +32,18 @@ def analyze(self, frame: np.ndarray, debug: bool, slider_vals=None) -> Tuple[flo upperbound = 255 _, thresh = cv.threshold(filtered_frame, lowerbound, upperbound, cv.THRESH_BINARY) debug_filter = cv.cvtColor(thresh, cv.COLOR_GRAY2BGR) - + cnt = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)[-2] - + area_diff = [] area_cnts = [] # remove all contours with zero area cnt = [cnt[i] for i in range(len(cnt)) if cv.contourArea(cnt[i]) > 0] - - for i in cnt: - area_cnt = cv.contourArea(i) + for c in cnt: + area_cnt = cv.contourArea(c) area_cnts.append(area_cnt) - area_rect = cv.boundingRect(i)[-2] * cv.boundingRect(i)[-1] + area_rect = cv.boundingRect(c)[-2] * cv.boundingRect(c)[-1] area_diff.append(abs((area_rect - area_cnt) / area_cnt)) if len(area_diff) >= 2: @@ -61,39 +59,10 @@ def analyze(self, frame: np.ndarray, debug: bool, slider_vals=None) -> Tuple[flo cv.rectangle(debug_filter, (x2, y2), (x2 + w2, y2 + h2), (0, 255, 0), 2) if debug: - return (rect1, rect2, debug_filter) + return (rect1, rect2), (frame, debug_filter) return (rect1, rect2) + - -# this part is temporary and will be covered by other files in the future if __name__ == '__main__': - cap = cv.VideoCapture(sys.argv[1]) - ret_tries = 0 - start_time = time.time() - frame_count = 0 - paused = False - speed = 1 - gate_task = GateSegmentationAlgo() - while ret_tries < 50: - for _ in range(speed): - ret, frame = cap.read() - if frame_count == 1000: - break - if ret: - frame = cv.resize(frame, None, fx=0.3, fy=0.3) - rect1, rect2, filtered_frame = gate_task.analyze(frame, True) - cv.imshow('original', frame) - cv.imshow('filtered_frame', filtered_frame) - ret_tries = 0 - key = cv.waitKey(30) - if key == ord('q') or key == 27: - break - if key == ord('p'): - paused = not paused - if key == ord('i') and speed > 1: - speed -= 1 - if key == ord('o'): - speed += 1 - else: - ret_tries += 1 - frame_count += 1 \ No newline at end of file + from perception.vis.vis import run + run(['..\..\..\data\GOPR1142.MP4'], GateSegmentationAlgoA(), False) diff --git a/perception/tasks/gate/GateSegmentationAlgoB.py b/perception/tasks/gate/GateSegmentationAlgoB.py new file mode 100644 index 0000000..8f0a54e --- /dev/null +++ b/perception/tasks/gate/GateSegmentationAlgoB.py @@ -0,0 +1,94 @@ +from typing import Tuple + +from perception.tasks.TaskPerceiver import TaskPerceiver +from perception.tasks.segmentation.combinedFilter import init_combined_filter +import numpy as np +import cv2 as cv +import statistics + + +class GateSegmentationAlgoB(TaskPerceiver): + center_x_locs, center_y_locs = [], [] + + def __init__(self): + super().__init__() + self.combined_filter = init_combined_filter() + + def analyze(self, frame: np.ndarray, debug: bool) -> Tuple[float, float]: + """Takes in the background removed image and returns the center between + the two gate posts. + Args: + frame: The background removed frame to analyze + debug: Whether or not tot display intermediate images for debugging + Reurns: + (x,y) coordinate with center of gate + """ + gate_center = (250, 250) + filtered_frame = self.combined_filter(frame, display_figs=False) + + max_brightness = max([b for b in filtered_frame[:, :, 0][0]]) + lowerbound = max(0.84*max_brightness, 120) + upperbound = 255 + _,thresh = cv.threshold(filtered_frame,lowerbound, upperbound, cv.THRESH_BINARY) + debug_filter = cv.cvtColor(thresh, cv.COLOR_GRAY2BGR) + + cnt = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)[-2] + + area_diff = [] + area_cnts = [] + + # remove all contours with zero area + cnt = [cnt[i] for i in range(len(cnt)) if cv.contourArea(cnt[i]) > 0] + + for c in cnt: + area_cnt = cv.contourArea(c) + area_cnts.append(area_cnt) + area_rect = cv.boundingRect(c)[-2] * cv.boundingRect(c)[-1] + area_diff.append(abs((area_rect - area_cnt)/area_cnt)) + + if len(area_diff) >= 2: + largest_area_idx = [area_cnts.index(sorted(area_cnts, reverse=True)[i]) for i in range(min(3, len(cnt)))] + area_diff_copy = sorted([area_diff[i] for i in largest_area_idx]) + min_i1, min_i2 = area_diff.index(area_diff_copy[0]), area_diff.index(area_diff_copy[1]) + + (x1, y1, w1, h1) = cv.boundingRect(cnt[min_i1]) + (x2, y2, w2, h2) = cv.boundingRect(cnt[min_i2]) + cv.rectangle(debug_filter, (x1, y1), (x1+w1, y1+h1), (0,255,0), 2) + cv.rectangle(debug_filter, (x2, y2), (x2+w2, y2+h2), (0,255,0), 2) + + # drawing center dot + center_x, center_y = (x1+x2)//2, ((y1+h1//2)+(y2+h2//2))//2 + gate_center = self.get_actual_center(center_x, center_y) + cv.circle(debug_filter, gate_center, 5, (0,0,255), -1) + + if debug: + return (gate_center[0], gate_center[1]), (frame, debug_filter) + return (gate_center[0], gate_center[1]) + + def get_actual_center(self, center_x, center_y): + # get starting center location, averaging over the first 2510 frames + if len(self.center_x_locs) == 0: + self.center_x_locs.append(center_x) + self.center_y_locs.append(center_y) + + elif len(self.center_x_locs) < 25: + self.center_x_locs.append(center_x) + self.center_y_locs.append(center_y) + center_x = int(statistics.mean(self.center_x_locs)) + center_y = int(statistics.mean(self.center_y_locs)) + + # use new center location only when it is close to the previous valid location + else: + if abs(center_x - self.center_x_locs[-1]) > 10 or \ + abs(center_y - self.center_y_locs[-1]) > 10: + center_x, center_y = self.center_x_locs[-1], self.center_y_locs[-1] + else: + self.center_x_locs.append(center_x) + self.center_y_locs.append(center_y) + + return (center_x, center_y) + + +if __name__ == '__main__': + from perception.vis.vis import run + run(['..\..\..\data\GOPR1142.MP4'], GateSegmentationAlgoB(), False) diff --git a/perception/tasks/TestTasks/GateSegmentationAlgo.py b/perception/tasks/gate/GateSegmentationAlgoC.py similarity index 55% rename from perception/tasks/TestTasks/GateSegmentationAlgo.py rename to perception/tasks/gate/GateSegmentationAlgoC.py index f747dd2..f3bdc55 100644 --- a/perception/tasks/TestTasks/GateSegmentationAlgo.py +++ b/perception/tasks/gate/GateSegmentationAlgoC.py @@ -1,35 +1,33 @@ from perception.tasks.TaskPerceiver import TaskPerceiver from typing import Tuple -import sys -import os -from pathlib import Path from collections import namedtuple from perception.tasks.segmentation.combinedFilter import init_combined_filter import numpy as np import cv2 as cv -import time -class GateSegmentationAlgo(TaskPerceiver): + +class GateSegmentationAlgoC(TaskPerceiver): __past_centers = [] __ema = None output_class = namedtuple("GateOutput", ["centerx", "centery"]) output_type = {'centerx': np.int16, 'centery': np.int16} def __init__(self, alpha=0.1): - super() + super().__init__() self.__alpha = alpha self.combined_filter = init_combined_filter() + # TODO: fix return typing def analyze(self, frame: np.ndarray, debug: bool) -> Tuple[float, float]: """Takes in the background removed image and returns the center between - the two gate posts. - Args: - frame: The background removed frame to analyze. - debug: Whether or not to display intermediate images for debugging. - Returns: - (x,y) coordinate with center of gate - """ + the two gate posts. + Args: + frame: The background removed frame to analyze. + debug: Whether or not to display intermediate images for debugging. + Returns: + (x,y) coordinate with center of gate + """ gate_center = self.output_class(250, 250) filtered_frame = self.combined_filter(frame, display_figs=False) filtered_frame_copies = [filtered_frame for _ in range(3)] @@ -37,9 +35,9 @@ def analyze(self, frame: np.ndarray, debug: bool) -> Tuple[float, float]: mask = cv.inRange( stacked_filter_frames, np.array([100, 100, 100]), np.array([255, 255, 255]) ) - _, contours, _ = cv.findContours(mask, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE) - if contours: - contours.sort(key=self.findStraightness, reverse=True) + contours = cv.findContours(mask, cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE)[-2] + if len(contours) > 0: + contours.sort(reverse=True, key=self.findStraightness) cnts = contours[:2] rects = [cv.minAreaRect(c) for c in cnts] centers = [np.array(r[0]) for r in rects] @@ -56,6 +54,7 @@ def analyze(self, frame: np.ndarray, debug: bool) -> Tuple[float, float]: self.__alpha * gate_center + (1 - self.__alpha) * self.__ema ) gate_center = (int(self.__ema[0]), int(self.__ema[1])) + # TODO: clean this up via hyperparam or move to gate center algo # if len(self.__past_centers) < 15: # self.__past_centers += [gate_center] # else: @@ -66,53 +65,16 @@ def analyze(self, frame: np.ndarray, debug: bool) -> Tuple[float, float]: cv.circle(stacked_filter_frames, gate_center, 10, (0, 255, 0), -1) if debug: - return ( - self.output_class(gate_center[0], gate_center[1]), - [stacked_filter_frames], - ) - return self.output_class(gate_center[0], gate_center[1]) + return (gate_center[0], gate_center[1]), (frame, stacked_filter_frames) + return (gate_center[0], gate_center[1]) - def findStraightness( - self, contour - ): # output number = contour area/convex area, the bigger the straightest + def findStraightness(self, contour): # output number = contour area/convex area, the bigger the straightest hull = cv.convexHull(contour, False) contour_area = cv.contourArea(contour) hull_area = cv.contourArea(hull) return 10 * contour_area - 5 * hull_area -# this part is temporary and will be covered by other files in the future if __name__ == '__main__': - combined_filter = init_combined_filter() - cap = cv.VideoCapture(sys.argv[1]) - ret_tries = 0 - gate_task = GateSegmentationAlgo(0.1) - # once = False - start_time = time.time() - frame_count = 0 - while ret_tries < 50: - ret, frame = cap.read() - if frame_count == 1000: - break - if ret: - frame = cv.resize(frame, None, fx=0.4, fy=0.4) - - ### FUNCTION CALL, can change this - center, filtered_frame = gate_task.analyze(frame, True) - # cProfile.run("gate_task.analyze(frame, True)") - # cv.putText(frame, "x: %.2f" % x + " y: %.2f" % y, - # (20, frame.shape[0] - 20), cv.FONT_HERSHEY_SIMPLEX, - # 2.0, (0, 165, 255), 3) - cv.imshow('original', frame) - cv.imshow('filtered_frame', filtered_frame) - # if not once: - # print(filtered_frame) - # once = True - ret_tries = 0 - k = cv.waitKey(60) & 0xFF - if k == 27: - break - else: - ret_tries += 1 - frame_count += 1 - # print(frame_count / (time.time() - start_time)) + from perception.vis.vis import run + run(['..\..\..\data\GOPR1142.MP4'], GateSegmentationAlgoC(), False) diff --git a/perception/tasks/gate/archive/detectGate.py b/perception/tasks/gate/archive/detectGate.py index cf309ff..5f7e868 100644 --- a/perception/tasks/gate/archive/detectGate.py +++ b/perception/tasks/gate/archive/detectGate.py @@ -1,10 +1,10 @@ import numpy as np import cv2 import argparse -import sys -from PIL import Image import time +# TODO: port to vis + TaskPerciever format or remove + video_file = 'truncated_semi_final_run.mp4' EPSILON = 40 OVERLAP_EPS = 40 diff --git a/perception/tasks/gate/archive/threshTest.py b/perception/tasks/gate/archive/threshTest.py index 0bd6c71..70d8aa5 100644 --- a/perception/tasks/gate/archive/threshTest.py +++ b/perception/tasks/gate/archive/threshTest.py @@ -2,6 +2,9 @@ import cv2 as cv import argparse import numpy as np + +# TODO: port to vis + TaskPerciever format or remove + #expectations #contours closest to the last ones #should know when we passed through the gate diff --git a/perception/tasks/gate/legacy/GatePerceiver.py b/perception/tasks/gate/legacy/GatePerceiver.py deleted file mode 100644 index 566b48d..0000000 --- a/perception/tasks/gate/legacy/GatePerceiver.py +++ /dev/null @@ -1,9 +0,0 @@ -from collections import namedtuple -import numpy as np -import sys -sys.path.insert(0, '../..') -from TaskPerceiver import TaskPerceiver - -class GatePerceiver(TaskPerceiver): - output_class = namedtuple("GateOutput", ["centerx", "centery"]) - output_type = {'centerx': np.int16, 'centery': np.int16} diff --git a/perception/tasks/gate/legacy/GateSegmentationAlgo.py b/perception/tasks/gate/legacy/GateSegmentationAlgo.py deleted file mode 100644 index 191865c..0000000 --- a/perception/tasks/gate/legacy/GateSegmentationAlgo.py +++ /dev/null @@ -1,108 +0,0 @@ -from GatePerceiver import GatePerceiver -from typing import Tuple -import sys -import os -sys.path.append(os.path.dirname(__file__)) - - -from segmentation.combinedFilter import init_combined_filter -import numpy as np -import cv2 as cv -import time -import cProfile - -class GateSegmentationAlgo(GatePerceiver): - __past_centers = [] - __ema = None - - def __init__(self, alpha): - super() - self.__alpha = alpha - - def analyze(self, frame: np.ndarray, debug: bool) -> Tuple[float, float]: - """Takes in the background removed image and returns the center between - the two gate posts. - Args: - frame: The background removed frame to analyze - debug: Whether or not tot display intermediate images for debugging - Reurns: - (x,y) coordinate with center of gate - """ - gate_center = self.output_class(250, 250) - filtered_frame = combined_filter(frame, display_figs=False) - filtered_frame_copies = [filtered_frame for _ in range(3)] - stacked_filter_frames = np.concatenate(filtered_frame_copies, axis = 2) - mask = cv.inRange(stacked_filter_frames, - np.array([100, 100, 100]), np.array([255, 255, 255])) - _, contours, _ = cv.findContours(mask, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE) - if contours: - contours.sort(key=self.findStraightness, reverse=True) - cnts = contours[:2] - rects = [cv.minAreaRect(c) for c in cnts] - centers = [np.array(r[0]) for r in rects] - boxpts = [cv.boxPoints(r) for r in rects] - box = [np.int0(b) for b in boxpts] - for b in box: - cv.drawContours(stacked_filter_frames,[b],0,(0,0,255),5) - if len(centers) >= 2: - gate_center = (centers[0] + centers[1]) * 0.5 - if self.__ema is None: - self.__ema = gate_center - else: - self.__ema = self.__alpha*gate_center + (1 - self.__alpha)*self.__ema - gate_center = (int(self.__ema[0]), int(self.__ema[1])) - # if len(self.__past_centers) < 15: - # self.__past_centers += [gate_center] - # else: - # self.__past_centers.pop(0) - # self.__past_centers += [gate_center] - # gate_center = sum(self.__past_centers) / len(self.__past_centers) - # gate_center = (int(gate_center[0]), int(gate_center[1])) - cv.circle(stacked_filter_frames, gate_center, 10, (0,255,0), -1) - - if debug: - return (self.output_class(gate_center[0], gate_center[1]), stacked_filter_frames) - return self.output_class(gate_center[0], gate_center[1]) - - def findStraightness(self, contour): # output number = contour area/convex area, the bigger the straightest - hull = cv.convexHull(contour, False) - contour_area = cv.contourArea(contour) - hull_area = cv.contourArea(hull) - return 10 * contour_area - 5 * hull_area - -# this part is temporary and will be covered by other files in the future -if __name__ == '__main__': - combined_filter = init_combined_filter() - cap = cv.VideoCapture(sys.argv[1]) - ret_tries = 0 - gate_task = GateSegmentationAlgo(0.1) - # once = False - start_time = time.time() - frame_count = 0 - while ret_tries < 50: - ret, frame = cap.read() - if frame_count == 1000: - break - if ret: - frame = cv.resize(frame, None, fx=0.4, fy=0.4) - - - ### FUNCTION CALL, can change this - center, filtered_frame = gate_task.analyze(frame, True) - # cProfile.run("gate_task.analyze(frame, True)") - # cv.putText(frame, "x: %.2f" % x + " y: %.2f" % y, - # (20, frame.shape[0] - 20), cv.FONT_HERSHEY_SIMPLEX, - # 2.0, (0, 165, 255), 3) - cv.imshow('original', frame) - cv.imshow('filtered_frame', filtered_frame) - # if not once: - # print(filtered_frame) - # once = True - ret_tries = 0 - k = cv.waitKey(60) & 0xff - if k == 27: - break - else: - ret_tries += 1 - frame_count += 1 - #print(frame_count / (time.time() - start_time)) diff --git a/perception/tasks/path_marker/PathMarkerPerceiver.py b/perception/tasks/path_marker/PathMarkerPerceiver.py deleted file mode 100644 index d77335d..0000000 --- a/perception/tasks/path_marker/PathMarkerPerceiver.py +++ /dev/null @@ -1,9 +0,0 @@ -from collections import namedtuple -import numpy as np -import sys -sys.path.insert(0, '..') -from TaskPerceiver import TaskPerceiver - -class PathMarkerPerceiver(TaskPerceiver): - named_tuple = namedtuple("PathMarkerOutput", ["angle"]) - named_tuple_types = {angle: np.float64} diff --git a/perception/tasks/gate/legacy/__init__.py b/perception/tasks/path_marker/__init__.py similarity index 100% rename from perception/tasks/gate/legacy/__init__.py rename to perception/tasks/path_marker/__init__.py diff --git a/perception/tasks/path_marker/path_marker_detection.py b/perception/tasks/path_marker/path_marker_detection.py index f788bd5..83eef2c 100644 --- a/perception/tasks/path_marker/path_marker_detection.py +++ b/perception/tasks/path_marker/path_marker_detection.py @@ -1,6 +1,8 @@ -from combined_filter import init_combined_filter +from perception.tasks.segmentation.combinedFilter import init_combined_filter from typing import Union +# TODO: port to vis + TaskPerciever format or remove + if __name__ == "__main__": import numpy as np import cv2 @@ -31,7 +33,7 @@ def thresh_by_contour_size( frame, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE ) if contours is not None: - contours.sort(key=lambda c: cv2.contourArea(c), reverse=True) + contours.sort(key=cv2.contourArea, reverse=True) contours = contours[:num_contours] threshed = np.zeros(frame.shape, np.uint8) @@ -126,13 +128,11 @@ def line_length(line): ) return bot_angle, top_angle - else: - if draw_figs: - cv2.imshow('lines bottom', frame) - cv2.imshow('lines top', frame) - cv2.imshow('frame with path marker angles', frame) - return None + if draw_figs: + cv2.imshow('lines bottom', frame) + cv2.imshow('lines top', frame) + cv2.imshow('frame with path marker angles', frame) def path_marker_get_new_heading(cap, is_approaching, draw_figs=False): diff --git a/perception/tasks/roulette/__init__.py b/perception/tasks/roulette/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/perception/tasks/roulette/spinny_wheel_detection.py b/perception/tasks/roulette/spinny_wheel_detection.py new file mode 100644 index 0000000..463c73a --- /dev/null +++ b/perception/tasks/roulette/spinny_wheel_detection.py @@ -0,0 +1,119 @@ +import numpy as np +import cv2 +import argparse +import sys +import time + +# TODO: port to vis + TaskPerciever format or remove + +# CHANGE PARAMETER IN CALL TO "THRESH" FUNCTION TO CHANGE COLOR +file_name = "GOPR1145.MP4" # video file from dropbox +vid = cv2.VideoCapture(file_name) +frames = 0 +avgLength = 10 +centers = [] + + +def thresh(frame, color='red'): + blur = cv2.GaussianBlur(frame, (5, 5), 0) + hsv = cv2.cvtColor(blur, cv2.COLOR_BGR2HSV) + + if color == 'red': + lower = np.uint8([29, 77, 36]) + upper = np.uint8([130, 250, 255]) + mask = cv2.inRange(hsv, lower, upper) + mask = cv2.bitwise_not(mask) + elif color == 'blue': + lower = np.uint8([86, 141, 0]) + upper = np.uint8([106, 220, 168]) + mask = cv2.inRange(hsv, lower, upper) + else: + lower = np.uint8([66, 208, 157]) + upper = np.uint8([86, 255, 209]) + mask = cv2.inRange(hsv, lower, upper) + + return mask + + +def heuristic(contour): + rect = cv2.minAreaRect(contour) + area = rect[1][0] * rect[1][1] + diff = cv2.contourArea(cv2.convexHull(contour)) - cv2.contourArea(contour) + cent = rect[0] + dist = 0 + if len(likelySection) > 1 and allLarger(60): + cen0 = cv2.minAreaRect(likelySection[0]['cont'])[0] + dis0 = np.linalg.norm(np.array(cent) - np.array(cen0)) + cen1 = cv2.minAreaRect(likelySection[1]['cont'])[0] + dis1 = np.linalg.norm(np.array(cent) - np.array(cen1)) + dist = min([dis0, dis1]) + heur = area - 3 * diff - 20 * dist + return heur + + +def allLarger(thresh): + for cnt in likelySection: + if cnt['heur'] < thresh: + return False + return True + + +def drawRects(frame, contours): + tempPts = [] + for cnt in contours: + rect = cv2.minAreaRect(cnt['cont']) + boxpts = cv2.boxPoints(rect) + box = np.int0(boxpts) + cv2.drawContours(frame, [box], 0, (0, 0, 255), 1) + cv2.drawContours(frame, [cnt['cont']], 0, (0, 255, 0), 1) + cv2.drawContours(frame, [cv2.convexHull(cnt['cont'])], 0, (255, 0, 0), 1) + tempPts.append(rect[0]) + # cv2.putText(frame, str(cnt['heur']), (int(rect[0][0]), int(rect[0][1])), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255)) + if len(tempPts) > 1 and allLarger(60): + cv2.circle(frame, (int(tempPts[0][0]), int(tempPts[0][1])), 10, (0, 0, 255), -1) + cv2.circle(frame, (int(tempPts[1][0]), int(tempPts[1][1])), 10, (0, 0, 255), -1) + + +def midPt(pt1, pt2): + return ((pt1[0] + pt2[0]) / 2, (pt1[1] + pt2[1]) / 2) + + +def getAvgPt(pt): + points.append(pt) + exes = list(map(lambda x: x[0], points)) + whys = list(map(lambda y: y[1], points)) + + if len(points) > 50: + del points[:10] + return (int(sum(exes) / len(exes)), int(sum(whys) / len(whys))) + + +likelySection = [] +points = [] +while vid.isOpened(): + start = time.time() + ret, frame = vid.read() + if (ret == False): + continue + + threshed = thresh(frame, 'other') + res, contours, hierarchy = cv2.findContours(threshed, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) + + contours.sort(key=heuristic, reverse=True) + if len(contours) > 1: + c1 = contours[0] + c2 = contours[1] + heur0 = heuristic(c1) + heur1 = heuristic(c2) + likelySection = [{'cont': contours[0], 'heur': heur0}, {'cont': contours[1], 'heur': heur1}] + untampered = np.copy(frame) + if contours: + drawRects(frame, likelySection) + cv2.imshow("Frame", frame) + cv2.imshow('Res', res) + + if (cv2.waitKey(1) & 0xFF) == ord('q') or frames > 900: + break + +vid.release() +cv2.destroyAllWindows() diff --git a/perception/tasks/spinny/threshslider.py b/perception/tasks/roulette/threshslider.py similarity index 66% rename from perception/tasks/spinny/threshslider.py rename to perception/tasks/roulette/threshslider.py index e8bf654..fadc915 100644 --- a/perception/tasks/spinny/threshslider.py +++ b/perception/tasks/roulette/threshslider.py @@ -2,20 +2,23 @@ import cv2 as cv import argparse import numpy as np -#expectations -#contours closest to the last ones -#should know when we passed through the gate + +# TODO: port to vis + TaskPerciever format or remove + +# expectations +# contours closest to the last ones +# should know when we passed through the gate """ IMPORTANT!!!! RUN THIS WITH $ python3 threshTest.py GOPR1142.mp4 """ max_value = 255 -max_value_H = 360//2 -low_H = 86#49#29#0 -low_S = 141#77#0 -low_V = 0#36#0 For Small sector, increasing lower V bound reduces -high_H = 106#130#max_value_H -high_S = 217#250#max_value -high_V = 168#max_value +max_value_H = 360 // 2 +low_H = 86 # 49#29#0 +low_S = 141 # 77#0 +low_V = 0 # 36#0 For Small sector, increasing lower V bound reduces +high_H = 106 # 130#max_value_H +high_S = 217 # 250#max_value +high_V = 168 # max_value window_capture_name = 'Video Capture' window_detection_name = 'Object Detection' low_H_name = 'Low H' @@ -24,63 +27,78 @@ high_H_name = 'High H' high_S_name = 'High S' high_V_name = 'High V' + + def on_low_H_thresh_trackbar(val): global low_H global high_H low_H = val - low_H = min(high_H-1, low_H) + low_H = min(high_H - 1, low_H) cv.setTrackbarPos(low_H_name, window_detection_name, low_H) + + def on_high_H_thresh_trackbar(val): global low_H global high_H high_H = val - high_H = max(high_H, low_H+1) + high_H = max(high_H, low_H + 1) cv.setTrackbarPos(high_H_name, window_detection_name, high_H) + + def on_low_S_thresh_trackbar(val): global low_S global high_S low_S = val - low_S = min(high_S-1, low_S) + low_S = min(high_S - 1, low_S) cv.setTrackbarPos(low_S_name, window_detection_name, low_S) + + def on_high_S_thresh_trackbar(val): global low_S global high_S high_S = val - high_S = max(high_S, low_S+1) + high_S = max(high_S, low_S + 1) cv.setTrackbarPos(high_S_name, window_detection_name, high_S) + + def on_low_V_thresh_trackbar(val): global low_V global high_V low_V = val - low_V = min(high_V-1, low_V) + low_V = min(high_V - 1, low_V) cv.setTrackbarPos(low_V_name, window_detection_name, low_V) + + def on_high_V_thresh_trackbar(val): global low_V global high_V high_V = val - high_V = max(high_V, low_V+1) + high_V = max(high_V, low_V + 1) cv.setTrackbarPos(high_V_name, window_detection_name, high_V) + def drawRects(frame, contours): tempPts = [] for cnt in contours: rect = cv.minAreaRect(cnt['cont']) boxpts = cv.boxPoints(rect) box = np.int0(boxpts) - cv.drawContours(frame,[box],0,(0,0,255),1) - cv.drawContours(frame, [cnt['cont']],0,(0,255,0),1) - cv.drawContours(frame, [cv.convexHull(cnt['cont'])],0,(255,0,0),1) + cv.drawContours(frame, [box], 0, (0, 0, 255), 1) + cv.drawContours(frame, [cnt['cont']], 0, (0, 255, 0), 1) + cv.drawContours(frame, [cv.convexHull(cnt['cont'])], 0, (255, 0, 0), 1) tempPts.append(rect[0]) cv.putText(frame, str(cnt['heur']), (int(rect[0][0]), int(rect[0][1])), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255)) if len(tempPts) > 1 and allLarger(60): - #global paused + # global paused paused = True avgPt = getAvgPt(midPt(tempPts[0], tempPts[1])) - cv.circle(frame, (avgPt[0], avgPt[1]), 10, (0,0,255), -1) + cv.circle(frame, (avgPt[0], avgPt[1]), 10, (0, 0, 255), -1) + def midPt(pt1, pt2): return ((pt1[0] + pt2[0]) / 2, (pt1[1] + pt2[1]) / 2) + def getAvgPt(pt): points.append(pt) exes = list(map(lambda x: x[0], points)) @@ -90,6 +108,7 @@ def getAvgPt(pt): del points[:10] return (int(sum(exes) / len(exes)), int(sum(whys) / len(whys))) + """ def findLikelyGate(rectList, contours): if not (rectList and contours): @@ -101,6 +120,7 @@ def findLikelyGate(rectList, contours): return """ + def heuristic(contour): rect = cv.minAreaRect(contour) area = rect[1][0] * rect[1][1] @@ -113,16 +133,18 @@ def heuristic(contour): cen1 = cv.minAreaRect(likelyGate[1]['cont'])[0] dis1 = np.linalg.norm(np.array(cent) - np.array(cen1)) dist = min([dis0, dis1]) - heur = area - 3 * diff - 20 * dist #only factor in dist with all heurs larger than 60 - #print(heur) + heur = area - 3 * diff - 20 * dist # only factor in dist with all heurs larger than 60 + # print(heur) return heur + def allLarger(thresh): for cnt in likelyGate: if cnt['heur'] < thresh: return False return True + parser = argparse.ArgumentParser(description='Code for Thresholding Operations using inRange tutorial.') parser.add_argument('camera', help='Camera devide number.', default=0, type=str) args = parser.parse_args() @@ -131,14 +153,14 @@ def allLarger(thresh): cv.namedWindow(window_capture_name) cv.namedWindow(window_detection_name) -cv.createTrackbar(low_H_name, window_detection_name , low_H, max_value_H, on_low_H_thresh_trackbar) -cv.createTrackbar(high_H_name, window_detection_name , high_H, max_value_H, on_high_H_thresh_trackbar) -cv.createTrackbar(low_S_name, window_detection_name , low_S, max_value, on_low_S_thresh_trackbar) -cv.createTrackbar(high_S_name, window_detection_name , high_S, max_value, on_high_S_thresh_trackbar) -cv.createTrackbar(low_V_name, window_detection_name , low_V, max_value, on_low_V_thresh_trackbar) -cv.createTrackbar(high_V_name, window_detection_name , high_V, max_value, on_high_V_thresh_trackbar) +cv.createTrackbar(low_H_name, window_detection_name, low_H, max_value_H, on_low_H_thresh_trackbar) +cv.createTrackbar(high_H_name, window_detection_name, high_H, max_value_H, on_high_H_thresh_trackbar) +cv.createTrackbar(low_S_name, window_detection_name, low_S, max_value, on_low_S_thresh_trackbar) +cv.createTrackbar(high_S_name, window_detection_name, high_S, max_value, on_high_S_thresh_trackbar) +cv.createTrackbar(low_V_name, window_detection_name, low_V, max_value, on_low_V_thresh_trackbar) +cv.createTrackbar(high_V_name, window_detection_name, high_V, max_value, on_high_V_thresh_trackbar) -#cv.createTrackbar('low_canny', 'canny', low_canny, 500, lcanny) +# cv.createTrackbar('low_canny', 'canny', low_canny, 500, lcanny) paused = False likelyGate = [] @@ -150,15 +172,15 @@ def allLarger(thresh): frame = untampered if ret: if not paused: - frame = cv.resize(frame, (0,0), fx=0.5, fy=0.5) + frame = cv.resize(frame, (0, 0), fx=0.5, fy=0.5) blur = cv.GaussianBlur(frame, (5, 5), 0) frame_HSV = cv.cvtColor(blur, cv.COLOR_BGR2HSV) - #frame_gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) - #canny = cv.Canny(frame_gray, 0) - frame_threshold = cv.inRange(frame_HSV, (low_H, low_S, low_V), (high_H, high_S, high_V)) #low_S ideal = 98 - - #frame_threshold = cv.bitwise_not(frame_threshold) - res = cv.bitwise_and(frame,frame, mask= frame_threshold) + # frame_gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) + # canny = cv.Canny(frame_gray, 0) + frame_threshold = cv.inRange(frame_HSV, (low_H, low_S, low_V), (high_H, high_S, high_V)) # low_S ideal = 98 + + # frame_threshold = cv.bitwise_not(frame_threshold) + res = cv.bitwise_and(frame, frame, mask=frame_threshold) res2, contours, hierarchy = cv.findContours(frame_threshold, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE) contours.sort(key=heuristic, reverse=True) @@ -169,17 +191,17 @@ def allLarger(thresh): likelyGate = [{'cont': contours[0], 'heur': heur0}, {'cont': contours[1], 'heur': heur1}] untampered = np.copy(frame) if contours: - #likelyGate.append(contours[0]) - #findLikelyGate(likelyGate, contours) + # likelyGate.append(contours[0]) + # findLikelyGate(likelyGate, contours) drawRects(frame, likelyGate) cv.imshow(window_capture_name, frame) cv.imshow(window_detection_name, frame_threshold) - #cv.imshow('canny', canny) - + # cv.imshow('canny', canny) + key = cv.waitKey(30) if key == ord('q') or key == 27: break if key == ord('p'): paused = not paused -#generalized problem, giving center of object contrasting with water +# generalized problem, giving center of object contrasting with water diff --git a/perception/tasks/sanity_test.py b/perception/tasks/sanity_test.py index e3d07a3..8b22147 100644 --- a/perception/tasks/sanity_test.py +++ b/perception/tasks/sanity_test.py @@ -1,6 +1,8 @@ import multiprocessing import pytest +# TODO: integrate with pytests testing suite + def sanity_test(algorithm, test_imgs): """ Runs a sanity test on the algorithm that checks for run time and general exceptions. diff --git a/perception/tasks/segmentation/GateTaskExample.py.orig b/perception/tasks/segmentation/GateTaskExample.py.orig deleted file mode 100644 index 5563092..0000000 --- a/perception/tasks/segmentation/GateTaskExample.py.orig +++ /dev/null @@ -1,86 +0,0 @@ -from TaskPerceiver import TaskPerceiver -from typing import Tuple -from sys import argv as args -from combinedFilter import init_combined_filter -import numpy as np -import cv2 as cv -#from segmentation.aggregateRescaling import init_aggregate_rescaling - -class GateTask(TaskPerceiver): - def analyze(self, frame: np.ndarray, debug: bool) -> Tuple[float, float]: - """Takes in the background removed image and returns the center between - the two gate posts. - Args: - frame: The background removed frame to analyze - debug: Whether or not tot display intermediate images for debugging - - Returns: - (x,y) coordinate with center of gate - """ -<<<<<<< HEAD - filtered_frame_copies = [filtered_frame for _ in range[10]] - np.stack(filtered_frame_copies, axis = -1) - mask = cv.inRange(filtered_frame, np.array[190], ) - - filtered_frame = combined_filter(frame, display_figs=False) - if debug: - return ((250, 250), filtered_frame) -======= - filtered_frame = combined_filter(frame, display_figs=False) - filtered_frame_copies = [filtered_frame for _ in range(3)] - stacked_filter_frames = np.concatenate(filtered_frame_copies, axis = 2) - mask = cv.inRange(stacked_filter_frames, - np.array([100, 100, 100]), np.array([255, 255, 255])) - _, contours, _ = cv.findContours(mask, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE) - if contours: - cnt = max(contours, key=self.findStraightness)#lambda x: cv.minAreaRect(x)[1][0] * cv.minAreaRect(x)[1][1]) - # sorted_straight = sorted(contours, key=self.findStraightness) - # sorted_size = sorted(contours, key=cv.contourArea) - #todo: use these sorted lists and weights to each value to give two best values - rect = cv.minAreaRect(cnt) - boxpts = cv.boxPoints(rect) - box = np.int0(boxpts) - cv.drawContours(stacked_filter_frames,[box],0,(0,0,255),5) - for corner in boxpts: - cv.circle(stacked_filter_frames, (corner[0], corner[1]), 10, (0,0,255), -1) - - if debug: - return ((250, 250), stacked_filter_frames) ->>>>>>> origin/gate-task-example - return (250, 250) - - def findStraightness(self, contour): # output number = contour area/convex area, the bigger the straightest - hull = cv.convexHull(contour, False) - contour_area = cv.contourArea(contour) - hull_area = cv.contourArea(hull) - return 10 * contour_area + 3 * (hull_area - contour_area) - -# this part is temporary and will be covered by other files in the future -if __name__ == '__main__': - combined_filter = init_combined_filter() - cap = cv.VideoCapture(args[1]) - ret_tries = True - gate_task = GateTask() - once = False - while 1 and ret_tries < 50: - ret, frame = cap.read() - if ret: - frame = cv.resize(frame, None, fx=0.4, fy=0.4) - - - ### FUNCTION CALL, can change this - (x, y), filtered_frame = gate_task.analyze(frame, True) - cv.putText(frame, "x: %.2f" % x + " y: %.2f" % y, - (20, frame.shape[0] - 20), cv.FONT_HERSHEY_SIMPLEX, - 2.0, (0, 165, 255), 3) - cv.imshow('original', frame) - cv.imshow('filtered_frame', filtered_frame) - if not once: - print(filtered_frame) - once = True - ret_tries = 0 - k = cv.waitKey(60) & 0xff - if k == 27: - break - else: - ret_tries += 1 diff --git a/perception/tasks/segmentation/__init__.py b/perception/tasks/segmentation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/perception/tasks/segmentation/aggregateRescaling.py b/perception/tasks/segmentation/aggregateRescaling.py index 3e2d9ea..e0f4354 100644 --- a/perception/tasks/segmentation/aggregateRescaling.py +++ b/perception/tasks/segmentation/aggregateRescaling.py @@ -3,6 +3,8 @@ import numpy as np import numpy.linalg as LA + +# TODO: port to vis + TaskPerciever format or remove # Jenny -> unsigned ints fixed the problem # Damas -> flip weight vector every frame @@ -42,9 +44,9 @@ def aggregate_rescaling(frame): # you only pca once red -= max_min['min'] red *= 255.0 / (max_min['max'] - max_min['min']) """ - if False:#not paused: - print(np.min(red), np.max(red), max_min['min'], max_min['max']) - """ + if False:#not paused: + print(np.min(red), np.max(red), max_min['min'], max_min['max']) + """ red = red.astype(np.uint8) red = np.expand_dims(red, axis=2) red = np.concatenate((red, red, red), axis=2) diff --git a/perception/tasks/segmentation/combinedFilter.py b/perception/tasks/segmentation/combinedFilter.py index 22977d1..ec32624 100644 --- a/perception/tasks/segmentation/combinedFilter.py +++ b/perception/tasks/segmentation/combinedFilter.py @@ -1,6 +1,8 @@ import cv2 import numpy as np +# TODO: port to vis + TaskPerciever format or remove + from sys import argv as args from perception.tasks.segmentation.aggregateRescaling import init_aggregate_rescaling from perception.tasks.segmentation.peak_removal_adaptive_thresholding import filter_out_highest_peak_multidim @@ -23,7 +25,7 @@ def combined_filter(frame, custom_weights=None, display_figs=False, print_weight custom_weights=custom_weights, print_weights=print_weights) - other_frame = other_frame[:,:,:1] + other_frame = other_frame[:, :, :1] if display_figs: cv2.imshow('original', frame) diff --git a/perception/tasks/segmentation/kmeans.py b/perception/tasks/segmentation/kmeans.py new file mode 100644 index 0000000..507b261 --- /dev/null +++ b/perception/tasks/segmentation/kmeans.py @@ -0,0 +1,99 @@ +import cv2 +import numpy as np +import matplotlib.pyplot as plt +from scipy.signal import find_peaks, peak_widths +from sys import argv as args + +# TODO: port to vis + TaskPerciever format or remove + +######################################################################## +# An attempt at an adaptive thresholding algorithm based on the frequency +# of pixel values ("peaks" if looking at a histogram of # pixels vs pixel value of a frame) +# +# *1. *** best of the three *** filter_out_highest_peak_multidim +# pools together how "peak-like" each pixel is in all of the color channels +# of the frame to make a final decision on what is the background +# 2. init_filter_out_highest_peak +# gets rid of large peaks in many different color channels individually +# 3. remove_blotchy_chunks +# places a mask over areas that have lots of edges, which in many cases +# is equivalent to places with lots of noise +######################################################################## + + +def k_means_segmentation(votes, frame_shape, num_groups=2, percentile=10): + """ Attempts to use kmeans to segment the frame into num_group features + (not including the background), denoted by a very large value in votes. + votes is an output of the filter_out_highest_peak_multidim() function + Output: frame_shape x num_groups 3D matrix. Get a group mapped to the + frame by doing groups[:,:,group_num] """ + votes = np.float32(votes).flatten() + + # Make kmeans only consider the non-background pixels + background = np.zeros(votes.shape) + background[votes >= np.percentile(votes, percentile)] = 1 + cluster_data = votes[background == 0] + cluster_indexes = np.array(range(len(votes)))[background == 0] + + # Do kmeans + criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0) + flags = cv2.KMEANS_RANDOM_CENTERS + compactness, labels, centers = cv2.kmeans(cluster_data, num_groups, None, criteria, 10, flags) + + # Reconstruct the original votes array with background's label = -1 + label_arr = np.empty(votes.shape) + label_arr[background == 1] = -1 + for i in range(num_groups): + label_arr[cluster_indexes[labels.flatten() == i]] = i + + unique_labels, label_counts = np.unique(label_arr, return_counts=True) + label_order = list(range(np.int0(np.amax(unique_labels)) + 2)) # something is erroring here + if len(label_counts) < num_groups + 1: + # add in a slot for the background if no background is found + label_counts = np.insert(label_counts, 0, 0) + + label_order.sort(key=lambda x: label_counts[x]) + + groups = np.empty((frame_shape[0], frame_shape[1], num_groups + 1)) + for i, l in enumerate(label_order): + group = np.zeros(votes.shape) + group[label_arr.flatten() == l - 1] = 255 + groups[:, :, i] = np.reshape(group, frame_shape[:2]) + + # for i in range(len(unique_labels)): + # cv2.imshow(str(i) + " label", groups[:,:,i]) + + return groups + + +########################################### +# Main Body +########################################### + +if __name__ == "__main__": + # For testing porpoises + cap = cv2.VideoCapture(args[1]) + ret, frame = cap.read() + out = cv2.VideoWriter('out.avi', cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), 30.0, + (int(frame.shape[1] * 0.4), int(frame.shape[0] * 0.4))) + + ret_tries = 0 + + while (1 and ret_tries < 50): + ret, frame = cap.read() + + if ret: + frame = cv2.resize(frame, None, fx=0.4, fy=0.4) + + cv2.imshow('original', frame) + plt.pause(0.001) + + ret_tries = 0 + k = cv2.waitKey(60) & 0xff + if k == 27: + break + else: + ret_tries += 1 + cv2.destroyAllWindows() + cap.release() + out.release() \ No newline at end of file diff --git a/perception/tasks/segmentation/peak_removal_adaptive_thresholding.py b/perception/tasks/segmentation/peak_removal_adaptive_thresholding.py index 892dc02..d76a17b 100644 --- a/perception/tasks/segmentation/peak_removal_adaptive_thresholding.py +++ b/perception/tasks/segmentation/peak_removal_adaptive_thresholding.py @@ -3,6 +3,9 @@ import matplotlib.pyplot as plt from scipy.signal import find_peaks, peak_widths from sys import argv as args + +# TODO: port to vis + TaskPerciever format or remove + ######################################################################## # An attempt at an adaptive thresholding algorithm based on the frequency # of pixel values ("peaks" if looking at a histogram of # pixels vs pixel value of a frame) @@ -51,6 +54,7 @@ # thresholds_used = [h_low, s_low, v_low, h_hi, s_hi, v_hi] + def init_test_hsv_thresholds(thresholds): # Keep track of previous threhold values to see if the user is using the trackbar # is there a function that detects whether the mouse button is down? @@ -61,25 +65,25 @@ def nothing(x): pass cv2.namedWindow('ideal thresholding') - cv2.createTrackbar('h_low','ideal thresholding',h_low,255,nothing) - cv2.createTrackbar('s_low','ideal thresholding',s_low,255,nothing) - cv2.createTrackbar('v_low','ideal thresholding',v_low,255,nothing) - cv2.createTrackbar('h_high','ideal thresholding',h_hi,255,nothing) - cv2.createTrackbar('s_high','ideal thresholding',s_hi,255,nothing) - cv2.createTrackbar('v_high','ideal thresholding',v_hi,255,nothing) + cv2.createTrackbar('h_low', 'ideal thresholding', h_low, 255, nothing) + cv2.createTrackbar('s_low', 'ideal thresholding', s_low, 255, nothing) + cv2.createTrackbar('v_low', 'ideal thresholding', v_low, 255, nothing) + cv2.createTrackbar('h_high', 'ideal thresholding', h_hi, 255, nothing) + cv2.createTrackbar('s_high', 'ideal thresholding', s_hi, 255, nothing) + cv2.createTrackbar('v_high', 'ideal thresholding', v_hi, 255, nothing) def test_hsv_thresholds(frame, thresholds): nonlocal prev_h_low, prev_s_low, prev_v_low, prev_h_hi, prev_s_hi, prev_v_hi - h_low_track = cv2.getTrackbarPos('h_low','ideal thresholding') - s_low_track = cv2.getTrackbarPos('s_low','ideal thresholding') - v_low_track = cv2.getTrackbarPos('v_low','ideal thresholding') - h_hi_track = cv2.getTrackbarPos('h_high','ideal thresholding') - s_hi_track = cv2.getTrackbarPos('s_high','ideal thresholding') - v_hi_track = cv2.getTrackbarPos('v_high','ideal thresholding') + h_low_track = cv2.getTrackbarPos('h_low', 'ideal thresholding') + s_low_track = cv2.getTrackbarPos('s_low', 'ideal thresholding') + v_low_track = cv2.getTrackbarPos('v_low', 'ideal thresholding') + h_hi_track = cv2.getTrackbarPos('h_high', 'ideal thresholding') + s_hi_track = cv2.getTrackbarPos('s_high', 'ideal thresholding') + v_hi_track = cv2.getTrackbarPos('v_high', 'ideal thresholding') - if h_low_track!=prev_h_low or s_low_track!=prev_s_low or v_low_track!=prev_v_low \ - or h_hi_track!=prev_h_hi or s_hi_track!=prev_s_hi or v_hi_track!=prev_v_hi: + if h_low_track != prev_h_low or s_low_track != prev_s_low or v_low_track != prev_v_low \ + or h_hi_track != prev_h_hi or s_hi_track != prev_s_hi or v_hi_track != prev_v_hi: # If user is adjusting the trackbars, use the user input thresholds_used = [h_low_track, s_low_track, v_low_track, h_hi_track, s_hi_track, v_hi_track] else: @@ -92,9 +96,9 @@ def test_hsv_thresholds(frame, thresholds): cv2.setTrackbarPos('s_high', 'ideal thresholding', thresholds_used[4]) cv2.setTrackbarPos('v_high', 'ideal thresholding', thresholds_used[5]) - hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) + hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) mask = cv2.inRange(hsv, np.array(thresholds_used[:3]), np.array(thresholds_used[3:])) - res = cv2.bitwise_and(frame,frame, mask= mask) + res = cv2.bitwise_and(frame, frame, mask=mask) cv2.imshow('ideal thresholding', res) @@ -103,20 +107,22 @@ def test_hsv_thresholds(frame, thresholds): return test_hsv_thresholds + def hsv_threshold(frame, thresh_used): - hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) + hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) mask = cv2.inRange(hsv, np.array(thresh_used[:3]), np.array(thresh_used[3:])) - res = cv2.bitwise_and(frame,frame, mask= mask) + res = cv2.bitwise_and(frame, frame, mask=mask) return thresh_used, res + def disp_hist(frame, title, labels, colors): - frame0 = frame[:,:,0].flatten() + frame0 = frame[:, :, 0].flatten() frame0 = frame0[frame0 > 0] - frame1 = frame[:,:,1].flatten() + frame1 = frame[:, :, 1].flatten() frame1 = frame1[frame1 > 0] - frame2 = frame[:,:,2].flatten() + frame2 = frame[:, :, 2].flatten() frame2 = frame2[frame2 > 0] plt.figure(hash(title)) @@ -131,6 +137,7 @@ def disp_hist(frame, title, labels, colors): plt.legend() plt.draw() + def find_peak_ranges(frame, display_plots=False, title=None, labels=None, colors=None): """ Finds a returns the widest peak's x-range in all three channels of frame Result is formatted to fit cv2.inRange() -> ((low1, low2, low3), (hi1, hi2, hi3)) @@ -138,8 +145,9 @@ def find_peak_ranges(frame, display_plots=False, title=None, labels=None, colors # TODO: Maybe use a different combination of peak characteristics to more accurately # select the entire peak (only the tip is selected right now) - peak_width_height = 0.95 # How far down the peak that the algorithm draws - # the horizontal width line + peak_width_height = 0.95 # How far down the peak that the algorithm draws + + # the horizontal width line def find_highest_peak(channel, display_plots=False): """ Finds and returns the x-range of the highest peak in the @@ -148,33 +156,34 @@ def find_highest_peak(channel, display_plots=False): f = frame[:, :, channel].flatten() # Some semi-hardcoded values :) - num_bins = max(int((np.amax(f)-np.amin(f)) / 4), 10) + num_bins = max(int((np.amax(f) - np.amin(f)) / 4), 10) # num_bins = 30 hist, bins = np.histogram(f, bins=num_bins) - hist[0] = 0 # get rid of stuff that was thresholded to 0 - hist = np.hstack([hist, [0]]) # make stuff at 255 into a peak - bins = np.hstack([bins, [bins[bins.shape[0]-1] + 1]]) + hist[0] = 0 # get rid of stuff that was thresholded to 0 + hist = np.hstack([hist, [0]]) # make stuff at 255 into a peak + bins = np.hstack([bins, [bins[bins.shape[0] - 1] + 1]]) peaks, properties = find_peaks(hist, height=0.1) if len(peaks) > 0: i = np.argmax(properties['peak_heights']) widths = peak_widths(hist, peaks, rel_height=peak_width_height)[0] # i = np.argmax(widths) - largest_peak = (int((bins[peaks[i]]+bins[peaks[i]+1])//2-widths[i]//2), - int((bins[peaks[i]]+bins[peaks[i]+1])//2+widths[i]//2)) # beginning and end of the peak + largest_peak = (int((bins[peaks[i]] + bins[peaks[i] + 1]) // 2 - widths[i] // 2), + int((bins[peaks[i]] + bins[peaks[i] + 1]) // 2 + widths[ + i] // 2)) # beginning and end of the peak if display_plots: ax = plt.gca() print(max(f)) ax.set_xlim([0, max(255, max(f))]) - #Plot values in this channel - plt.plot(bins[1:],hist, label=labels[channel], color=colors[channel]) + # Plot values in this channel + plt.plot(bins[1:], hist, label=labels[channel], color=colors[channel]) # Plot peaks - plt.plot(bins[peaks+1], hist[peaks], "x") + plt.plot(bins[peaks + 1], hist[peaks], "x") # Plot peak widths - plt.hlines(hist[peaks]*0.9, bins[peaks+1]-widths//2, bins[peaks+1]+widths//2) + plt.hlines(hist[peaks] * 0.9, bins[peaks + 1] - widths // 2, bins[peaks + 1] + widths // 2) else: largest_peak = (0, 0) @@ -184,7 +193,7 @@ def find_highest_peak(channel, display_plots=False): fig = plt.figure(hash(title)) plt.clf() - background = (np.empty(frame.shape[2]),np.empty(frame.shape[2])) + background = (np.empty(frame.shape[2]), np.empty(frame.shape[2])) for channel in range(frame.shape[2]): low, high = find_highest_peak(channel, display_plots) background[0][channel] = low @@ -197,12 +206,14 @@ def find_highest_peak(channel, display_plots=False): return background + def plot_peaks(frame, title, labels, colors): # Shh this is just a helper function that makes the code more readable # Not to be used in practice. # NOTE: you need to call plt.pause(0.001) afterwards to render the plot find_peak_ranges(frame, True, title, labels, colors) + def init_filter_out_highest_peak(filters, return_colorspace="any", input_colorspace="bgr"): """ Takes in an hsv image! Returns an hsv image""" # low pass filter @@ -210,8 +221,8 @@ def init_filter_out_highest_peak(filters, return_colorspace="any", input_colorsp # lambda = 0.9-0.4 prev_hsv_threshes = [[] for i in range(len(filters))] - hsv_labels = (('H','S','V'), ("red","purple","gray")) - bgr_labels = (('B','G','R'), ("blue","green","red")) + hsv_labels = (('H', 'S', 'V'), ("red", "purple", "gray")) + bgr_labels = (('B', 'G', 'R'), ("blue", "green", "red")) # Figure out how the procedure to convert among hsv and bgr. # Format of stuff in fitler_fns: @@ -220,9 +231,9 @@ def init_filter_out_highest_peak(filters, return_colorspace="any", input_colorsp curr_color = input_colorspace for f in filters: if f != curr_color: - filter_fns.append(['c',f]) + filter_fns.append(['c', f]) curr_color = f - filter_fns.append(['f',f]) + filter_fns.append(['f', f]) if return_colorspace != "any" and return_colorspace != curr_color: filter_fns.append(['c', return_colorspace]) @@ -236,27 +247,27 @@ def filter_out_highest_peak(frame, cache, display_plots=False, title=None, label # calculate average for i in range(2): for j in range(3): - background_thresh[i][j] = (background_thresh[i][j] + sum([c[i][j] for c in cache])) // (len(cache) + 1) + background_thresh[i][j] = (background_thresh[i][j] + sum([c[i][j] for c in cache])) // ( + len(cache) + 1) background_mask = cv2.bitwise_not(cv2.bitwise_or( - cv2.inRange(frame[:, :, 0], background_thresh[0][0], background_thresh[1][0]), - cv2.inRange(frame[:, :, 1], background_thresh[0][1], background_thresh[1][1]), - cv2.inRange(frame[:, :, 2], background_thresh[0][2], background_thresh[1][2]) - )) - no_background = cv2.bitwise_and(frame,frame, mask=background_mask) + cv2.inRange(frame[:, :, 0], background_thresh[0][0], background_thresh[1][0]), + cv2.inRange(frame[:, :, 1], background_thresh[0][1], background_thresh[1][1]), + cv2.inRange(frame[:, :, 2], background_thresh[0][2], background_thresh[1][2]) + )) + no_background = cv2.bitwise_and(frame, frame, mask=background_mask) return background_thresh, raw_thresh, no_background def combine_threshes(th1, th2): - return ([min(th1[0][0], th2[0][0]), min(th1[0][1], th2[0][1]), min(th1[0][2], th2[0][2])], - [max(th1[1][0], th2[1][0]), max(th1[1][1], th2[1][1]), max(th1[1][2], th2[1][2])]) + return ([min(th1[0][0], th2[0][0]), min(th1[0][1], th2[0][1]), min(th1[0][2], th2[0][2])], + [max(th1[1][0], th2[1][0]), max(th1[1][1], th2[1][1]), max(th1[1][2], th2[1][2])]) def bgr_thresh2hsv_thresh(th): th = cv2.cvtColor(np.array([[th[0]], [th[1]]], np.uint8), cv2.COLOR_BGR2HSV).tolist() return ([min(th[0][0][0], th[1][0][0]), min(th[0][0][1], th[1][0][1]), min(th[0][0][2], th[1][0][2])], [max(th[0][0][0], th[1][0][0]), max(th[0][0][1], th[1][0][1]), max(th[0][0][2], th[1][0][2])]) - def do_filter(frame, display_plots=False): nonlocal prev_hsv_threshes if len(prev_hsv_threshes[0]) == lpf_cache_size: @@ -298,32 +309,33 @@ def do_filter(frame, display_plots=False): return do_filter + def keep_highest_valued_peaks_mask(frame, num_peaks=1, display_plots=False, title=None, label='1', color='blue'): """ Returns a mask for the frame that keeps the num_peaks highest peaks in the histogram of pixel values. Only works for grayscale/1-channel images (to speed this up) Shape of frame must have 3 dimensions (pass in np.expand_dims(frame, 2) if erroring) """ # Some semi-thresholded values :) - num_bins = max(int((np.amax(frame)-np.amin(frame)) / 4), 10) + num_bins = max(int((np.amax(frame) - np.amin(frame)) / 4), 10) hist, bins = np.histogram(frame, bins=num_bins) - hist[0] = 0 # get rid of stuff that was thresholded to 0 - hist = np.hstack([hist, [0]]) # make stuff at 255 into a peak - bins = np.hstack([bins, [bins[bins.shape[0]-1] + 1]]) + hist[0] = 0 # get rid of stuff that was thresholded to 0 + hist = np.hstack([hist, [0]]) # make stuff at 255 into a peak + bins = np.hstack([bins, [bins[bins.shape[0] - 1] + 1]]) peaks, properties = find_peaks(hist, prominence=100) widths = peak_widths(hist, peaks, rel_height=peak_width_height)[0] if len(peaks) > 0: i = len(peaks) - 1 - mask = cv2.inRange(frame, (bins[peaks[i]]+bins[peaks[i]+1])//2-widths[i]*2, - (bins[peaks[i]]+bins[peaks[i]+1])//2+widths[i]*2) + mask = cv2.inRange(frame, (bins[peaks[i]] + bins[peaks[i] + 1]) // 2 - widths[i] * 2, + (bins[peaks[i]] + bins[peaks[i] + 1]) // 2 + widths[i] * 2) # To support keeping multiple peaks for j in range(num_peaks - 1): i = len(peaks) - 2 - j if i >= 0: - mask = cv2.bitwise_or(cv2.inRange(frame, (bins[peaks[i]]+bins[peaks[i]+1])//2-widths[i], - (bins[peaks[i]]+bins[peaks[i]+1])//2+widths[i]), mask) + mask = cv2.bitwise_or(cv2.inRange(frame, (bins[peaks[i]] + bins[peaks[i] + 1]) // 2 - widths[i], + (bins[peaks[i]] + bins[peaks[i] + 1]) // 2 + widths[i]), mask) # frame = cv2.bitwise_and(frame, frame, mask=mask) else: mask = np.ones(frame.shape, np.uint8) @@ -334,12 +346,12 @@ def keep_highest_valued_peaks_mask(frame, num_peaks=1, display_plots=False, titl ax = plt.gca() ax.set_xlim([0, 255]) - #Plot values in this channel - plt.plot(bins[1:],hist, label=label, color=color) + # Plot values in this channel + plt.plot(bins[1:], hist, label=label, color=color) # Plot peaks - plt.plot(bins[peaks+1], hist[peaks], "x") + plt.plot(bins[peaks + 1], hist[peaks], "x") # Plot peak widths - plt.hlines(hist[peaks]*0.9, bins[peaks+1]-widths//2, bins[peaks+1]+widths//2) + plt.hlines(hist[peaks] * 0.9, bins[peaks + 1] - widths // 2, bins[peaks + 1] + widths // 2) plt.title(title) plt.legend() @@ -347,31 +359,32 @@ def keep_highest_valued_peaks_mask(frame, num_peaks=1, display_plots=False, titl return mask + def delete_lowest_valued_peaks_mask(frame, num_peaks=1, display_plots=False, title=None, label='1', color='blue'): """ Returns a mask for the frame that deletes the num_peaks lowest-valued peaks in the histogram of pixel values. Only works for grayscale/1-channel images (to speed this up) """ # Some semi-thresholded values :) - num_bins = max(int((np.amax(frame)-np.amin(frame)) / 4), 10) + num_bins = max(int((np.amax(frame) - np.amin(frame)) / 4), 10) hist, bins = np.histogram(frame, bins=num_bins) - hist[0] = 0 # get rid of stuff that was thresholded to 0 + hist[0] = 0 # get rid of stuff that was thresholded to 0 peaks, properties = find_peaks(hist, prominence=100) widths = peak_widths(hist, peaks, rel_height=peak_width_height)[0] if len(peaks) > 0: i = 0 - mask = cv2.bitwise_not(cv2.inRange(frame, (bins[peaks[i]]+bins[peaks[i]+1])//2-widths[i]*2, - (bins[peaks[i]]+bins[peaks[i]+1])//2+widths[i]*2)) + mask = cv2.bitwise_not(cv2.inRange(frame, (bins[peaks[i]] + bins[peaks[i] + 1]) // 2 - widths[i] * 2, + (bins[peaks[i]] + bins[peaks[i] + 1]) // 2 + widths[i] * 2)) # To support deleting multiple peaks for j in range(num_peaks - 1): i = j + 1 if len(peaks) > i: mask = cv2.bitwise_and(cv2.bitwise_not(cv2.inRange( - frame, (bins[peaks[i]]+bins[peaks[i]+1])//2-widths[i]*2, - (bins[peaks[i]]+bins[peaks[i]+1])//2+widths[i]*2)), mask) + frame, (bins[peaks[i]] + bins[peaks[i] + 1]) // 2 - widths[i] * 2, + (bins[peaks[i]] + bins[peaks[i] + 1]) // 2 + widths[i] * 2)), mask) else: mask = np.ones(frame.shape, np.uint8) # frame = cv2.bitwise_and(frame, frame, mask=mask) @@ -382,12 +395,12 @@ def delete_lowest_valued_peaks_mask(frame, num_peaks=1, display_plots=False, tit ax = plt.gca() ax.set_xlim([0, 255]) - #Plot values in this channel - plt.plot(bins[1:],hist, label=label, color=color) + # Plot values in this channel + plt.plot(bins[1:], hist, label=label, color=color) # Plot peaks - plt.plot(bins[peaks+1], hist[peaks], "x") + plt.plot(bins[peaks + 1], hist[peaks], "x") # Plot peak widths - plt.hlines(hist[peaks]*0.9, bins[peaks+1]-widths//2, bins[peaks+1]+widths//2) + plt.hlines(hist[peaks] * 0.9, bins[peaks + 1] - widths // 2, bins[peaks + 1] + widths // 2) plt.title(title) plt.legend() @@ -395,6 +408,7 @@ def delete_lowest_valued_peaks_mask(frame, num_peaks=1, display_plots=False, tit return mask + def remove_blotchy_chunks(frame, kernel_size=201, iterations=1, display_imgs=False): """ Works best when object isn't surrounded by blotchy stuff """ edges = cv2.Canny(frame, 100, 150) @@ -416,6 +430,7 @@ def remove_blotchy_chunks(frame, kernel_size=201, iterations=1, display_imgs=Fal return result + def filter_out_highest_peak_multidim(frame, res=69, percentile=10, custom_weights=None, print_weights=False): """ Estimates the "peak-ness" of each pixel in frame across color channels and thresholds out pixels that were "peak-like" in many colorspaces. @@ -444,7 +459,7 @@ def get_peak_votes(frame): if res == 1: vote_arr = dist[frame] else: - dist = np.array([np.mean(dist[i*res:i*res+res]) for i in range(len(dist) // res + 1)]) + dist = np.array([np.mean(dist[i * res:i * res + res]) for i in range(len(dist) // res + 1)]) vote_arr = dist[frame // res] return recommended_weight, vote_arr @@ -455,7 +470,7 @@ def get_peak_votes(frame): if print_weights: print('------------------------', custom_weights) for ch in range(frame.shape[2]): - weight, vote_arr = get_peak_votes(frame[:,:,ch]) + weight, vote_arr = get_peak_votes(frame[:, :, ch]) if custom_weights is not None: weight = custom_weights[ch] if print_weights: @@ -472,6 +487,7 @@ def get_peak_votes(frame): return overall_votes, cv2.bitwise_and(frame, frame, mask=overall_mask) + def k_means_segmentation(votes, frame_shape, num_groups=2, percentile=10): """ Attempts to use kmeans to segment the frame into num_group features (not including the background), denoted by a very large value in votes. @@ -482,23 +498,23 @@ def k_means_segmentation(votes, frame_shape, num_groups=2, percentile=10): # Make kmeans only consider the non-background pixels background = np.zeros(votes.shape) - background[votes>=np.percentile(votes, percentile)] = 1 - cluster_data = votes[background==0] - cluster_indexes = np.array(range(len(votes)))[background==0] + background[votes >= np.percentile(votes, percentile)] = 1 + cluster_data = votes[background == 0] + cluster_indexes = np.array(range(len(votes)))[background == 0] # Do kmeans criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0) flags = cv2.KMEANS_RANDOM_CENTERS - compactness,labels,centers = cv2.kmeans(cluster_data,num_groups,None,criteria,10,flags) + compactness, labels, centers = cv2.kmeans(cluster_data, num_groups, None, criteria, 10, flags) # Reconstruct the original votes array with background's label = -1 label_arr = np.empty(votes.shape) - label_arr[background==1] = -1 + label_arr[background == 1] = -1 for i in range(num_groups): - label_arr[cluster_indexes[labels.flatten()==i]] = i + label_arr[cluster_indexes[labels.flatten() == i]] = i unique_labels, label_counts = np.unique(label_arr, return_counts=True) - label_order = list(range(np.int0(np.amax(unique_labels)) + 2)) # something is erroring here + label_order = list(range(np.int0(np.amax(unique_labels)) + 2)) # something is erroring here if len(label_counts) < num_groups + 1: # add in a slot for the background if no background is found label_counts = np.insert(label_counts, 0, 0) @@ -508,14 +524,15 @@ def k_means_segmentation(votes, frame_shape, num_groups=2, percentile=10): groups = np.empty((frame_shape[0], frame_shape[1], num_groups + 1)) for i, l in enumerate(label_order): group = np.zeros(votes.shape) - group[label_arr.flatten()==l - 1] = 255 - groups[:,:,i] = np.reshape(group, frame_shape[:2]) + group[label_arr.flatten() == l - 1] = 255 + groups[:, :, i] = np.reshape(group, frame_shape[:2]) # for i in range(len(unique_labels)): # cv2.imshow(str(i) + " label", groups[:,:,i]) return groups + ########################################### # Main Body ########################################### @@ -524,7 +541,8 @@ def k_means_segmentation(votes, frame_shape, num_groups=2, percentile=10): # For testing porpoises cap = cv2.VideoCapture(args[1]) ret, frame = cap.read() - out = cv2.VideoWriter('out.avi',cv2.VideoWriter_fourcc('M','J','P','G'), 30.0, (int(frame.shape[1]*0.4), int(frame.shape[0]*0.4))) + out = cv2.VideoWriter('out.avi', cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), 30.0, + (int(frame.shape[1] * 0.4), int(frame.shape[0] * 0.4))) if testing: test_hsv_thresholds = init_test_hsv_thresholds(thresholds_used) @@ -539,8 +557,10 @@ def k_means_segmentation(votes, frame_shape, num_groups=2, percentile=10): if ret: frame = cv2.resize(frame, None, fx=0.4, fy=0.4) - votes, multi_filter1 = filter_out_highest_peak_multidim(np.dstack([frame, cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)]), custom_weights=[1, 1, 1, 1, 1, 1]) - votes, multi_filter2 = filter_out_highest_peak_multidim(np.dstack([frame, cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)])) + votes, multi_filter1 = filter_out_highest_peak_multidim( + np.dstack([frame, cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)]), custom_weights=[1, 1, 1, 1, 1, 1]) + votes, multi_filter2 = filter_out_highest_peak_multidim( + np.dstack([frame, cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)])) multi_filter1 = multi_filter1[:, :, :3] multi_filter2 = multi_filter2[:, :, :3] @@ -567,4 +587,4 @@ def k_means_segmentation(votes, frame_shape, num_groups=2, percentile=10): ret_tries += 1 cv2.destroyAllWindows() cap.release() - out.release() \ No newline at end of file + out.release() diff --git a/perception/tasks/slots/__init__.py b/perception/tasks/slots/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/perception/tasks/path_marker/play_slots_detection.py b/perception/tasks/slots/play_slots_detection.py similarity index 99% rename from perception/tasks/path_marker/play_slots_detection.py rename to perception/tasks/slots/play_slots_detection.py index 0ebb4b5..4b8b741 100644 --- a/perception/tasks/path_marker/play_slots_detection.py +++ b/perception/tasks/slots/play_slots_detection.py @@ -2,6 +2,8 @@ import cv2 import sys +# TODO: port to vis + TaskPerciever format or remove + #### TODO: maybe look into pattern matching # Data fron the new course footage dropbox folder diff --git a/perception/tasks/spinny/spinny_wheel_detection.py b/perception/tasks/spinny/spinny_wheel_detection.py deleted file mode 100644 index 8f0f72f..0000000 --- a/perception/tasks/spinny/spinny_wheel_detection.py +++ /dev/null @@ -1,112 +0,0 @@ -import numpy as np -import cv2 -import argparse -import sys -import time - -#CHANGE PARAMETER IN CALL TO "THRESH" FUNCTION TO CHANGE COLOR -file_name = "GOPR1145.MP4" #video file from dropbox -vid = cv2.VideoCapture(file_name) -frames = 0 -avgLength = 10 -centers = [] - -def thresh(frame, color='red'): - - blur = cv2.GaussianBlur(frame, (5, 5), 0) - hsv = cv2.cvtColor(blur, cv2.COLOR_BGR2HSV) - - if color == 'red': - lower = np.uint8([29,77,36]) - upper = np.uint8([130,250,255]) - mask = cv2.inRange(hsv,lower,upper) - mask = cv2.bitwise_not(mask) - elif color == 'blue': - lower = np.uint8([86,141,0]) - upper = np.uint8([106,220,168]) - mask = cv2.inRange(hsv,lower,upper) - else: - lower = np.uint8([66,208,157]) - upper = np.uint8([86,255,209]) - mask = cv2.inRange(hsv,lower,upper) - - return mask - -def heuristic(contour): - rect = cv2.minAreaRect(contour) - area = rect[1][0] * rect[1][1] - diff = cv2.contourArea(cv2.convexHull(contour)) - cv2.contourArea(contour) - cent = rect[0] - dist = 0 - if len(likelySection) > 1 and allLarger(60): - cen0 = cv2.minAreaRect(likelySection[0]['cont'])[0] - dis0 = np.linalg.norm(np.array(cent) - np.array(cen0)) - cen1 = cv2.minAreaRect(likelySection[1]['cont'])[0] - dis1 = np.linalg.norm(np.array(cent) - np.array(cen1)) - dist = min([dis0, dis1]) - heur = area - 3 * diff - 20 * dist - return heur - -def allLarger(thresh): - for cnt in likelySection: - if cnt['heur'] < thresh: - return False - return True - -def drawRects(frame, contours): - tempPts = [] - for cnt in contours: - rect = cv2.minAreaRect(cnt['cont']) - boxpts = cv2.boxPoints(rect) - box = np.int0(boxpts) - cv2.drawContours(frame,[box],0,(0,0,255),1) - cv2.drawContours(frame, [cnt['cont']],0,(0,255,0),1) - cv2.drawContours(frame, [cv2.convexHull(cnt['cont'])],0,(255,0,0),1) - tempPts.append(rect[0]) - #cv2.putText(frame, str(cnt['heur']), (int(rect[0][0]), int(rect[0][1])), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255)) - if len(tempPts) > 1 and allLarger(60): - cv2.circle(frame, (int(tempPts[0][0]), int(tempPts[0][1])), 10, (0,0,255), -1) - cv2.circle(frame, (int(tempPts[1][0]), int(tempPts[1][1])), 10, (0,0,255), -1) -def midPt(pt1, pt2): - return ((pt1[0] + pt2[0]) / 2, (pt1[1] + pt2[1]) / 2) - -def getAvgPt(pt): - points.append(pt) - exes = list(map(lambda x: x[0], points)) - whys = list(map(lambda y: y[1], points)) - - if len(points) > 50: - del points[:10] - return (int(sum(exes) / len(exes)), int(sum(whys) / len(whys))) - -likelySection = [] -points = [] -while vid.isOpened(): - start = time.time() - ret, frame = vid.read() - if(ret == False): - continue - - threshed = thresh(frame,'other') - res, contours, hierarchy = cv2.findContours(threshed, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) - - contours.sort(key=heuristic, reverse = True) - if len(contours) > 1: - c1 = contours[0] - c2 = contours[1] - heur0 = heuristic(c1) - heur1 = heuristic(c2) - likelySection = [{'cont': contours[0], 'heur': heur0}, {'cont': contours[1], 'heur': heur1}] - untampered = np.copy(frame) - if contours: - drawRects(frame, likelySection) - cv2.imshow("Frame", frame) - cv2.imshow('Res', res) - - if (cv2.waitKey(1) & 0xFF) == ord('q') or frames > 900: - break - -vid.release() -cv2.destroyAllWindows() - - diff --git a/perception/vis/FrameWrapper.py b/perception/vis/FrameWrapper.py index 4eb6e01..fe751d1 100644 --- a/perception/vis/FrameWrapper.py +++ b/perception/vis/FrameWrapper.py @@ -24,7 +24,7 @@ class FrameWrapper(): WEBCAM_TRIES = 10 def __init__(self, filenames, resize=1): - self.filenames = filenames # Get this list of relative paths to files from vis + self.filenames = filenames # Get this list of relative paths to files from vis # There aren't any checks for resize==1 to improve speed b/c this expects resize != 1 self.resize = resize @@ -46,27 +46,24 @@ def __next__(self): ret, frame = self.next_data[1].read() if ret: return cv2.resize(frame, None, fx=self.resize, fy=self.resize) - else: - print("WARNING: Failed to get frame from video {}. Try {}." \ - .format(self.filenames[self.index], i), file=sys.stderr) + print("WARNING: Failed to get frame from video {}. Try {}." \ + .format(self.filenames[self.index], i), file=sys.stderr) self.next_data_obj() elif self.next_data[0] == "i": # Image img = self.next_data[1] self.next_data_obj() if img is not None: return cv2.resize(img, None, fx=self.resize, fy=self.resize) - else: - print("WARNING: Failed to get image {}." \ - .format(self.filenames[self.index-1]), file=sys.stderr) + print("WARNING: Failed to get image {}." \ + .format(self.filenames[self.index-1]), file=sys.stderr) else: # Webcam # Try to get a frame out at most WEBCAM_TRIES times. for i in range(self.WEBCAM_TRIES): ret, frame = self.next_data[1].read() if ret: return cv2.resize(frame, None, fx=self.resize, fy=self.resize) - else: - print("WARNING: Failed to get frame from webcam. Try {}." \ - .format(i), file=sys.stderr) + print("WARNING: Failed to get frame from webcam. Try {}." \ + .format(i), file=sys.stderr) self.next_data_obj() raise StopIteration diff --git a/perception/tasks/TestTasks/TestAlgo.py b/perception/vis/TestAlgo.py similarity index 54% rename from perception/tasks/TestTasks/TestAlgo.py rename to perception/vis/TestAlgo.py index 3410aad..3d2ebac 100644 --- a/perception/tasks/TestTasks/TestAlgo.py +++ b/perception/vis/TestAlgo.py @@ -7,19 +7,23 @@ class TestAlgo(TaskPerceiver): def __init__(self): super().__init__(canny_low=((0, 255), 100), canny_high=((0, 255), 200)) + self.t = .1 def analyze(self, frame: np.ndarray, debug: bool, slider_vals: Dict[str, int]): fig = plt.figure() - x1 = np.linspace(0.0, 5.0) - x2 = np.linspace(0.0, 2.0) - - y1 = np.cos(2 * np.pi * x1) * np.exp(-x1) - y2 = np.cos(2 * np.pi * x2) - - line1, = plt.plot(x1, y1, 'ko-') - line1.set_ydata(np.cos(2 * np.pi * (x1 + slider_vals['canny_low'] * 3.14 / 2)) * np.exp(-x1)) + x = np.linspace(0.0, 5.0) + y = np.cos(2 * np.pi * (x + slider_vals['canny_low'] * 3.14 / 2)) * np.exp(-x * self.t) + plt.plot(x, y, 'ko-') fig.canvas.draw() - return frame, [frame, cv.cvtColor(frame, cv.COLOR_BGR2GRAY), cv.flip(cv.cvtColor(frame, cv.COLOR_BGR2GRAY), cv.ROTATE_180), + self.t *= 1.01 + return frame, [frame, + cv.cvtColor(frame, cv.COLOR_BGR2GRAY), + cv.flip(cv.cvtColor(frame, cv.COLOR_BGR2GRAY), cv.ROTATE_180), cv.Canny(frame, slider_vals['canny_low'], slider_vals['canny_high']), - cv.flip(cv.Canny(frame, slider_vals['canny_low'], slider_vals['canny_high']), 0), fig] \ No newline at end of file + cv.flip(cv.Canny(frame, slider_vals['canny_low'], slider_vals['canny_high']), 0), + fig] + +if __name__ == '__main__': + from perception.vis.vis import run + run(['webcam'], TestAlgo(), True) \ No newline at end of file diff --git a/perception/vis/window_builder.py b/perception/vis/Visualizer.py similarity index 86% rename from perception/vis/window_builder.py rename to perception/vis/Visualizer.py index 664db0e..65c7bb2 100644 --- a/perception/vis/window_builder.py +++ b/perception/vis/Visualizer.py @@ -2,6 +2,7 @@ import cv2 as cv import math from typing import Dict, Tuple, List +from matplotlib.pyplot import Figure def nothing(x): pass @@ -40,6 +41,15 @@ def reshape(self, frames: List[np.ndarray]) -> List[np.ndarray]: def display(self, frames: List[np.ndarray]) -> np.ndarray: num_frames = len(frames) assert (num_frames > 0 and num_frames <= 9), 'Invalid number of frames!' + + for i, frame in enumerate(frames): + if isinstance(frame, Figure): + img = np.fromstring(frame.canvas.tostring_rgb(), dtype=np.uint8, + sep='') + img = img.reshape(frame.canvas.get_width_height()[::-1] + (3,)) + img = cv.cvtColor(img, cv.COLOR_RGB2BGR) + frames[i] = img + frames = self.reshape(self.three_stack(frames)) columns = math.ceil(num_frames/math.sqrt(num_frames)) diff --git a/perception/vis/algo_stats b/perception/vis/algo_stats deleted file mode 100644 index 1ce1d890f9e408b2ee38df558040c8ff5b9d8a61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21410 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 J4LDg@{|7Y9P2K 1: + speed -= 1 + print(f'speed {speed}') + if key == ord('o'): + speed += 1 + print(f'speed {speed}') -# Main Loop -def main(): - for frame in data: - state, debug_frames = algorithm.analyze( - frame, debug=True, slider_vals=window_builder.update_vars() - ) + cv.destroyAllWindows() + if out: + out.close() - for i, dframe in enumerate(debug_frames): - if isinstance(dframe, Figure): - img = np.fromstring(dframe.canvas.tostring_rgb(), dtype=np.uint8, - sep='') - img = img.reshape(dframe.canvas.get_width_height()[::-1] + (3,)) - img = cv.cvtColor(img, cv.COLOR_RGB2BGR) - debug_frames[i] = img - to_show = window_builder.display(debug_frames) - cv.imshow('Debug Frames', to_show) - if args.save_video: - video_frames.append(to_show) +def profile(*args, stats='all'): + with cProfile.Profile() as pr: + run(*args) + if stats == 'all': + pr.print_stats() + else: + pr.print_stats(stats) - key_pressed = cv.waitKey(60) & 0xFF - if key_pressed == 112: - cv.waitKey(0) # pause - if key_pressed == 113: - break # quit -if args.cProfiler == 'disabled_cprof': - main() -else: - cp.run('main()', 'algo_stats') - p = pstats.Stats('algo_stats') - if args.cProfiler != 'all_methods': - p.print_stats(args.cProfiler) - else: - p.print_stats() +if __name__ == '__main__': + # Parse arguments + parser = argparse.ArgumentParser(description='Visualizes perception algorithms.') + parser.add_argument('--data', default='webcam', type=str) + parser.add_argument('--algorithm', type=str, required=True) + parser.add_argument('--profile', default=None, type=str) + parser.add_argument('--save_video', action='store_true') + args = parser.parse_args() + + # Get algorithm class and init + algorithm = ALGOS[args.algorithm]() -cv.destroyAllWindows() + # Initialize image source + # detects args.data, get a list of all file directory when given a directory + # change data_source to a list of all files in the directory + if os.path.isdir(args.data): + data_sources = os.listdir(args.data) + else: + data_sources = [args.data] -if args.save_video: - height, width, _ = video_frames[0].shape - w = imageio.get_writer('deb_cap.mp4') - for img in video_frames: - height2, width2, _ = img.shape - if (height2, width2) == (height, width): - imag = cv.resize(img, (width - (width % 16), height - (height % 16))) - imag = cv.cvtColor(imag, cv.COLOR_BGR2RGB) - w.append_data(imag) - w.close() + if args.profile is None: + run(data_sources, algorithm, args.save_video) + else: + profile(data_sources, algorithm, args.save_video, stats=args.profile) diff --git a/requirements.txt b/requirements.txt index 6531dbb..f411292 100755 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,7 @@ -opencv-python -scipy -numpy -matplotlib -imageio +opencv-python +scipy +numpy +matplotlib +imageio +imageio-ffmpeg +pytest \ No newline at end of file diff --git a/wiki/flowchart.png b/wiki/flowchart.png deleted file mode 100644 index 1bae9db9ca9b6c5de93ca5d768ce9fb2fbc40bde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237062 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 ZM&<6ERQRH#U Date: Sun, 17 Jan 2021 16:16:15 -0800 Subject: [PATCH 12/12] Update README.md (#37) --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index f37c4eb..707b51c 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,12 @@ Code for specific tasks like etc +In order to create your own algorithm to test: + +1. Create .py and put it in one of the specific task folders in perception/tasks. + +2. Create a class which extends the TaskPerceiver class. perception/tasks/TaskPerceiver.py includes a template with documentation for how to do this. + ## vis: Visualization tools Code for testing tasks (Ideally this should be placed a separate folder called `tests`).