Video-Summary/Exporter.py

72 lines
2.4 KiB
Python
Raw Normal View History

import imageio
2020-09-25 17:52:41 +00:00
import imutils
import numpy as np
2020-09-25 17:52:41 +00:00
from Layer import Layer
import cv2
2020-09-20 20:01:54 +00:00
class Exporter:
fps = 30
2020-09-24 13:47:49 +00:00
def __init__(self):
print("Exporter initiated")
2020-09-24 13:47:49 +00:00
def export(self, frames, outputPath):
fps = self.fps
writer = imageio.get_writer(outputPath, fps=fps)
2020-09-24 13:47:49 +00:00
for frame in frames:
writer.append_data(np.array(frame))
2020-09-24 13:47:49 +00:00
writer.close()
2020-09-25 17:52:41 +00:00
2020-10-04 12:51:16 +00:00
def exportLayers(self,underlay, layers, outputPath, resizeWidth):
2020-09-28 20:28:23 +00:00
fps = self.fps
writer = imageio.get_writer(outputPath, fps=fps)
2020-09-29 20:52:36 +00:00
i=0
2020-09-25 17:52:41 +00:00
for layer in layers:
data = layer.data
2020-10-04 12:51:16 +00:00
contours = layer.bounds
2020-09-29 20:52:36 +00:00
if len(data) < 10:
continue
2020-10-04 12:51:16 +00:00
for frame, contour in zip(data, contours):
(x, y, w, h) = contour
frame = frame
frame1 = underlay
frame1 = imutils.resize(frame1, width=resizeWidth)
frame1 = cv2.cvtColor(frame1, cv2.COLOR_BGR2RGB)
2020-09-25 17:52:41 +00:00
frame1[y:y+frame.shape[0], x:x+frame.shape[1]] = frame
2020-09-29 20:52:36 +00:00
cv2.putText(frame1, str(i), (30,30), cv2.FONT_HERSHEY_SIMPLEX, 1,(255,255,255), 2)
2020-09-25 17:52:41 +00:00
writer.append_data(np.array(frame1))
2020-09-28 20:28:23 +00:00
#cv2.imshow("changes overlayed", frame)
#cv2.waitKey(10) & 0XFF
2020-09-29 20:52:36 +00:00
i += 1
2020-09-25 17:52:41 +00:00
2020-09-28 20:28:23 +00:00
writer.close()
#cv2.destroyAllWindows()
2020-09-30 17:22:10 +00:00
2020-10-03 22:27:36 +00:00
def exportOverlayed(self, underlay, layers, outputPath, resizeWidth):
2020-09-30 17:22:10 +00:00
fps = self.fps
writer = imageio.get_writer(outputPath, fps=fps)
maxLength = self.getMaxLengthOfLayers(layers)
for i in range(maxLength):
2020-10-03 22:27:36 +00:00
frame1 = underlay
frame1 = imutils.resize(frame1, width=resizeWidth)
frame1 = cv2.cvtColor(frame1, cv2.COLOR_BGR2RGB)
2020-09-30 17:22:10 +00:00
for layer in layers:
data = layer.data
if len(layer.data) > i:
2020-10-03 22:27:36 +00:00
(x, y, w, h) = layer.bounds[i]
2020-09-30 17:22:10 +00:00
frame = layer.data[i]
2020-10-03 22:27:36 +00:00
if frame is not None:
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
frame1[y:y+h, x:x+w] = frame
2020-09-30 17:22:10 +00:00
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