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