layer factory fills layers

This commit is contained in:
Askill 2020-10-19 21:35:15 +02:00
parent 947b56b7e2
commit 079aaf4338
4 changed files with 35 additions and 9 deletions

View File

@ -13,7 +13,7 @@ class Config:
"maxLength": None,
"ttolerance": 60,
"videoBufferLength": 1000,
"noiseThreashold": 0.2,
"noiseThreashold": 0.05,
"noiseSensitivity": 3/4
}

View File

@ -132,4 +132,4 @@ class Exporter:
frameNumbers.update(
list(range(layer.startFrame, layer.startFrame + len(layer.bounds))))
return list(frameNumbers)
return sorted(list(frameNumbers))

View File

@ -1,6 +1,10 @@
from Application.Layer import Layer
from Application.Config import Config
from Application.VideoReader import VideoReader
from Application.Exporter import Exporter
from multiprocessing.pool import ThreadPool
import cv2
import numpy as np
class LayerFactory:
def __init__(self, config, data=None):
@ -18,8 +22,6 @@ class LayerFactory:
if data is not None:
self.extractLayers(data)
def removeStaticLayers(self):
'''Removes Layers with little to no movement'''
layers = []
@ -127,10 +129,32 @@ class LayerFactory:
return True
def fillLayers(self):
for i in range(len(self.layers)):
listOfFrames = Exporter(self.config).makeListOfFrames(self.layers)
videoReader = VideoReader(self.config, listOfFrames)
videoReader.fillBuffer()
while not videoReader.videoEnded():
frameCount, frame = videoReader.pop()
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
for i, layer in enumerate(self.layers):
if i % 20 == 0:
print(f"filled {int(round(i/len(self.layers),2)*100)}% of all Layers")
self.layers[i].fill(self.footagePath, self.resizeWidth)
if layer.startFrame <= frameCount and layer.startFrame + len(layer.bounds) > frameCount:
data = []
for (x, y, w, h) in layer.bounds[frameCount - layer.startFrame]:
if x is None:
break
factor = videoReader.w / self.resizeWidth
x = int(x * factor)
y = int(y * factor)
w = int(w * factor)
h = int(h * factor)
data.append(np.copy(frame[y:y+h, x:x+w]))
layer.data.append(data)
videoReader.thread.join()
def sortLayers(self):
self.layers.sort(key = lambda c:c.startFrame)

View File

@ -16,7 +16,7 @@ def demo():
config = Config()
config["inputPath"] = os.path.join(os.path.dirname(__file__), "generate test footage/3.mp4")
config["inputPath"] = os.path.join(os.path.dirname(__file__), "generate test footage/out.mp4")
#config["importPath"] = os.path.join(os.path.dirname(__file__), "output/short.txt")
config["outputPath"] = os.path.join(os.path.dirname(__file__), "output/short.mp4")
@ -29,7 +29,9 @@ def demo():
contours = ContourExtractor(config).extractContours()
print("Time consumed extracting: ", time.time() - start)
layerFactory = LayerFactory(config)
layers = layerFactory.extractLayers(contours)
layerFactory.fillLayers()
else:
layers = Importer(config).importRawData()