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

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 more review comments 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'))
kjellander_webrtc 2016/12/22 15:35:05 Please explain briefly the difference between ref
mandermo 2017/01/02 14:59:12 I had a slightly longer description before that co
kjellander_webrtc 2017/01/02 20:01:48 I'm sorry but I can't find Patrik's comment. Eithe
mandermo 2017/01/03 17:36:45 Sorry, mixed it up with comment on frame_analyzer.
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 _DevNull():
82 """On Windows, sometimes the inherited stdin handle from the parent process
83 fails. Workaround this by passing null to stdin to the subprocesses commands.
84 This function can be used to create the null file handler.
85 """
86 return open(os.devnull, 'r')
87
88 def DecodeBarcodesInVideo(options, path_to_decoder, video, stat_file):
89 # Run barcode decoder on the test video to identify frame numbers.
90 png_working_directory = tempfile.mkdtemp()
91 cmd = [
92 sys.executable,
93 path_to_decoder,
94 '--yuv_file=%s' % video,
95 '--yuv_frame_width=%d' % options.yuv_frame_width,
96 '--yuv_frame_height=%d' % options.yuv_frame_height,
97 '--stats_file=%s' % stat_file,
98 '--png_working_dir=%s' % png_working_directory,
99 ]
100 if options.zxing_path:
101 cmd.append('--zxing_path=%s' % options.zxing_path)
102 if options.ffmpeg_path:
103 cmd.append('--ffmpeg_path=%s' % options.ffmpeg_path)
104
105
106 barcode_decoder = subprocess.Popen(cmd, stdin=_DevNull(),
107 stdout=sys.stdout, stderr=sys.stderr)
108 barcode_decoder.wait()
109
110 shutil.rmtree(png_working_directory)
111 if barcode_decoder.returncode != 0:
112 print 'Failed to run barcode decoder script.'
113 return 1
114 return 0
77 115
78 def main(): 116 def main():
79 """The main function. 117 """The main function.
80 118
81 A simple invocation is: 119 A simple invocation is:
82 ./webrtc/tools/barcode_tools/compare_videos.py 120 ./webrtc/tools/barcode_tools/compare_videos.py
83 --ref_video=<path_and_name_of_reference_video> 121 --ref_video=<path_and_name_of_reference_video>
84 --test_video=<path_and_name_of_test_video> 122 --test_video=<path_and_name_of_test_video>
85 --frame_analyzer=<path_and_name_of_the_frame_analyzer_executable> 123 --frame_analyzer=<path_and_name_of_the_frame_analyzer_executable>
86 124
87 Notice that the prerequisites for barcode_decoder.py also applies to this 125 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: 126 script. The means the following executables have to be available in the PATH:
89 * zxing 127 * zxing
90 * ffmpeg 128 * ffmpeg
91 """ 129 """
92 options = _ParseArgs() 130 options = _ParseArgs()
93 131
94 if options.barcode_decoder: 132 if options.barcode_decoder:
95 path_to_decoder = options.barcode_decoder 133 path_to_decoder = options.barcode_decoder
96 else: 134 else:
97 path_to_decoder = os.path.join(SCRIPT_DIR, 'barcode_tools', 135 path_to_decoder = os.path.join(SCRIPT_DIR, 'barcode_tools',
98 'barcode_decoder.py') 136 'barcode_decoder.py')
99 137
100 # On Windows, sometimes the inherited stdin handle from the parent process 138 if DecodeBarcodesInVideo(options, path_to_decoder,
101 # fails. Work around this by passing null to stdin to the subprocesses. 139 options.ref_video, options.stats_file_ref) != 0:
kjellander_webrtc 2016/12/22 15:35:05 indent to alighn with above ( (when using 4 spaces
mandermo 2017/01/02 14:59:12 Done.
102 null_filehandle = open(os.devnull, 'r') 140 return 1
103 141 if DecodeBarcodesInVideo(options, path_to_decoder,
104 # Run barcode decoder on the test video to identify frame numbers. 142 options.test_video, options.stats_file_test) != 0:
kjellander_webrtc 2016/12/22 15:35:04 indent to alight with above (
mandermo 2017/01/02 14:59:12 Done.
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 143 return 1
127 144
128 # Run frame analyzer to compare the videos and print output. 145 # Run frame analyzer to compare the videos and print output.
129 cmd = [ 146 cmd = [
130 options.frame_analyzer, 147 options.frame_analyzer,
131 '--label=%s' % options.label, 148 '--label=%s' % options.label,
132 '--reference_file=%s' % options.ref_video, 149 '--reference_file=%s' % options.ref_video,
133 '--test_file=%s' % options.test_video, 150 '--test_file=%s' % options.test_video,
134 '--stats_file=%s' % options.stats_file, 151 '--stats_file_ref=%s' % options.stats_file_ref,
152 '--stats_file_test=%s' % options.stats_file_test,
135 '--width=%d' % options.yuv_frame_width, 153 '--width=%d' % options.yuv_frame_width,
136 '--height=%d' % options.yuv_frame_height, 154 '--height=%d' % options.yuv_frame_height,
137 ] 155 ]
138 frame_analyzer = subprocess.Popen(cmd, stdin=null_filehandle, 156 frame_analyzer = subprocess.Popen(cmd, stdin=_DevNull(),
139 stdout=sys.stdout, stderr=sys.stderr) 157 stdout=sys.stdout, stderr=sys.stderr)
140 frame_analyzer.wait() 158 frame_analyzer.wait()
141 if frame_analyzer.returncode != 0: 159 if frame_analyzer.returncode != 0:
142 print 'Failed to run frame analyzer.' 160 print 'Failed to run frame analyzer.'
143 return 1 161 return 1
144 162
145 return 0 163 return 0
146 164
147 if __name__ == '__main__': 165 if __name__ == '__main__':
148 sys.exit(main()) 166 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