Added basic pipeline
This commit is contained in:
parent
9846c60f2c
commit
868473e284
1 changed files with 87 additions and 0 deletions
87
src/autophotographer.py
Normal file
87
src/autophotographer.py
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
import cv2
|
||||||
|
import sys
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
import pathlib
|
||||||
|
import numpy
|
||||||
|
import time
|
||||||
|
|
||||||
|
# Process arguments
|
||||||
|
def parse_arguments(argv=None):
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('-i', '--input', dest='inputfile', type=pathlib.Path, help='Specify a video file')
|
||||||
|
parser.add_argument('-o', '--output', dest='outputfolder', type=pathlib.Path, help='Specify a folder to save frames to')
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
# Convert video to frames
|
||||||
|
def video_to_frames():
|
||||||
|
startTime = time.time()
|
||||||
|
print("Converting video to frames...")
|
||||||
|
capture = cv2.VideoCapture(str(inputfile))
|
||||||
|
success,image = capture.read()
|
||||||
|
count = 0
|
||||||
|
while success:
|
||||||
|
outputfile = outputfolder + "/frame%d.jpg" % count
|
||||||
|
# print(outputfile)
|
||||||
|
cv2.imwrite(outputfile, image)
|
||||||
|
success,image = capture.read()
|
||||||
|
count +=1
|
||||||
|
endTime = time.time()
|
||||||
|
totalTime = endTime - startTime
|
||||||
|
print("Exported " + str(count) + " frames in " + str(totalTime) + " seconds.")
|
||||||
|
|
||||||
|
# Shrink set based on filesize
|
||||||
|
def display_file_sizes():
|
||||||
|
filesizes = []
|
||||||
|
for filename in os.listdir(outputfolder):
|
||||||
|
filepath = outputfolder + "/" + filename
|
||||||
|
filesize = os.path.getsize(filepath)
|
||||||
|
print(filepath + ": " + str(filesize))
|
||||||
|
filesizes.append(filesize)
|
||||||
|
# work out average
|
||||||
|
average = sum(filesizes)/len(filesizes)
|
||||||
|
print ("Average is: " + str(average))
|
||||||
|
# delete files below average
|
||||||
|
count = 0
|
||||||
|
for filename in os.listdir(outputfolder):
|
||||||
|
filepath = outputfolder + "/" + filename
|
||||||
|
if filesizes[count] < average:
|
||||||
|
# print(filepath + ": " + str(filesizes[count]))
|
||||||
|
os.remove(filepath)
|
||||||
|
count += 1
|
||||||
|
|
||||||
|
#def remove_similar_frames():
|
||||||
|
def order_frames_by_filesize():
|
||||||
|
frames = os.listdir(outputfolder)
|
||||||
|
frames = sorted(frames, key = lambda x: os.stat(os.path.join(outputfolder, x)).st_size, reverse = True)
|
||||||
|
for frame in frames:
|
||||||
|
filesize = os.stat(os.path.join(outputfolder, frame)).st_size
|
||||||
|
if filesize > 1024:
|
||||||
|
filesize = filesize / 1024
|
||||||
|
print(frame + ": " + str(filesize) + " KB")
|
||||||
|
else:
|
||||||
|
print(frame + ": " + str(filesize))
|
||||||
|
|
||||||
|
def order_frames_by_brightness():
|
||||||
|
frames_path = os.listdir(outputfolder)
|
||||||
|
frames_path = sorted(frames_path, key = return_frame_brightness)
|
||||||
|
for frame_path in frames_path:
|
||||||
|
print(frame_path + ": " + str(return_frame_brightness(frame_path)))
|
||||||
|
|
||||||
|
def return_frame_brightness(frame_path):
|
||||||
|
frame = cv2.imread(os.path.join(outputfolder, frame_path))
|
||||||
|
hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
|
||||||
|
h, s, v = cv2.split(hsv_frame)
|
||||||
|
average_v = numpy.average(v)
|
||||||
|
return average_v
|
||||||
|
|
||||||
|
args = parse_arguments()
|
||||||
|
inputfile = str(args.inputfile.absolute())
|
||||||
|
outputfolder = str(args.outputfolder.absolute())
|
||||||
|
|
||||||
|
# Convert video to frames
|
||||||
|
video_to_frames()
|
||||||
|
|
||||||
|
display_file_sizes()
|
||||||
|
#order_frames_by_filesize()
|
||||||
|
#order_frames_by_brightness()
|
Reference in a new issue