added timestamps to video out

fxed fps in overlayed
This commit is contained in:
Askill 2020-12-20 15:49:43 +01:00
parent f08f71f9c7
commit c828e2e0d2
3 changed files with 37 additions and 15 deletions

View File

@ -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()

View File

@ -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
View File

@ -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)