/ Mask_Efficacy / process_run.py
process_run.py
 1  # SPDX-FileCopyrightText: 2020 Carter Nelson for Adafruit Industries
 2  #
 3  # SPDX-License-Identifier: MIT
 4  
 5  import time
 6  import imageio
 7  from skimage.color import rgb2gray
 8  import matplotlib.pyplot as plt
 9  import numpy as np
10  
11  THRESH = 0.3
12  
13  RUN = int(input('Enter run number: '))
14  
15  vid = imageio.get_reader('run_{:03d}.mp4'.format(RUN), 'ffmpeg')
16  
17  #----------------
18  # MAIN PROCESSING
19  #----------------
20  frame_data = []
21  start = time.monotonic()
22  # go through video frame by frame
23  print("Processing", end='')
24  for frame in vid:
25      print('.', end='', flush=True)
26      frame_bin = rgb2gray(frame) > THRESH
27      frame_count = np.count_nonzero(frame_bin == True)
28      frame_percent = 100 * frame_count / (1920*1080)
29      frame_data.append((frame_count, frame_percent))
30  # overall stats
31  avg_count = sum([x[0] for x in frame_data]) / len(frame_data)
32  avg_percent = 100 * avg_count / (1920*1080)
33  
34  end = time.monotonic()
35  print("\nProcessing done in {} secs.".format(end - start))
36  print("Average Count = {}".format(avg_count))
37  print("Average Percent = {}".format(avg_percent))
38  
39  #-------------
40  # SAVE TO FILE
41  #-------------
42  print("Saving data to file...")
43  with open('run_{:03d}.csv'.format(RUN), 'w') as fp:
44      for frame, data in enumerate(frame_data):
45          fp.write('{},{},{}\n'.format(frame, data[0], data[1]))
46  
47  #---------
48  # PLOTTING
49  #---------
50  print("Generating plots...")
51  fig, ax = plt.subplots(1, figsize = (10,5))
52  ax.set_title("RUN {:03d}\nTHRESH = {}, AVG_CNT = {:4.2}, AVG_PER = {:.3}".format(RUN, THRESH,avg_count, avg_percent))
53  ax.set_xlabel("FRAME")
54  ax.set_ylabel("COUNT")
55  ax.plot([x[0] for x in frame_data])
56  fig.savefig('run_{:03d}_plot.png'.format(RUN))
57  
58  print("DONE.")