From 2d00ffcd1a4f5715a7f13ce2ced9678ee076fa62 Mon Sep 17 00:00:00 2001 From: Askill Date: Thu, 24 Sep 2020 22:48:04 +0200 Subject: [PATCH] started Layer extraction --- ContourExctractor.py | 4 +- Layer.py | 12 +++- LayerFactory.py | 61 ++++++++++++++++++- __pycache__/ContourExctractor.cpython-37.pyc | Bin 2793 -> 2944 bytes __pycache__/Exporter.cpython-37.pyc | Bin 755 -> 755 bytes __pycache__/Layer.cpython-37.pyc | Bin 0 -> 704 bytes __pycache__/LayerFactory.cpython-37.pyc | Bin 0 -> 1505 bytes main.py | 7 ++- 8 files changed, 76 insertions(+), 8 deletions(-) create mode 100644 __pycache__/Layer.cpython-37.pyc create mode 100644 __pycache__/LayerFactory.cpython-37.pyc diff --git a/ContourExctractor.py b/ContourExctractor.py index e22f638..9e708de 100644 --- a/ContourExctractor.py +++ b/ContourExctractor.py @@ -21,10 +21,12 @@ class ContourExtractor: xDim = 0 yDim = 0 + def getextractedContours(self): + return self.extractedContours + def __init__(self, videoPath): print("ContourExtractor initiated") - min_area = self.min_area max_area = self.max_area threashold = self.threashold diff --git a/Layer.py b/Layer.py index 676cee4..8de2e3a 100644 --- a/Layer.py +++ b/Layer.py @@ -2,10 +2,16 @@ class Layer: #data = [(contour, (x,y,w,h)),] data = [] startFrame = 0 + lastFrame = 0 backgroundImage = [] + def __init__(self, startFrame, data, backgroundImage): self.startFrame = startFrame - self.data = data + self.data.append(data) self.backgroundImage = backgroundImage - - print("Layer constructed") \ No newline at end of file + + print("Layer constructed") + + def add(self, frameNumber, data): + self.lastFrame = frameNumber + self.data.append(data) diff --git a/LayerFactory.py b/LayerFactory.py index 0334b72..912ce37 100644 --- a/LayerFactory.py +++ b/LayerFactory.py @@ -1,3 +1,60 @@ +from Layer import Layer + class LayerFactory: - def __init__(self): - print("LayerFactory constructed") \ No newline at end of file + data = {} + layers = [] + def __init__(self, data=None): + print("LayerFactory constructed") + self.data = data + if data is not None: + self.extractLayers(data) + + def extractLayers(self, data = None): + if self.data is None: + if data is None: + print("LayerFactory data was none") + return None + else: + self.data = data + + layers = [] + frameNumber = min(data) + contours = data[frameNumber] + + for contour in contours: + layers.append(Layer(frameNumber, contour, None)) + + for frameNumber, contours in data.items(): + for layer in layers: + if frameNumber - layer.lastFrame < 5: + for contour, (x,y,w,h) in contours: + if len(layer.data[-1][1]) != 4: + print("LayerFactory: Layer knew no bounds") + continue + (x2,y2,w2,h2) = layer.data[-1][1] + + if self.contoursOverlay((x,y+h), (x+w,y), (x2,y2+h2), (x2+w2,y2)): + layer.add(frameNumber, (contour, (x,y,w,h))) + else: + layers.append(Layer(frameNumber, contour, None)) + + self.layers = layers + + + def contoursOverlay(self, l1, r1, l2, r2): + + # If one rectangle is on left side of other + if(l1[0] >= r2[0] or l2[0] >= r1[0]): + return False + + # If one rectangle is above other + if(l1[1] <= r2[1] or l2[1] <= r1[1]): + return False + + return True + + + + + + diff --git a/__pycache__/ContourExctractor.cpython-37.pyc b/__pycache__/ContourExctractor.cpython-37.pyc index ae032db439b21e9f8c0b6bf2f5e81c2e4f93ee63..428ed160beb0d6503dafa3e79e385b6c323f341a 100644 GIT binary patch delta 931 zcmZuv&2G~`5cWE8;-ra7N=uumx~$>sr8%{>)iUu zn&-ccN?z%+c3SqzZ#3JI6}H`A6oi9j`WyI*9Kr|forY2D#Ad3(2Qj#Lb(9!|>e;$g&n4ePQQ%%N#iX?5J7 z&BdcI;m~!5+`CA*7SXJ<43$gVZXZSJL8Ockhfn~u2bR;EeLskw!UHm_5YS0^Sfu5u zY~-sa)B~^)ls*_JJvoFbS=I?Q2sX*b5-8DTs>pfI7ZK{3+}>+B&i|QR9&983-{S1K zRDXIl>`?Muf@|%tN88)VVGV6ayb+x{1GmQoJf`3pLG>BoZT+xMwpkTed=P~YPYQ5k zw{XlX`Mt2q>5)u5iL|Mg5)0(rA~+y;LU7Za>vsSdbkKDP>baT8vFzm2&5T)>_2Sy0 tGF@m#E(oqn&y9KP_jp>l%BD-ADm@g+2>QKf2s`piaqG_XY4S(0_7~wz$RGd! delta 761 zcmZva&2G~`5XZe6+i{ZGB|u7xNWX#-Oo6Hw=mE8YNTPQ&v8~ySmGlA< zPf+cZGZN=qk$8h#xb2B+-vJ?ZjMCDow)FGt?9R@AX8h^idCPn4x^+W8&%gG=se9)A zAUkK%UGtsc&&egyn^4-J#F=!>eX^^XY$PB$6fEA$QjraT`z>X1);|hrMG~{@AQC4q zr>_GS;b{c4;Hm%d5%( zo2dgYMcYRZ4H$>Vcz6TReu=!QAD*D^rV2bZ$}gCwlLs3B delta 28 icmey&`k9s2iIXhcmRaZiIYG`C=Fe-lI4qis~q{mc8Xi2yL%8Q zc^96*EfqB#qF~0+K>-te-%M=J%r{P69UpH1?cuLheq{jP=;h7?24@I&AL$Kf(Cij* z!zbuKGzx6S%vhSx;FMZ zCPJMMqmd^C=Lq*0X=XD>nBj_j;xqru7|a4!gvaVP_@)7C@$zsl7JF0=z4Laez0pM) zHqI;SUt86gkZ9#q$kaHRUWd~QRe#vqVe0kUPVG%dN89wiNJ8RFdud67B{4Qb`T};1 z?&p*G`EInsm8rek`KB}2uN$p#t{M7WRPb!P4!M*~-*_o=OmalPGPY$IKb$Ow?he${ zhm1Vo9N``y{X2J@l$C`D>sGmCszqXo=L=z}Q8>D!Y0Ig*Fm~A`s zNMf&|3YYl=2}lzlACNL->XcigNyT4Clgundg@Uu>%+AcsW9PB^s?`bs*V4_C&uRdF z5wlqi5?>&wLqq}u8$k{+F!%}t7tS>ZXUStG+;5@ntxyNr%y@6oc_w?rZPvY?XDG=4 zEgTVZn$Q*C>Mb4cxUls+h5ch7pj!gUYUuuW4wtR6s2)RTBfFz z%}R-3t-fk=$O8{@7 z;w2`(WR-&wXCEqecBtLg@cmxpX@29Bu6DF1VChhSE?=I(>`%>Zyjwt>Kf1hf(BgN^ zk^8OkQP;olpJ4ZgASbh5tf!w)%j>#TtqQ7o6_z#B!O7SM;qJqd32*4gU-4`{wdV5u z_E)rORL!bY?O>AvUDJUMA48ubReuaRK&qjeddJEdx`nc4pWnJaGI^l=n>wA{TGe&f zckv6i5kAc8{TWRAD$J0WncEb*cBz@!LgTnafWRev^(!d&TP-eM`>!Vbar!vhm~XOC_zV3ok|gW2xt$=({GYW6K3|{VB^5)_v^Dv^Fjrkh literal 0 HcmV?d00001 diff --git a/main.py b/main.py index 5df723f..60d3881 100644 --- a/main.py +++ b/main.py @@ -2,6 +2,7 @@ import os import time from ContourExctractor import ContourExtractor from Exporter import Exporter +from LayerFactory import LayerFactory #TODO # finden von relevanten Stellen anhand von zu findenen metriken für vergleichsbilder # X diff zu den ref bildern aufnehmen @@ -10,14 +11,16 @@ from Exporter import Exporter def demo(): print("startup") - footagePath = os.path.join(os.path.dirname(__file__), "./generate test footage/2.mp4") + footagePath = os.path.join(os.path.dirname(__file__), "./generate test footage/out.mp4") start = time.time() contourExtractor = ContourExtractor(footagePath) print("Time consumed in working: ",time.time() - start) frames = contourExtractor.exportContours() - Exporter().export(frames,os.path.join(os.path.dirname(__file__), "./short.mp4")) + #Exporter().export(frames,os.path.join(os.path.dirname(__file__), "./short.mp4")) + contours = contourExtractor.getextractedContours() + layerFactory = LayerFactory(contourExtractor.extractedContours) def init():