From 5837e6330e333aef20fa8049f2728c099ebc4171 Mon Sep 17 00:00:00 2001 From: Askill Date: Wed, 30 Sep 2020 19:22:10 +0200 Subject: [PATCH] overlay works --- .gitignore | 2 ++ ContourExctractor.py | 7 +++-- Exporter.py | 29 +++++++++++++++++++ Layer.py | 9 +++++- LayerFactory.py | 2 +- __pycache__/ContourExctractor.cpython-37.pyc | Bin 3104 -> 3135 bytes __pycache__/Exporter.cpython-37.pyc | Bin 1484 -> 2264 bytes __pycache__/Layer.cpython-37.pyc | Bin 709 -> 829 bytes __pycache__/LayerFactory.cpython-37.pyc | Bin 1664 -> 1664 bytes main.py | 2 +- short.mp4 | Bin 22607 -> 19187 bytes 11 files changed, 45 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index eea7b5d..5c18a8d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ generate test footage/images/ + +generate test footage/3.MP4 diff --git a/ContourExctractor.py b/ContourExctractor.py index 2299598..03ea153 100644 --- a/ContourExctractor.py +++ b/ContourExctractor.py @@ -15,9 +15,9 @@ class ContourExtractor: #X = {frame_number: [(contour, (x,y,w,h)), ...], } extractedContours = dict() - min_area = 200 - max_area = 30000 - threashold = 35 + min_area = 100 + max_area = 50000 + threashold = 12 xDim = 0 yDim = 0 @@ -50,6 +50,7 @@ class ContourExtractor: break frame = imutils.resize(frame, width=500) + frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) gray = cv2.GaussianBlur(gray, (5, 5), 0) diff --git a/Exporter.py b/Exporter.py index 4936acd..683c1e5 100644 --- a/Exporter.py +++ b/Exporter.py @@ -38,3 +38,32 @@ class Exporter: writer.close() #cv2.destroyAllWindows() + + def exportOverlayed(self, layers, outputPath): + fps = self.fps + writer = imageio.get_writer(outputPath, fps=fps) + + maxLength = self.getMaxLengthOfLayers(layers) + + for i in range(maxLength): + frame1 = np.zeros(shape=[1080, 1920, 3], dtype=np.uint8) + frame1 = imutils.resize(frame1, width=512) + + for layer in layers: + data = layer.data + if len(layer.data) > i: + frame = layer.data[i] + (x, y, w, h) = frame[1] + frame = frame[0] + + frame1[y:y+h, x:x+w] = frame + writer.append_data(np.array(frame1)) + writer.close() + + def getMaxLengthOfLayers(self, layers): + maxLength = 0 + for layer in layers: + if layer.getLength() > maxLength: + maxLength = layer.getLength() + return maxLength + diff --git a/Layer.py b/Layer.py index bdd809f..81be920 100644 --- a/Layer.py +++ b/Layer.py @@ -3,16 +3,23 @@ class Layer: startFrame = None lastFrame = None + length = None def __init__(self, startFrame, data): self.startFrame = startFrame self.lastFrame = startFrame + self.data = [] self.data.append(data) - print("Layer constructed") + #print("Layer constructed") def add(self, frameNumber, data): if not (self.startFrame + len(self.data) - frameNumber < 0): self.lastFrame = frameNumber self.data.append(data) + + def getLength(self): + self.length = len(self.data) + return self.length + diff --git a/LayerFactory.py b/LayerFactory.py index 4369d27..7b0e808 100644 --- a/LayerFactory.py +++ b/LayerFactory.py @@ -3,7 +3,7 @@ from Layer import Layer class LayerFactory: data = {} layers = [] - tolerance = -10 + tolerance = 5 def __init__(self, data=None): print("LayerFactory constructed") self.data = data diff --git a/__pycache__/ContourExctractor.cpython-37.pyc b/__pycache__/ContourExctractor.cpython-37.pyc index 496f1a7424069ed180693d899a19ddb3f8eaff15..91f68bb06de8bc358427853d2e7d048a3c950bdf 100644 GIT binary patch delta 595 zcmZvYO=}ZT6o&7anNG$`W+qAVF|l9Ne%N4JP1S`83USd*pb{#TAe6wJmKYM-J7cME zhb~+Tfh#UtP0$~p#7!aS!jnaoE{n+DlB$U7o^J>xA>*kI{Bn1-J~>R*eT=l zajO^ENkw`?h`mFm&UNqhWtl^lmwBmm*#JTxmEJY*#`^;}_HoM$C7v4bbXaAz_qT9`FHA`QGt2&*f@X%H8w)mdAQTqY3|pzn_JE8y4sxj4J}nN z_mF+_7Btj*b8Yn9`~fT1@Mlf5)6%uF6yc+ObXK?u};_^R0uv{lQ2V=C6o#C2pmk2roonZAlkhk6xXS8gYchQM2#_> z;W=UY3IytH`i;Ft(JjJF^~)}+hP?=PRo|YgwXC){JZg(DXj!}+1yQFLT%0j6E@Tmh UCff6`HPwI7J9;VB)!63$04aZu*#H0l delta 580 zcmZvY&ubGw6vyZ7Za4cQyZOpy1i^y`@l=Fdgc6*s#3kCyZbO9` zJb0{yz({Yxt`~2DM9=l8o;}EV7xZsXa9$3c9GDN^_rCAPFz1c5;otH+hp01r74Lub z-}%eneo|qtbwtR|rSVNj0A9=Y+P%VUZjOMR$&$X?D<*nc;zepwEz?DjTa-i=d&`T$ z8tf^r%vCPagr{_cd)%OfM1NGx3<^yme5I$kPYJcCeX3)e*0`V6GoqXsbptiEl(=a_ zp6kKYCa+{5s=Ugzh>Re1l+q(Zy{0vSfup)FV8wkyOpBVRiy2-{XQgYbuQ?r(%<=Mb zpjxD>`WL*+9d6$s+@^4y2z#*CAu2=m=j8+A02bsIBbIlken2j_&5q)UxdV6PM{{NT z%lr(N*45wS+VOF&4cly41?)0n1+j`A4B4XmW-UQy{M)JltjUTKJi|7&f!IVe5e-BO zF^iZ(1c(KNRhJb|PxhGytlJM`*2c^h;y;_&HX4fv>mO{TazB)B91p1c;JkFNptpm# zCjYpBjNFT`D^K0|c5Zdq!^19%!`!0XBusk!aPqX=n8-TL(w@Zm)Z?T6;ZwFDzq|A= Dr=F0C diff --git a/__pycache__/Exporter.cpython-37.pyc b/__pycache__/Exporter.cpython-37.pyc index bcdfd5e91755d10e0e057bb3476a2f619e6debdc..3505af85d84c729decf74d3fdbc14ba6dcb74160 100644 GIT binary patch delta 897 zcmZva&2AGh5XU{#_YGe=Gbr7TpfRfMIJKq)&f} zVe}3bho9oI^xv~JPX@ApvyjDyEDpaMe6?mX=S6cTQEC>~s4^mheg-=kyvblQ8|~Yz z%7#S=v6XNL9CvW^zK@2yGSF;nX_$a<`unM^ojthA);}9Jbvmx((vo)DLfezhM{c}S zbbReeS9;|2pJ@8KVT2Z)!1!r_<~`8vb6YjY)^3fNKnGIP*kjuiOwoiULf@ap^}y3b z>`{e%;JSc4B&)@jShw+rX?t8uopGqW2_6wxcP@`b69!B&lpt7%L6Ka~7Hz~^4>hQw z8*^2|Nu8!ojAH=Q846SgfQU=^x`8TCq=?AM?IeBB>@O!sfG;R4|zA=mvJSs{TWRx=3Pz$JT*aGXHrR3{Lb|MJf^0~J&B8sQS*u#D<5xmO5R z3G)QJ-)~SEvr^K3wXM?C*NLJ>ASpwSGB9u<;sKA~6wTy805c$X9m=p&Cb-cU|P&nAB=lvje`{d!*Ts delta 102 zcmca1c!rzLiIozlXK(Qlgx5atT~C5sYOL{Ks7}o zK;jl-#Vy9lTa4wm7&D?KZ(&Je_S0ma%*|oKs5jY*Ly?CAsD^`)g^7cigMD%}M=Ste CFBri9 diff --git a/__pycache__/Layer.cpython-37.pyc b/__pycache__/Layer.cpython-37.pyc index 62c7a0f62e653183b5fa79765447ac71a49bff38..2f83e590ecbcfdb607fa8380b749c7a726f211e7 100644 GIT binary patch delta 453 zcmZWkJ5Iwu5S>}u>otjkLSa!MfuL|hC=dq#2?;53L+8da>?Q~jinS>SQ7GU7mTL|` zMN31;C0ue6W^4&0*wwuGy!n25A98RUhHF3%-^=VlRD;u_1M&={s38>^Q-{PQ@wCv+ zGo(_x+9U02seRH)<2l5tT5aJ@^|BpkAQzL^t-ki6*lFCt%qCV)Q|l7Eg7xcNJRB-= z3I;%lQb??CaP=t3PkR%a&rNbSzc98fvOa}7;EKk{wH}gDa5~^7byx)B{NC7oVlI)R z^jP!Y6Ov+spoAq{;}b3+6J&{QQ^)p*YX_Y*a%OI)Fh(&0F-r$*)S#C$TcMNFg~tuehYBG`S=- zMU!>nWmVZ*tOZ4xc_o_6w^)i(bJB{KfL0Z;0Ev|hMI4j)7)^xPft+HngBaPskcVk< zFk_uINIZ%=ttc@!)vq)+DYXc!t%w6;0GQwevTiXarljys{=+EAq{%*cCX;?T$fP1( yxFS^LMT|fR5H1FZb1<_ovM_OQfJOZ@8NoD?1qfR>Y;yBcN^?@}Kzcs|F#`affj-gz diff --git a/__pycache__/LayerFactory.cpython-37.pyc b/__pycache__/LayerFactory.cpython-37.pyc index 87c4d502eb8914b1e97e2ada13fdaf61b1c9fd4f..8ba42587c36de4d5f8c22822be3e71084d436433 100644 GIT binary patch delta 244 zcmZqRZQ$i~;^pOH0D|}xCGqzr@~&ik$qM96+}+H<2BcRq6mf2LW2|Lj1M!MjC!b^v z5#RtZLHt|HCHXl;l9P2=!UQ-$f?xtWP1FP1B?&S{07P(u2zC%54k8dXLG(@5U^CD_7X&K2#bJ}1pHiBW OYR3rV6*B<|9wq?czbfYpMJ$s~ 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 r34nsXJ`%pWdp5!H@L*_=8~kTg&Imj3?$!H%-( literal 22607 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 Ap#T5?