Generate APM-QA annotations for noise mixes.
The APM-QA tool produces clean-speech + noise + echo mixes with the
--additive_noise_tracks_path, --test_data_generators,
--echo_path_simulator flags. From this CL, it automatically produces
compressed Numpy annotations for the mixes. Annotations are placed in
the same folder as the mixes with name '${basename}-annotations.npz'.
TBR=alessiob@webrtc.org
NOTRY=True
Bug: webrtc:7494
Change-Id: I71941a4283594ef813de3ed65be31623bce5d7de
Reviewed-on: https://webrtc-review.googlesource.com/24960
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20844}
diff --git a/modules/audio_processing/test/py_quality_assessment/quality_assessment/annotations.py b/modules/audio_processing/test/py_quality_assessment/quality_assessment/annotations.py
index a4e9097..5c8c8ba 100644
--- a/modules/audio_processing/test/py_quality_assessment/quality_assessment/annotations.py
+++ b/modules/audio_processing/test/py_quality_assessment/quality_assessment/annotations.py
@@ -58,7 +58,7 @@
vads.append("apm")
return "VadType({})".format(", ".join(vads))
- _OUTPUT_FILENAME = 'annotations.npz'
+ _OUTPUT_FILENAME_TEMPLATE = '{}annotations.npz'
# Level estimation params.
_ONE_DB_REDUCTION = np.power(10.0, -1.0 / 20.0)
@@ -112,8 +112,8 @@
self._VAD_WEBRTC_APM_PATH
@classmethod
- def GetOutputFileName(cls):
- return cls._OUTPUT_FILENAME
+ def GetOutputFileNameTemplate(cls):
+ return cls._OUTPUT_FILENAME_TEMPLATE
def GetLevel(self):
return self._level
@@ -177,13 +177,15 @@
for extvad_name in self._external_vads:
self._external_vads[extvad_name].Run(filepath)
- def Save(self, output_path):
+ def Save(self, output_path, annotation_name=""):
ext_kwargs = {'extvad_conf-' + ext_vad:
self._external_vads[ext_vad].GetVadOutput()
for ext_vad in self._external_vads}
# pylint: disable=star-args
np.savez_compressed(
- file=os.path.join(output_path, self._OUTPUT_FILENAME),
+ file=os.path.join(
+ output_path,
+ self.GetOutputFileNameTemplate().format(annotation_name)),
level=self._level,
level_frame_size=self._level_frame_size,
level_frame_size_ms=self._LEVEL_FRAME_SIZE_MS,
diff --git a/modules/audio_processing/test/py_quality_assessment/quality_assessment/annotations_unittest.py b/modules/audio_processing/test/py_quality_assessment/quality_assessment/annotations_unittest.py
index 5fe5f5d..5a908e7 100644
--- a/modules/audio_processing/test/py_quality_assessment/quality_assessment/annotations_unittest.py
+++ b/modules/audio_processing/test/py_quality_assessment/quality_assessment/annotations_unittest.py
@@ -111,9 +111,11 @@
def testSaveLoad(self):
e = annotations.AudioAnnotationsExtractor(self._ALL_VAD_TYPES)
e.Extract(self._wav_file_path)
- e.Save(self._tmp_path)
+ e.Save(self._tmp_path, "fake-annotation")
- data = np.load(os.path.join(self._tmp_path, e.GetOutputFileName()))
+ data = np.load(os.path.join(
+ self._tmp_path,
+ e.GetOutputFileNameTemplate().format("fake-annotation")))
np.testing.assert_array_equal(e.GetLevel(), data['level'])
self.assertEqual(np.float32, data['level'].dtype)
np.testing.assert_array_equal(
@@ -146,8 +148,10 @@
vad_type_value,
{'fake': FakeExternalFactory()})
e.Extract(self._wav_file_path)
- e.Save(self._tmp_path)
- data = np.load(os.path.join(self._tmp_path, e.GetOutputFileName()))
+ e.Save(self._tmp_path, annotation_name="fake-annotation")
+ data = np.load(os.path.join(
+ self._tmp_path,
+ e.GetOutputFileNameTemplate().format("fake-annotation")))
self.assertEqual(np.float32, data['extvad_conf-fake'].dtype)
np.testing.assert_almost_equal(np.arange(100, dtype=np.float32),
data['extvad_conf-fake'])
diff --git a/modules/audio_processing/test/py_quality_assessment/quality_assessment/simulation.py b/modules/audio_processing/test/py_quality_assessment/quality_assessment/simulation.py
index f791ddd..e313bf3 100644
--- a/modules/audio_processing/test/py_quality_assessment/quality_assessment/simulation.py
+++ b/modules/audio_processing/test/py_quality_assessment/quality_assessment/simulation.py
@@ -271,9 +271,10 @@
input_signal_filepath, signal)
data_access.Metadata.SaveFileMetadata(input_signal_filepath, metadata)
- def _ExtractCaptureAnnotations(self, input_filepath, output_path):
+ def _ExtractCaptureAnnotations(self, input_filepath, output_path,
+ annotation_name=""):
self._annotator.Extract(input_filepath)
- self._annotator.Save(output_path)
+ self._annotator.Save(output_path, annotation_name)
def _Simulate(self, test_data_generators, clean_capture_input_filepath,
render_input_filepath, test_data_cache_path,
@@ -337,6 +338,13 @@
echo_test_data_cache_path, noisy_capture_input_filepath,
echo_path_filepath)
+ # Extract annotations for the APM input mix.
+ apm_input_basepath, apm_input_filename = os.path.split(
+ apm_input_filepath)
+ self._ExtractCaptureAnnotations(
+ apm_input_filepath, apm_input_basepath,
+ os.path.splitext(apm_input_filename)[0] + '-')
+
# Simulate a call using APM.
self._audioproc_wrapper.Run(
config_filepath=config_filepath,