parent
a01b5d2a2f
commit
90c07016fe
|
|
@ -63,9 +63,9 @@ class ContourExtractor:
|
||||||
|
|
||||||
tmpData = [videoReader.pop() for i in range(0, videoReader.buffer.qsize())]
|
tmpData = [videoReader.pop() for i in range(0, videoReader.buffer.qsize())]
|
||||||
self.computeMovingAverage(tmpData)
|
self.computeMovingAverage(tmpData)
|
||||||
pool.map(self.getContours, tmpData)
|
#pool.map(self.getContours, tmpData)
|
||||||
#for data in tmpData:
|
for data in tmpData:
|
||||||
# self.getContours(data)
|
self.getContours(data)
|
||||||
frameCount = tmpData[-1][0]
|
frameCount = tmpData[-1][0]
|
||||||
|
|
||||||
videoReader.thread.join()
|
videoReader.thread.join()
|
||||||
|
|
@ -105,6 +105,8 @@ class ContourExtractor:
|
||||||
contours.append((x, y, w, h))
|
contours.append((x, y, w, h))
|
||||||
masks.append(np.packbits(np.copy(thresh[y:y+h,x:x+w]), axis=0))
|
masks.append(np.packbits(np.copy(thresh[y:y+h,x:x+w]), axis=0))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if len(contours) != 0 and contours is not None:
|
if len(contours) != 0 and contours is not None:
|
||||||
# this should be thread safe
|
# this should be thread safe
|
||||||
self.extractedContours[frameCount] = contours
|
self.extractedContours[frameCount] = contours
|
||||||
|
|
@ -113,7 +115,7 @@ class ContourExtractor:
|
||||||
def prepareFrame(self, frame):
|
def prepareFrame(self, frame):
|
||||||
frame = imutils.resize(frame, width=self.resizeWidth)
|
frame = imutils.resize(frame, width=self.resizeWidth)
|
||||||
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
||||||
gray = cv2.GaussianBlur(gray, (5, 5), 0)
|
gray = cv2.GaussianBlur(gray, (3, 3), 0)
|
||||||
return gray
|
return gray
|
||||||
|
|
||||||
def computeMovingAverage(self, frames):
|
def computeMovingAverage(self, frames):
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,9 @@ class Exporter:
|
||||||
self.config = config
|
self.config = config
|
||||||
print("Exporter initiated")
|
print("Exporter initiated")
|
||||||
|
|
||||||
def export(self, layers, contours, raw = True, overlayed = True):
|
def export(self, layers, contours, masks, raw = True, overlayed = True):
|
||||||
if raw:
|
if raw:
|
||||||
self.exportRawData(layers, contours)
|
self.exportRawData(layers, contours, masks)
|
||||||
if overlayed:
|
if overlayed:
|
||||||
self.exportOverlayed(layers)
|
self.exportOverlayed(layers)
|
||||||
else:
|
else:
|
||||||
|
|
@ -72,6 +72,7 @@ class Exporter:
|
||||||
h = int(h * factor)
|
h = 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(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)
|
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)
|
||||||
|
|
@ -115,13 +116,18 @@ class Exporter:
|
||||||
y = int(y * factor)
|
y = int(y * factor)
|
||||||
w = int(w * factor)
|
w = int(w * factor)
|
||||||
h = int(h * factor)
|
h = int(h * factor)
|
||||||
mask = imutils.resize(mask, width=w, height=h+1)*255
|
mask = imutils.resize(mask, width=w, height=h+1)
|
||||||
mask = np.resize(mask, (h,w))
|
mask = np.resize(mask, (h,w))
|
||||||
# if exportFrame as index instead of frameCount - layer.startFrame then we have layer after layer
|
|
||||||
frame2 = frames[frameCount - layer.startFrame]
|
frame2 = frames[frameCount - layer.startFrame]
|
||||||
frame2[y:y+h, x:x+w] = cv2.bitwise_and(frame2[y:y+h, x:x+w],frame2[y:y+h, x:x+w], mask)# + frame2[y:y+h, x:x+w]/2
|
#frame2[y:y+h, x:x+w] = cv2.bitwise_or(frame2[y:y+h, x:x+w], frame2[y:y+h, x:x+w], mask=cv2.bitwise_not(mask)))
|
||||||
|
#frame2[y:y+h, x:x+w] = np.zeros((h, w, 3))
|
||||||
|
frame2[y:y+h, x:x+w] = np.copy(cv2.bitwise_and(underlay[y:y+h, x:x+w], underlay[y:y+h, x:x+w], mask=cv2.bitwise_not(mask)))
|
||||||
|
frame2[y:y+h, x:x+w] = cv2.addWeighted(np.copy(frame2[y:y+h, x:x+w]),1, np.copy(cv2.bitwise_and(frame[y:y+h, x:x+w], frame[y:y+h, x:x+w], mask=mask)),.5,0)
|
||||||
|
|
||||||
frames[frameCount - layer.startFrame] = np.copy(frame2)
|
frames[frameCount - layer.startFrame] = np.copy(frame2)
|
||||||
|
cv2.imshow("changes x", frame2)
|
||||||
|
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)
|
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)
|
||||||
|
|
||||||
videoReader.thread.join()
|
videoReader.thread.join()
|
||||||
|
|
@ -135,7 +141,7 @@ class Exporter:
|
||||||
|
|
||||||
writer.close()
|
writer.close()
|
||||||
|
|
||||||
def exportRawData(self, layers, contours):
|
def exportRawData(self, layers, contours, masks):
|
||||||
with open(self.config["importPath"], "wb+") as file:
|
with open(self.config["importPath"], "wb+") as file:
|
||||||
pickle.dump((layers, contours, masks), file)
|
pickle.dump((layers, contours, masks), file)
|
||||||
|
|
||||||
|
|
|
||||||
6
main.py
6
main.py
|
|
@ -32,8 +32,8 @@ def main():
|
||||||
layers = layerFactory.extractLayers(contours, masks)
|
layers = layerFactory.extractLayers(contours, masks)
|
||||||
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()
|
||||||
|
|
@ -42,7 +42,7 @@ def main():
|
||||||
layers = layerManager.layers
|
layers = layerManager.layers
|
||||||
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, raw=True, overlayed=True)
|
exporter.export(layers, contours, masks, raw=True, overlayed=True)
|
||||||
|
|
||||||
print("Total time: ", time.time() - start)
|
print("Total time: ", time.time() - start)
|
||||||
exit(0)
|
exit(0)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue