changeset 347:5382bcab7acb

Add tests for plotting
author Amine Sehili <amine.sehili@gmail.com>
date Mon, 11 Nov 2019 16:53:32 +0100
parents 979343fe59e0
children 0ae857447ca0
files auditok/plotting.py tests/images/plot_mono_region.png tests/images/plot_stereo_region.png tests/images/split_and_plot_mono_region.png tests/images/split_and_plot_uc_0_stereo_region.png tests/images/split_and_plot_uc_1_stereo_region.png tests/images/split_and_plot_uc_any_stereo_region.png tests/images/split_and_plot_uc_mix_stereo_region.png tests/test_plotting.py
diffstat 9 files changed, 69 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/auditok/plotting.py	Sun Nov 10 21:16:16 2019 +0100
+++ b/auditok/plotting.py	Mon Nov 11 16:53:32 2019 +0100
@@ -59,7 +59,8 @@
     if len(y.shape) == 1:
         y = y.reshape(1, -1)
     nb_subplots, nb_samples = y.shape
-    time_axis = _make_time_axis(nb_samples, audio_region.sampling_rate)
+    sampling_rate = audio_region.sampling_rate
+    time_axis = _make_time_axis(nb_samples, sampling_rate)
     if energy_threshold is not None:
         eth_log10 = energy_threshold * np.log(10) / 10
         amplitude_threshold = np.sqrt(np.exp(eth_log10))
@@ -68,7 +69,12 @@
     if detections is None:
         detections = []
     else:
-        detections = list(detections)
+        # End of detection corresponds to the end of the last sample but
+        # to stay compatible with the time axis of signal plotting we want end
+        # of detection to correspond to the *start* of the that last sample.
+        detections = [
+            (start, end - (1 / sampling_rate)) for (start, end) in detections
+        ]
     if theme == "auditok":
         theme = AUDITOK_PLOT_THEME
 
@@ -140,6 +146,5 @@
 
     if save_as is not None:
         plt.savefig(save_as, dpi=dpi)
-
     if show:
         plt.show()
Binary file tests/images/plot_mono_region.png has changed
Binary file tests/images/plot_stereo_region.png has changed
Binary file tests/images/split_and_plot_mono_region.png has changed
Binary file tests/images/split_and_plot_uc_0_stereo_region.png has changed
Binary file tests/images/split_and_plot_uc_1_stereo_region.png has changed
Binary file tests/images/split_and_plot_uc_any_stereo_region.png has changed
Binary file tests/images/split_and_plot_uc_mix_stereo_region.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_plotting.py	Mon Nov 11 16:53:32 2019 +0100
@@ -0,0 +1,61 @@
+import os
+import unittest
+from unittest import TestCase
+from tempfile import TemporaryDirectory
+from genty import genty, genty_dataset
+import matplotlib
+import matplotlib.pyplot as plt
+from auditok.core import AudioRegion
+
+matplotlib.use("agg")
+matplotlib.rcParams["figure.figsize"] = (10, 4)
+
+
+@genty
+class TestPlotting(TestCase):
+    @genty_dataset(mono=(1,), stereo=(2,))
+    def test_region_plot(self, channels):
+        type_ = "mono" if channels == 1 else "stereo"
+        audio_filename = "tests/data/test_split_10HZ_{}.raw".format(type_)
+        image_filename = "tests/images/plot_{}_region.png".format(type_)
+        expected_image = plt.imread(image_filename)
+        with TemporaryDirectory() as tmpdir:
+            output_image_filename = os.path.join(tmpdir, "image.png")
+            region = AudioRegion.load(audio_filename, sr=10, sw=2, ch=channels)
+            region.plot(show=False, save_as=output_image_filename)
+            output_image = plt.imread(output_image_filename)
+        self.assertTrue((output_image == expected_image).all())
+
+    @genty_dataset(
+        mono=(1,),
+        stereo_any=(2, "any"),
+        stereo_uc_0=(2, 0),
+        stereo_uc_1=(2, 1),
+        stereo_uc_mix=(2, "mix"),
+    )
+    def test_region_split_and_plot(self, channels, use_channel=None):
+        type_ = "mono" if channels == 1 else "stereo"
+        audio_filename = "tests/data/test_split_10HZ_{}.raw".format(type_)
+        if type_ == "mono":
+            image_filename = "tests/images/split_and_plot_mono_region.png"
+        else:
+            fmt = "tests/images/split_and_plot_uc_{}_stereo_region.png"
+            image_filename = fmt.format(use_channel)
+
+        expected_image = plt.imread(image_filename)
+        with TemporaryDirectory() as tmpdir:
+            output_image_filename = os.path.join(tmpdir, "image.png")
+            region = AudioRegion.load(audio_filename, sr=10, sw=2, ch=channels)
+            region.split_and_plot(
+                aw=0.1,
+                uc=use_channel,
+                max_silence=0,
+                show=False,
+                save_as=output_image_filename,
+            )
+            output_image = plt.imread(output_image_filename)
+        self.assertTrue((output_image == expected_image).all())
+
+
+if __name__ == "__main__":
+    unittest.main()