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