Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(238)

Side by Side Diff: webrtc/tools/compare_videos.py

Issue 2553693002: Comparison of videos with reference frame not starting from zero (Closed)
Patch Set: Updated PrintMaxRepeatedAndSkippedFrames() for two stat files. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 # Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 # 3 #
4 # Use of this source code is governed by a BSD-style license 4 # Use of this source code is governed by a BSD-style license
5 # that can be found in the LICENSE file in the root of the source 5 # that can be found in the LICENSE file in the root of the source
6 # tree. An additional intellectual property rights grant can be found 6 # tree. An additional intellectual property rights grant can be found
7 # in the file PATENTS. All contributing project authors may 7 # in the file PATENTS. All contributing project authors may
8 # be found in the AUTHORS file in the root of the source tree. 8 # be found in the AUTHORS file in the root of the source tree.
9 9
10 import optparse 10 import optparse
(...skipping 30 matching lines...) Expand all
41 'will assume we can find it in barcode_tools/' 41 'will assume we can find it in barcode_tools/'
42 'relative to this directory.')) 42 'relative to this directory.'))
43 parser.add_option('--ffmpeg_path', type='string', 43 parser.add_option('--ffmpeg_path', type='string',
44 help=('The path to where the ffmpeg executable is located. ' 44 help=('The path to where the ffmpeg executable is located. '
45 'If omitted, it will be assumed to be present in the ' 45 'If omitted, it will be assumed to be present in the '
46 'PATH with the name ffmpeg[.exe].')) 46 'PATH with the name ffmpeg[.exe].'))
47 parser.add_option('--zxing_path', type='string', 47 parser.add_option('--zxing_path', type='string',
48 help=('The path to where the zxing executable is located. ' 48 help=('The path to where the zxing executable is located. '
49 'If omitted, it will be assumed to be present in the ' 49 'If omitted, it will be assumed to be present in the '
50 'PATH with the name zxing[.exe].')) 50 'PATH with the name zxing[.exe].'))
51 parser.add_option('--stats_file', type='string', default='stats.txt', 51 parser.add_option('--stats_file_ref', type='string', default='stats_ref.txt',
52 help=('Path to the temporary stats file to be created and '
53 'used. Default: %default'))
54 parser.add_option('--stats_file_test', type='string',
55 default='stats_test.txt',
52 help=('Path to the temporary stats file to be created and ' 56 help=('Path to the temporary stats file to be created and '
53 'used. Default: %default')) 57 'used. Default: %default'))
54 parser.add_option('--yuv_frame_width', type='int', default=640, 58 parser.add_option('--yuv_frame_width', type='int', default=640,
55 help='Width of the YUV file\'s frames. Default: %default') 59 help='Width of the YUV file\'s frames. Default: %default')
56 parser.add_option('--yuv_frame_height', type='int', default=480, 60 parser.add_option('--yuv_frame_height', type='int', default=480,
57 help='Height of the YUV file\'s frames. Default: %default') 61 help='Height of the YUV file\'s frames. Default: %default')
58 options, _ = parser.parse_args() 62 options, _ = parser.parse_args()
59 63
60 if not options.ref_video: 64 if not options.ref_video:
61 parser.error('You must provide a path to the reference video!') 65 parser.error('You must provide a path to the reference video!')
62 if not os.path.exists(options.ref_video): 66 if not os.path.exists(options.ref_video):
63 parser.error('Cannot find the reference video at %s' % options.ref_video) 67 parser.error('Cannot find the reference video at %s' % options.ref_video)
64 68
65 if not options.test_video: 69 if not options.test_video:
66 parser.error('You must provide a path to the test video!') 70 parser.error('You must provide a path to the test video!')
67 if not os.path.exists(options.test_video): 71 if not os.path.exists(options.test_video):
68 parser.error('Cannot find the test video at %s' % options.test_video) 72 parser.error('Cannot find the test video at %s' % options.test_video)
69 73
70 if not options.frame_analyzer: 74 if not options.frame_analyzer:
71 parser.error('You must provide the path to the frame analyzer executable!') 75 parser.error('You must provide the path to the frame analyzer executable!')
72 if not os.path.exists(options.frame_analyzer): 76 if not os.path.exists(options.frame_analyzer):
73 parser.error('Cannot find frame analyzer executable at %s!' % 77 parser.error('Cannot find frame analyzer executable at %s!' %
74 options.frame_analyzer) 78 options.frame_analyzer)
75 return options 79 return options
76 80
81 def make_stat_file(options, path_to_decoder, null_filehandle, video, stat_file):
phoglund 2016/12/08 09:55:43 The convention in these files is MakeStatFile (mai
phoglund 2016/12/08 09:55:43 Passing null_filehandle seems silly. This function
phoglund 2016/12/08 09:55:43 Sure, this function makes a stat file, but it's be
mandermo 2016/12/08 18:08:30 From the comment for null_filehandle, I understand
mandermo 2016/12/08 18:08:30 Renamed to DecodeBarcodesInVideo
mandermo 2016/12/08 18:08:30 Done.
82 # Run barcode decoder on the test video to identify frame numbers.
83 png_working_directory = tempfile.mkdtemp()
84 cmd = [
85 sys.executable,
86 path_to_decoder,
87 '--yuv_file=%s' % video,
88 '--yuv_frame_width=%d' % options.yuv_frame_width,
89 '--yuv_frame_height=%d' % options.yuv_frame_height,
90 '--stats_file=%s' % stat_file,
91 '--png_working_dir=%s' % png_working_directory,
92 ]
93 if options.zxing_path:
94 cmd.append('--zxing_path=%s' % options.zxing_path)
95 if options.ffmpeg_path:
96 cmd.append('--ffmpeg_path=%s' % options.ffmpeg_path)
97 barcode_decoder = subprocess.Popen(cmd, stdin=null_filehandle,
98 stdout=sys.stdout, stderr=sys.stderr)
99 barcode_decoder.wait()
100
101 shutil.rmtree(png_working_directory)
102 if barcode_decoder.returncode != 0:
103 print 'Failed to run barcode decoder script.'
104 return 1
105 return 0
77 106
78 def main(): 107 def main():
79 """The main function. 108 """The main function.
80 109
110 TODO(mandermo) update
81 A simple invocation is: 111 A simple invocation is:
82 ./webrtc/tools/barcode_tools/compare_videos.py 112 ./webrtc/tools/barcode_tools/compare_videos.py
83 --ref_video=<path_and_name_of_reference_video> 113 --ref_video=<path_and_name_of_reference_video>
84 --test_video=<path_and_name_of_test_video> 114 --test_video=<path_and_name_of_test_video>
85 --frame_analyzer=<path_and_name_of_the_frame_analyzer_executable> 115 --frame_analyzer=<path_and_name_of_the_frame_analyzer_executable>
86 116
87 Notice that the prerequisites for barcode_decoder.py also applies to this 117 Notice that the prerequisites for barcode_decoder.py also applies to this
88 script. The means the following executables have to be available in the PATH: 118 script. The means the following executables have to be available in the PATH:
89 * zxing 119 * zxing
90 * ffmpeg 120 * ffmpeg
91 """ 121 """
92 options = _ParseArgs() 122 options = _ParseArgs()
93 123
94 if options.barcode_decoder: 124 if options.barcode_decoder:
95 path_to_decoder = options.barcode_decoder 125 path_to_decoder = options.barcode_decoder
96 else: 126 else:
97 path_to_decoder = os.path.join(SCRIPT_DIR, 'barcode_tools', 127 path_to_decoder = os.path.join(SCRIPT_DIR, 'barcode_tools',
98 'barcode_decoder.py') 128 'barcode_decoder.py')
99 129
100 # On Windows, sometimes the inherited stdin handle from the parent process 130 # On Windows, sometimes the inherited stdin handle from the parent process
101 # fails. Work around this by passing null to stdin to the subprocesses. 131 # fails. Work around this by passing null to stdin to the subprocesses.
102 null_filehandle = open(os.devnull, 'r') 132 null_filehandle = open(os.devnull, 'r')
103 133
104 # Run barcode decoder on the test video to identify frame numbers. 134 if make_stat_file(options, path_to_decoder, null_filehandle,
105 png_working_directory = tempfile.mkdtemp() 135 options.ref_video, options.stats_file_ref) != 0:
106 cmd = [ 136 return 1
107 sys.executable, 137 if make_stat_file(options, path_to_decoder, null_filehandle,
108 path_to_decoder, 138 options.test_video, options.stats_file_test) != 0:
109 '--yuv_file=%s' % options.test_video,
110 '--yuv_frame_width=%d' % options.yuv_frame_width,
111 '--yuv_frame_height=%d' % options.yuv_frame_height,
112 '--stats_file=%s' % options.stats_file,
113 '--png_working_dir=%s' % png_working_directory,
114 ]
115 if options.zxing_path:
116 cmd.append('--zxing_path=%s' % options.zxing_path)
117 if options.ffmpeg_path:
118 cmd.append('--ffmpeg_path=%s' % options.ffmpeg_path)
119 barcode_decoder = subprocess.Popen(cmd, stdin=null_filehandle,
120 stdout=sys.stdout, stderr=sys.stderr)
121 barcode_decoder.wait()
122
123 shutil.rmtree(png_working_directory)
124 if barcode_decoder.returncode != 0:
125 print 'Failed to run barcode decoder script.'
126 return 1 139 return 1
127 140
128 # Run frame analyzer to compare the videos and print output. 141 # Run frame analyzer to compare the videos and print output.
129 cmd = [ 142 cmd = [
130 options.frame_analyzer, 143 options.frame_analyzer,
131 '--label=%s' % options.label, 144 '--label=%s' % options.label,
132 '--reference_file=%s' % options.ref_video, 145 '--reference_file=%s' % options.ref_video,
133 '--test_file=%s' % options.test_video, 146 '--test_file=%s' % options.test_video,
134 '--stats_file=%s' % options.stats_file, 147 '--stats_file_ref=%s' % options.stats_file_ref,
148 '--stats_file_test=%s' % options.stats_file_test,
135 '--width=%d' % options.yuv_frame_width, 149 '--width=%d' % options.yuv_frame_width,
136 '--height=%d' % options.yuv_frame_height, 150 '--height=%d' % options.yuv_frame_height,
137 ] 151 ]
138 frame_analyzer = subprocess.Popen(cmd, stdin=null_filehandle, 152 frame_analyzer = subprocess.Popen(cmd, stdin=null_filehandle,
139 stdout=sys.stdout, stderr=sys.stderr) 153 stdout=sys.stdout, stderr=sys.stderr)
140 frame_analyzer.wait() 154 frame_analyzer.wait()
141 if frame_analyzer.returncode != 0: 155 if frame_analyzer.returncode != 0:
142 print 'Failed to run frame analyzer.' 156 print 'Failed to run frame analyzer.'
143 return 1 157 return 1
144 158
145 return 0 159 return 0
146 160
147 if __name__ == '__main__': 161 if __name__ == '__main__':
148 sys.exit(main()) 162 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | webrtc/tools/frame_analyzer/frame_analyzer.cc » ('j') | webrtc/tools/frame_analyzer/frame_analyzer.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698