From efa299a9f51da3796f250a81d272d57291f9af03 Mon Sep 17 00:00:00 2001 From: Askill Date: Mon, 28 Sep 2020 22:28:23 +0200 Subject: [PATCH] still shit, but better --- ContourExctractor.py | 21 +++++++++------- Exporter.py | 14 +++++------ Layer.py | 6 ++--- LayerFactory.py | 24 +++++++++---------- __pycache__/ContourExctractor.cpython-37.pyc | Bin 2939 -> 3104 bytes __pycache__/Exporter.cpython-37.pyc | Bin 1442 -> 1332 bytes __pycache__/Layer.cpython-37.pyc | Bin 704 -> 663 bytes __pycache__/LayerFactory.cpython-37.pyc | Bin 1575 -> 1549 bytes main.py | 10 ++++---- 9 files changed, 39 insertions(+), 36 deletions(-) diff --git a/ContourExctractor.py b/ContourExctractor.py index 8e16bc1..acb3fc9 100644 --- a/ContourExctractor.py +++ b/ContourExctractor.py @@ -15,7 +15,7 @@ class ContourExtractor: #X = {frame_number: [(contour, (x,y,w,h)), ...], } extractedContours = dict() - min_area = 0 + min_area = 200 max_area = 30000 threashold = 25 xDim = 0 @@ -24,9 +24,10 @@ class ContourExtractor: def getextractedContours(self): return self.extractedContours - def __init__(self, videoPath): + def __init__(self): print("ContourExtractor initiated") + def extractContours(self, videoPath): min_area = self.min_area max_area = self.max_area threashold = self.threashold @@ -40,15 +41,15 @@ class ContourExtractor: firstFrame = None # loop over the frames of the video frameCount = 0 + extractedContours = dict() while res: res, frame = vs.read() # resize the frame, convert it to grayscale, and blur it if frame is None: print("ContourExtractor: frame was None") - return + break frame = imutils.resize(frame, width=500) - cv2.imshow( "frame", frame) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) gray = cv2.GaussianBlur(gray, (5, 5), 0) @@ -66,18 +67,22 @@ class ContourExtractor: contours = [] for c in cnts: - if cv2.contourArea(c) < min_area or cv2.contourArea(c) > max_area: + ca = cv2.contourArea(c) + if ca < min_area or ca > max_area: continue - (x, y, w, h) = cv2.boundingRect(c) + #print((x, y, w, h)) contours.append((frame[y:y+h, x:x+w], (x, y, w, h))) + #cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) - self.extractedContours[frameCount] = contours + if len(contours) != 0: + extractedContours[frameCount] = contours frameCount += 1 #cv2.imshow( "annotated", frame ) - #cv2.waitKey(10) & 0XFF + self.extractedContours = extractedContours + def displayContours(self): values = self.extractedContours.values() diff --git a/Exporter.py b/Exporter.py index 82e54d9..2b8306a 100644 --- a/Exporter.py +++ b/Exporter.py @@ -17,21 +17,19 @@ class Exporter: writer.close() def exportLayers(self, layers, outputPath): + fps = self.fps + writer = imageio.get_writer(outputPath, fps=fps) for layer in layers: data = layer.data - fps = self.fps - writer = imageio.get_writer(outputPath, fps=fps) for frame in data: - - (x, y, w, h) = frame[1] frame = frame[0] frame1 = np.zeros(shape=[1080, 1920, 3], dtype=np.uint8) frame1 = imutils.resize(frame1, width=512) frame1[y:y+frame.shape[0], x:x+frame.shape[1]] = frame writer.append_data(np.array(frame1)) - cv2.imshow("changes overlayed", frame) - cv2.waitKey(10) & 0XFF + #cv2.imshow("changes overlayed", frame) + #cv2.waitKey(10) & 0XFF - writer.close() - cv2.destroyAllWindows() + writer.close() + #cv2.destroyAllWindows() diff --git a/Layer.py b/Layer.py index 8de2e3a..75b0f62 100644 --- a/Layer.py +++ b/Layer.py @@ -5,12 +5,12 @@ class Layer: lastFrame = 0 backgroundImage = [] - def __init__(self, startFrame, data, backgroundImage): + def __init__(self, startFrame, data): self.startFrame = startFrame + self.lastFrame = startFrame self.data.append(data) - self.backgroundImage = backgroundImage - print("Layer constructed") + #print("Layer constructed") def add(self, frameNumber, data): self.lastFrame = frameNumber diff --git a/LayerFactory.py b/LayerFactory.py index e5cdba8..7c2c4ab 100644 --- a/LayerFactory.py +++ b/LayerFactory.py @@ -22,26 +22,24 @@ class LayerFactory: contours = data[frameNumber] for contour in contours: - layers.append(Layer(frameNumber, contour, None)) + layers.append(Layer(frameNumber, contour)) + # inserts all the fucking contours as layers? for frameNumber, contours in data.items(): - layerNum = len(layers) - i = 0 - while i < layerNum: - layer = layers[i] - if frameNumber - layer.lastFrame < 5: - for contour, (x,y,w,h) in contours: + for contour, (x,y,w,h) in contours: + for layer in layers: + if frameNumber - layer.lastFrame <= 5: 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)): + tol = 10 + if self.contoursOverlay((x-tol,y+h+tol), (x+w+tol,y-tol), (x2,y2+h2), (x2+w2,y2)): layer.add(frameNumber, (contour, (x,y,w,h))) - else: - layers.append(Layer(frameNumber, contour, None)) - layerNum = len(layers) - i+=1 + break + + layers.append(Layer(frameNumber, (contour, (x,y,w,h)))) self.layers = layers diff --git a/__pycache__/ContourExctractor.cpython-37.pyc b/__pycache__/ContourExctractor.cpython-37.pyc index a7f602be504b316b4462c44f067ae0e63d79a750..2d4c7b67766aad5901e9c000982b55f6594dd70c 100644 GIT binary patch delta 1534 zcmZux&2Jk;6rY*>@P2#aICj!}@F9}cP(n&8N>PPWN^?MJRFy-JRb*KihinqZ&g?pM zsu_F;To9EKt;E^p$bmng5)wyFNFW5#{s;LBI3OY3+q7x1x=-_)_h#P5yqWj*pUQCB z|H$_p0$;c)8h@PlKhw37Ul%^p>lWARHaEEW6{$PCz%7_vZgU4_kGtH1+2=kFU=Dck zQ&J1F@OEb}>GZ^%ej=J1Nk^Ri0-mFl9wDbQzzLdOr>oRTzodhU6r;k2GlOv(M(hD3 zgwrER2`Au`rBAf^t2LS#T@mdiH7W|ABCK<;fy=B$Bif6SMq?JF7`>6SZq5&K4umQU zG|6Lp4-qBVCW--4r2#UfC)!Y#bVQXQjiE6j512AlK^C@6PG>;BamKTpw>VK2XUb0O zBchyR+FzCCF%{pvVCzbEz{!p!4iblJn9x0vxZ9p|xz3HpOt}!!mw?;Bh$#=GqV%}Q z*+^5Kgb-l+qx6)ue;@Wj32UI|13w{ssq+F@mPR@rPX)kF%77DYar?1`@~|ui!EkCs zV5>4{Y;PFH;eNCUE3+WyG?ySzE zjYPPxoE4&WFNt>J%oMFSdelmP(0{s=X}hgGVZwf`nwL!7K8Sd$bFZ0fi4uC7L@1}< z7?)jC%ZyFYY`4-U#`1t|G&9=I=wU`5W^`-3+KR2S`hHsN@dB8~p8ybQB54luD3Z=} zkR9qVi&~VifC6b2)q(eDg@v?29nf)r%CK5u*R+6Ii`3H}y*l1Y%VSZ~1M~MqAA$<( zATa?@V*)EZGk9{?ZAI8t&@e&TF3edW?gzq5PYTt`c{5Jusy*nc_XYNim_tAZVhW&c zM(ud3^DzCb@XA`=bZ^6I#`^t?9b6GhsCNcO*LwP) z_3z-NM;C8_{rSOxuetdn3XCn55#B*KPe81oICgw|5HNgxXfuD?SX@EncM+CuBL4sU z;wrAaEQ6rc?{-A;ECHVWZQr8B^oH}sKwLm0te_Xm3Prr%vxDLfR^YEqyoqoP;XQ=s z7nO7PFB2L-03)sdSeglS@syaQ0o}0tT&EV){ivP(=`7A+`k9_Y?N)jeg@x^2>LapM3D~F z43KFH(9(8lPaH+3R6EL~MJq$JuzCAooe?cLLBm!hOoL562ZnLHScg3CN)WO(&W%9l)-nkN|6H=|J&3 z)2}MfeD49+$_jMgR|L7DipmxqM9xfYEK`RdSJgNa1etqkp<*(t!pYnej_K53&O_QL z^(S=|!EK|jh%Sw!itds}9bE?RhAK~~VmsuBCJQHfYsZFL-aevxs9Qjv4O>_AjIQcg zRhpbrzM6qCJ5Ro4w^Rj26~!$iuL6dun%%Ou*c8~nBoB!y0r88m_U0ssSJ$A7kPyC zNIK>UpKsPNY(94#0zn_j1}YX1FoB#!!1~RAzx_F~BAWmi8;vrye@!l<<~+g*!UeR^ zeTnp(rK2R`WU#w=@Ur;iOY;~1cl^e><+~7nQZ>lUAb*(rYTf~pk<04<_ z70iU}9#`t2bP?ey!gYkxo;hh8X@LP>DM9wR@7xAu{oyOgE{ze(= YCz;b5b_WOYl6f9nET2tm{tj0E0~=)=z5oCK diff --git a/__pycache__/Exporter.cpython-37.pyc b/__pycache__/Exporter.cpython-37.pyc index b8adc05914db15f3288cd2afe98622f0ca4790e0..04af32cce291ba2e6948af06ec2feb222e8015a3 100644 GIT binary patch delta 268 zcmZ3)y@iX{iIG1szHG}N#G`4y87Fr}-qEZ{0(S-@SxvygEiBO^nhRyaeUR5(Ko%L1N- z42%pZ48aVVT$A&d?Zq{Di$E3@af1jRAaRQ&C9x!N@ zTqFci2-YGDWJR%pg^Q#oXR_GINB~6`7}*&47`cEX7oz|p2csB}r@<(}GWjHnAEWBz mJXZ0^`mD-QazK^0So2DA3o48Ffb1eBkN|UXnbG7NRxpv zlD>i91E@=%K=KCN`2^}roq><!%m%0k40FH2CCjh^{^& zg)1!-5sq3AsR3>&9CMYzBaXDeGbf@mjNfqmNK5p9BnCHANC8k_CKlCsF2xhiQzHdx z?jb<8t5w9cWIC0uRb|tbPSF{vSn-LnyLDfvH5{+*`lW8qWo;*P=~(`8{3}o?WQ00_ z!{iGyBus&Lq->sNO0Bn%Y0Zw`==QT*-)RQNZpdsg&kEG_1J(`q+wE%8qust=v6v<& zn%uyARuthvodmWZ{C~qt3}mOgC^7;aG;#BwD>h8QtgscZ!Gt0W$jV|`z+A($ zkdcugg&~+hlhIF;MhQk#9}CuB_**W@fKTRK|yL>iYD_dmg3Z$ zv?7q%MXW$#B|{Mhkou*XY!y>bG})d}pNkF1XJBLl!pT*Pt|mn+KrUEq5lBXpxriM| zMRBKrZ1OA3O-e0-$b!rP8&&Tov(t<6OY>4Za}(23i$Fdv l;)ZKN)}GI#t%l%(S)4$Hw>WHa^HWN5QtcRlyw5<)0056TL;U~% delta 341 zcmbQvdVrPJiIFfB^DH<=B3=?PfASAPA|$Y%}epjO-xr#y~SEkl$lqe$#RROI5j7& z2;_(&kZX$AfW%6MBF@PijFvncKn?>V8zT=R8`ETOMpvs_oH>cb5Gx?cS%C^PnTtRQ zZ*ixAtoAF-O-e0-$Z`UOi@*fezg9tvjLS!v&OxgknKGd8> GCNTi*yh=a- diff --git a/__pycache__/LayerFactory.cpython-37.pyc b/__pycache__/LayerFactory.cpython-37.pyc index c21679bab7874f9b34d7fbcd0e7acd660caaa796..35bf1b1d0fa875a8dc5e447b6808418486beda2f 100644 GIT binary patch delta 523 zcmY*WziU)M5Z>7z@7KL|cSw?ViHe{gf^f)Hf?{z-i`b+KgortLcLZ}rviBhGV3vTF z!bT9bwYaOStzx64rGLOy0UL!>`2!MXPZ3?1VP?MXo7vg@kiJc`Zk8pC&c!4BZ1rRI z9_mfXQnH6+qiuT(_Ybe2TxCxej6yyYr9^>h!e;<%|G@^U&Jm_+#)xsY#f>ns`Z4F9 zP^Pw|2~21r6Ib7m6X&Z*NT0k2TCCu^@D6ml3@K-YSZ0M>W)mpXuF#)KD1wQfadh}E zObu%$HJPawp=ltSMi^kD#W2J;XV}QufKw&<9aEJss?;#W`W&laMp!!FGwFw8GL8L0 zqzN&?cpwSkz}DH{Wv~7R{@MI!gYEB;ZQB)b+pdYb>ZgB5`&!&=#KYdGe5`vf`%Vn| zd-hmd%bGeQSS#;x`(51VI;b3s9UM5=acbBb_qF3y$MJDzlOK@nbet$(4Rz!-a~Jz4 zAm=}5bjPmC{PF_71WS-WlY9i6FM)(Ev?#h|-^ed&k*IC^L_KfjUhOYAZ=o0MXVr%5 I_Eg>b1uRv14*&oF delta 572 zcmZ8fJ&O}j6n*!7%vWZTSqT$kp`a)%+H6?-K(SD zgx6Y3wz1Gg5CjYVfz39;bb`Oa%KHYkaUS<@-nsYOJ9n6O@y9rMlq3%qR96JXl>u`Gmd5j6zxUE)j*oiM5bY4>Jl8VRW7?M zS6#M-+&dKdYyr8ycEe9y`aDav#57IIq{zwuLyR!)urVjr=rD|kCD_EY))H)y)*SPV zq}STTpbXtwwX1>gSW<@96L`7(-_GZ|%})Ca{aoE)#-E+^*(|qBaZ_oaFK6$GyY{WP z(GruQ$N%)9yd0d+WCStvdF*>cDk-rtbd(_@aPK diff --git a/main.py b/main.py index f0bdff3..6ca0693 100644 --- a/main.py +++ b/main.py @@ -11,17 +11,19 @@ from LayerFactory import LayerFactory 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) + contourExtractor = ContourExtractor() + contourExtractor.extractContours(footagePath) print("Time consumed in working: ",time.time() - start) - frames = contourExtractor.exportContours() + #frames = contourExtractor.exportContours() #Exporter().export(frames,os.path.join(os.path.dirname(__file__), "./short.mp4")) + contours = contourExtractor.getextractedContours() - layerFactory = LayerFactory(contourExtractor.extractedContours) + layerFactory = LayerFactory(contours) Exporter().exportLayers(layerFactory.layers, os.path.join(os.path.dirname(__file__), "./short.mp4")) def init():