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

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

Issue 2553693002: Comparison of videos with reference frame not starting from zero (Closed)
Patch Set: Fixed parameter comments for video analysis and added ignored --stats_file argument Created 3 years, 11 months 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
« no previous file with comments | « no previous file | webrtc/tools/frame_analyzer/frame_analyzer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 ' 52 help=('Path to the temporary stats file to be created and '
53 'used. Default: %default')) 53 'used for the reference video file. '
54 'Default: %default'))
55 parser.add_option('--stats_file_test', type='string',
56 default='stats_test.txt',
57 help=('Path to the temporary stats file to be created and '
58 'used for the test video file. Default: %default'))
59 parser.add_option('--stats_file', type='string',
60 default='stats_deprecated.txt',
61 help=('DEPRECATED and ignored'))
kjellander_webrtc 2017/01/04 14:47:07 I suggest having --stats_file_test read from this
kjellander_webrtc 2017/01/09 12:12:19 You raised the point off-review that the test won'
54 parser.add_option('--yuv_frame_width', type='int', default=640, 62 parser.add_option('--yuv_frame_width', type='int', default=640,
55 help='Width of the YUV file\'s frames. Default: %default') 63 help='Width of the YUV file\'s frames. Default: %default')
56 parser.add_option('--yuv_frame_height', type='int', default=480, 64 parser.add_option('--yuv_frame_height', type='int', default=480,
57 help='Height of the YUV file\'s frames. Default: %default') 65 help='Height of the YUV file\'s frames. Default: %default')
58 options, _ = parser.parse_args() 66 options, _ = parser.parse_args()
59 67
60 if not options.ref_video: 68 if not options.ref_video:
61 parser.error('You must provide a path to the reference video!') 69 parser.error('You must provide a path to the reference video!')
62 if not os.path.exists(options.ref_video): 70 if not os.path.exists(options.ref_video):
63 parser.error('Cannot find the reference video at %s' % options.ref_video) 71 parser.error('Cannot find the reference video at %s' % options.ref_video)
64 72
65 if not options.test_video: 73 if not options.test_video:
66 parser.error('You must provide a path to the test video!') 74 parser.error('You must provide a path to the test video!')
67 if not os.path.exists(options.test_video): 75 if not os.path.exists(options.test_video):
68 parser.error('Cannot find the test video at %s' % options.test_video) 76 parser.error('Cannot find the test video at %s' % options.test_video)
69 77
70 if not options.frame_analyzer: 78 if not options.frame_analyzer:
71 parser.error('You must provide the path to the frame analyzer executable!') 79 parser.error('You must provide the path to the frame analyzer executable!')
72 if not os.path.exists(options.frame_analyzer): 80 if not os.path.exists(options.frame_analyzer):
73 parser.error('Cannot find frame analyzer executable at %s!' % 81 parser.error('Cannot find frame analyzer executable at %s!' %
74 options.frame_analyzer) 82 options.frame_analyzer)
75 return options 83 return options
76 84
85 def _DevNull():
86 """On Windows, sometimes the inherited stdin handle from the parent process
87 fails. Workaround this by passing null to stdin to the subprocesses commands.
88 This function can be used to create the null file handler.
89 """
90 return open(os.devnull, 'r')
91
92 def DecodeBarcodesInVideo(options, path_to_decoder, video, stat_file):
93 # Run barcode decoder on the test video to identify frame numbers.
94 png_working_directory = tempfile.mkdtemp()
95 cmd = [
96 sys.executable,
97 path_to_decoder,
98 '--yuv_file=%s' % video,
99 '--yuv_frame_width=%d' % options.yuv_frame_width,
100 '--yuv_frame_height=%d' % options.yuv_frame_height,
101 '--stats_file=%s' % stat_file,
102 '--png_working_dir=%s' % png_working_directory,
103 ]
104 if options.zxing_path:
105 cmd.append('--zxing_path=%s' % options.zxing_path)
106 if options.ffmpeg_path:
107 cmd.append('--ffmpeg_path=%s' % options.ffmpeg_path)
108
109
110 barcode_decoder = subprocess.Popen(cmd, stdin=_DevNull(),
111 stdout=sys.stdout, stderr=sys.stderr)
112 barcode_decoder.wait()
113
114 shutil.rmtree(png_working_directory)
115 if barcode_decoder.returncode != 0:
116 print 'Failed to run barcode decoder script.'
117 return 1
118 return 0
77 119
78 def main(): 120 def main():
79 """The main function. 121 """The main function.
80 122
81 A simple invocation is: 123 A simple invocation is:
82 ./webrtc/tools/barcode_tools/compare_videos.py 124 ./webrtc/tools/barcode_tools/compare_videos.py
83 --ref_video=<path_and_name_of_reference_video> 125 --ref_video=<path_and_name_of_reference_video>
84 --test_video=<path_and_name_of_test_video> 126 --test_video=<path_and_name_of_test_video>
85 --frame_analyzer=<path_and_name_of_the_frame_analyzer_executable> 127 --frame_analyzer=<path_and_name_of_the_frame_analyzer_executable>
86 128
87 Notice that the prerequisites for barcode_decoder.py also applies to this 129 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: 130 script. The means the following executables have to be available in the PATH:
89 * zxing 131 * zxing
90 * ffmpeg 132 * ffmpeg
91 """ 133 """
92 options = _ParseArgs() 134 options = _ParseArgs()
93 135
94 if options.barcode_decoder: 136 if options.barcode_decoder:
95 path_to_decoder = options.barcode_decoder 137 path_to_decoder = options.barcode_decoder
96 else: 138 else:
97 path_to_decoder = os.path.join(SCRIPT_DIR, 'barcode_tools', 139 path_to_decoder = os.path.join(SCRIPT_DIR, 'barcode_tools',
98 'barcode_decoder.py') 140 'barcode_decoder.py')
99 141
100 # On Windows, sometimes the inherited stdin handle from the parent process 142 if DecodeBarcodesInVideo(options, path_to_decoder,
101 # fails. Work around this by passing null to stdin to the subprocesses. 143 options.ref_video, options.stats_file_ref) != 0:
102 null_filehandle = open(os.devnull, 'r') 144 return 1
103 145 if DecodeBarcodesInVideo(options, path_to_decoder,
104 # Run barcode decoder on the test video to identify frame numbers. 146 options.test_video, options.stats_file_test) != 0:
105 png_working_directory = tempfile.mkdtemp()
106 cmd = [
107 sys.executable,
108 path_to_decoder,
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 147 return 1
127 148
128 # Run frame analyzer to compare the videos and print output. 149 # Run frame analyzer to compare the videos and print output.
129 cmd = [ 150 cmd = [
130 options.frame_analyzer, 151 options.frame_analyzer,
131 '--label=%s' % options.label, 152 '--label=%s' % options.label,
132 '--reference_file=%s' % options.ref_video, 153 '--reference_file=%s' % options.ref_video,
133 '--test_file=%s' % options.test_video, 154 '--test_file=%s' % options.test_video,
134 '--stats_file=%s' % options.stats_file, 155 '--stats_file_ref=%s' % options.stats_file_ref,
156 '--stats_file_test=%s' % options.stats_file_test,
135 '--width=%d' % options.yuv_frame_width, 157 '--width=%d' % options.yuv_frame_width,
136 '--height=%d' % options.yuv_frame_height, 158 '--height=%d' % options.yuv_frame_height,
137 ] 159 ]
138 frame_analyzer = subprocess.Popen(cmd, stdin=null_filehandle, 160 frame_analyzer = subprocess.Popen(cmd, stdin=_DevNull(),
139 stdout=sys.stdout, stderr=sys.stderr) 161 stdout=sys.stdout, stderr=sys.stderr)
140 frame_analyzer.wait() 162 frame_analyzer.wait()
141 if frame_analyzer.returncode != 0: 163 if frame_analyzer.returncode != 0:
142 print 'Failed to run frame analyzer.' 164 print 'Failed to run frame analyzer.'
143 return 1 165 return 1
144 166
145 return 0 167 return 0
146 168
147 if __name__ == '__main__': 169 if __name__ == '__main__':
148 sys.exit(main()) 170 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | webrtc/tools/frame_analyzer/frame_analyzer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698