2020-09-23 20:02:46 +00:00
|
|
|
import imageio
|
2020-09-25 17:52:41 +00:00
|
|
|
import imutils
|
2020-09-23 20:02:46 +00:00
|
|
|
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:
|
2020-09-23 20:02:46 +00:00
|
|
|
fps = 30
|
2020-09-24 13:47:49 +00:00
|
|
|
|
|
|
|
|
def __init__(self):
|
2020-09-23 20:02:46 +00:00
|
|
|
print("Exporter initiated")
|
2020-09-24 13:47:49 +00:00
|
|
|
|
|
|
|
|
def export(self, frames, outputPath):
|
2020-09-23 20:02:46 +00:00
|
|
|
fps = self.fps
|
|
|
|
|
writer = imageio.get_writer(outputPath, fps=fps)
|
2020-09-24 13:47:49 +00:00
|
|
|
for frame in frames:
|
2020-09-23 20:02:46 +00:00
|
|
|
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
|
|
|
|
|
|