parent
f08f71f9c7
commit
c828e2e0d2
|
|
@ -6,6 +6,7 @@ import cv2
|
||||||
from Application.VideoReader import VideoReader
|
from Application.VideoReader import VideoReader
|
||||||
import pickle
|
import pickle
|
||||||
import time
|
import time
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
class Exporter:
|
class Exporter:
|
||||||
fps = 30
|
fps = 30
|
||||||
|
|
@ -58,8 +59,10 @@ class Exporter:
|
||||||
x, y, w, h = (int(x * factor), int(y * factor), int(w * factor), int(h * factor))
|
x, y, w, h = (int(x * factor), int(y * factor), int(w * factor), int(h * factor))
|
||||||
|
|
||||||
frame2[y:y+h, x:x+w] = np.copy(frame[y:y+h, x:x+w])
|
frame2[y:y+h, x:x+w] = np.copy(frame[y:y+h, x:x+w])
|
||||||
cv2.putText(frame2, str(i) + " " + str(int(frameCount/self.fps)), (int(x+w/2), int(y+h/2)), cv2.FONT_HERSHEY_SIMPLEX, 1,(255,255,255), 2)
|
|
||||||
cv2.putText(frame2, str(layer.stats["avg"]) + " " + str(layer.stats["var"]) + " " + str(layer.stats["dev"]), (int(500), int(500)), cv2.FONT_HERSHEY_SIMPLEX, 1,(255,0,255), 2)
|
time = datetime.fromtimestamp(int(frameCount/self.fps) + videoReader.getStartTime())
|
||||||
|
cv2.putText(frame2, str(i) + " " + f"{time.hour}:{time.minute}:{time.second}", (int(x+w/2), int(y+h/2)), cv2.FONT_HERSHEY_SIMPLEX, 1,(255,255,255), 2)
|
||||||
|
#cv2.putText(frame2, str(layer.stats["avg"]) + " " + str(layer.stats["var"]) + " " + str(layer.stats["dev"]), (int(500), int(500)), cv2.FONT_HERSHEY_SIMPLEX, 1,(255,0,255), 2)
|
||||||
writer.append_data(frame2)
|
writer.append_data(frame2)
|
||||||
videoReader.vc.release()
|
videoReader.vc.release()
|
||||||
videoReader.thread.join()
|
videoReader.thread.join()
|
||||||
|
|
@ -81,7 +84,7 @@ class Exporter:
|
||||||
frames.append(np.copy(underlay))
|
frames.append(np.copy(underlay))
|
||||||
exportFrame = 0
|
exportFrame = 0
|
||||||
|
|
||||||
|
|
||||||
while not videoReader.videoEnded():
|
while not videoReader.videoEnded():
|
||||||
frameCount, frame = videoReader.pop()
|
frameCount, frame = videoReader.pop()
|
||||||
if frameCount % (60*self.fps) == 0:
|
if frameCount % (60*self.fps) == 0:
|
||||||
|
|
@ -112,7 +115,8 @@ class Exporter:
|
||||||
frames[frameCount - layer.startFrame] = np.copy(frame2)
|
frames[frameCount - layer.startFrame] = np.copy(frame2)
|
||||||
#cv2.imshow("changes x", frame2)
|
#cv2.imshow("changes x", frame2)
|
||||||
#cv2.waitKey(10) & 0XFF
|
#cv2.waitKey(10) & 0XFF
|
||||||
cv2.putText(frames[frameCount - layer.startFrame], str(int(frameCount/self.fps)), (int(x+w/2), int(y+h/2)), cv2.FONT_HERSHEY_SIMPLEX, 1,(255,255,255), 2)
|
time = datetime.fromtimestamp(int(frameCount/self.fps) + videoReader.getStartTime())
|
||||||
|
cv2.putText(frames[frameCount - layer.startFrame], f"{time.hour}:{time.minute}:{time.second}", (int(x+w/2), int(y+h/2)), cv2.FONT_HERSHEY_SIMPLEX, 1,(255,255,255), 2)
|
||||||
|
|
||||||
videoReader.thread.join()
|
videoReader.thread.join()
|
||||||
videoReader.vc.release()
|
videoReader.vc.release()
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,10 @@ import cv2
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from queue import Queue
|
from queue import Queue
|
||||||
import threading
|
import threading
|
||||||
|
import pathlib
|
||||||
from Application.Config import Config
|
from Application.Config import Config
|
||||||
|
import os
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
class VideoReader:
|
class VideoReader:
|
||||||
listOfFrames = None
|
listOfFrames = None
|
||||||
|
|
@ -25,6 +27,8 @@ class VideoReader:
|
||||||
self.vc = cv2.VideoCapture(videoPath)
|
self.vc = cv2.VideoCapture(videoPath)
|
||||||
self.stopped = False
|
self.stopped = False
|
||||||
self.getWH()
|
self.getWH()
|
||||||
|
self.calcFPS()
|
||||||
|
self.calcStartTime()
|
||||||
if setOfFrames is not None:
|
if setOfFrames is not None:
|
||||||
self.listOfFrames = sorted(setOfFrames)
|
self.listOfFrames = sorted(setOfFrames)
|
||||||
|
|
||||||
|
|
@ -95,5 +99,18 @@ class VideoReader:
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def calcFPS(self):
|
||||||
|
self.fps = self.vc.get(cv2.CAP_PROP_FPS)
|
||||||
|
|
||||||
def getFPS(self):
|
def getFPS(self):
|
||||||
return self.vc.get(cv2.CAP_PROP_FPS)
|
return self.fps
|
||||||
|
|
||||||
|
def calcStartTime(self):
|
||||||
|
starttime = os.stat(self.videoPath).st_mtime
|
||||||
|
fc = int(self.vc.get(cv2.CAP_PROP_FRAME_COUNT))
|
||||||
|
length = fc / self.getFPS()
|
||||||
|
starttime = starttime - length
|
||||||
|
self.starttime = starttime
|
||||||
|
|
||||||
|
def getStartTime(self):
|
||||||
|
return self.starttime
|
||||||
|
|
|
||||||
19
main.py
19
main.py
|
|
@ -25,38 +25,39 @@ def main():
|
||||||
config["importPath"] = os.path.join(outputPath, fileName.split(".")[0] + ".txt")
|
config["importPath"] = os.path.join(outputPath, fileName.split(".")[0] + ".txt")
|
||||||
|
|
||||||
config["w"], config["h"] = VideoReader(config).getWH()
|
config["w"], config["h"] = VideoReader(config).getWH()
|
||||||
stats = dict()
|
stats = []
|
||||||
if not os.path.exists(config["importPath"]):
|
if not os.path.exists(config["importPath"]):
|
||||||
contours, masks = ContourExtractor(config).extractContours()
|
contours, masks = ContourExtractor(config).extractContours()
|
||||||
stats["Contour Extractor"] = time.time() - start
|
stats.append(time.time() - start)
|
||||||
start = time.time()
|
start = time.time()
|
||||||
|
|
||||||
print("Time consumed extracting contours: ", stats["Contour Extractor"])
|
print("Time consumed extracting contours: ", stats["Contour Extractor"])
|
||||||
layerFactory = LayerFactory(config)
|
layerFactory = LayerFactory(config)
|
||||||
layers = layerFactory.extractLayers(contours, masks)
|
layers = layerFactory.extractLayers(contours, masks)
|
||||||
stats["Layer Factory"] = time.time() - start
|
stats.append(time.time() - start)
|
||||||
start = time.time()
|
start = time.time()
|
||||||
else:
|
else:
|
||||||
layers, contours, masks = Importer(config).importRawData()
|
layers, contours, masks = Importer(config).importRawData()
|
||||||
layerFactory = LayerFactory(config)
|
#layerFactory = LayerFactory(config)
|
||||||
layers = layerFactory.extractLayers(contours, masks)
|
#layers = layerFactory.extractLayers(contours, masks)
|
||||||
|
|
||||||
layerManager = LayerManager(config, layers)
|
layerManager = LayerManager(config, layers)
|
||||||
layerManager.transformLayers()
|
layerManager.transformLayers()
|
||||||
stats["Layer Manager"] = time.time() - start
|
stats.append(time.time() - start)
|
||||||
start = time.time()
|
start = time.time()
|
||||||
|
|
||||||
#layerManager.tagLayers()
|
#layerManager.tagLayers()
|
||||||
layers = layerManager.layers
|
layers = layerManager.layers
|
||||||
print([len(l) for l in sorted(layers, key = lambda c:len(c), reverse=True)[:20]])
|
#print([len(l) for l in sorted(layers, key = lambda c:len(c), reverse=True)[:20]])
|
||||||
if len(layers) == 0:
|
if len(layers) == 0:
|
||||||
exit(1)
|
exit(1)
|
||||||
exporter = Exporter(config)
|
exporter = Exporter(config)
|
||||||
print(f"Exporting {len(contours)} Contours and {len(layers)} Layers")
|
print(f"Exporting {len(contours)} Contours and {len(layers)} Layers")
|
||||||
exporter.export(layers, contours, masks, raw=True, overlayed=False)
|
exporter.export(layers, contours, masks, raw=True, overlayed=True)
|
||||||
stats["Exporter"] = time.time() - start
|
stats.append(time.time() - start)
|
||||||
|
|
||||||
print("Total time: ", time.time() - startTotal)
|
print("Total time: ", time.time() - startTotal)
|
||||||
|
stats.append(time.time() - startTotal)
|
||||||
print(stats)
|
print(stats)
|
||||||
exit(0)
|
exit(0)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue