Adafruit_Learning_System_Gu.../Mask_Efficacy/process_run.py
2022-02-23 14:04:02 -05:00

58 lines
1.6 KiB
Python

# SPDX-FileCopyrightText: 2020 Carter Nelson for Adafruit Industries
#
# SPDX-License-Identifier: MIT
import time
import imageio
from skimage.color import rgb2gray
import matplotlib.pyplot as plt
import numpy as np
THRESH = 0.3
RUN = int(input('Enter run number: '))
vid = imageio.get_reader('run_{:03d}.mp4'.format(RUN), 'ffmpeg')
#----------------
# MAIN PROCESSING
#----------------
frame_data = []
start = time.monotonic()
# go through video frame by frame
print("Processing", end='')
for frame in vid:
print('.', end='', flush=True)
frame_bin = rgb2gray(frame) > THRESH
frame_count = np.count_nonzero(frame_bin == True)
frame_percent = 100 * frame_count / (1920*1080)
frame_data.append((frame_count, frame_percent))
# overall stats
avg_count = sum([x[0] for x in frame_data]) / len(frame_data)
avg_percent = 100 * avg_count / (1920*1080)
end = time.monotonic()
print("\nProcessing done in {} secs.".format(end - start))
print("Average Count = {}".format(avg_count))
print("Average Percent = {}".format(avg_percent))
#-------------
# SAVE TO FILE
#-------------
print("Saving data to file...")
with open('run_{:03d}.csv'.format(RUN), 'w') as fp:
for frame, data in enumerate(frame_data):
fp.write('{},{},{}\n'.format(frame, data[0], data[1]))
#---------
# PLOTTING
#---------
print("Generating plots...")
fig, ax = plt.subplots(1, figsize = (10,5))
ax.set_title("RUN {:03d}\nTHRESH = {}, AVG_CNT = {:4.2}, AVG_PER = {:.3}".format(RUN, THRESH,avg_count, avg_percent))
ax.set_xlabel("FRAME")
ax.set_ylabel("COUNT")
ax.plot([x[0] for x in frame_data])
fig.savefig('run_{:03d}_plot.png'.format(RUN))
print("DONE.")