public void CreateFingerprintsTest()
        {
            float[] samples       = TestUtilities.GenerateRandomFloatArray(5512 * 10);
            var     configuration = new DefaultFingerprintConfiguration();

            float[][] logarithmizedSpectrum = new[]
            {
                TestUtilities.GenerateRandomFloatArray(2048),
                TestUtilities.GenerateRandomFloatArray(2048),
                TestUtilities.GenerateRandomFloatArray(2048)
            };
            List <float[][]> dividedLogSpectrum = new List <float[][]>
            {
                new[] { TestUtilities.GenerateRandomFloatArray(2048) },
                new[] { TestUtilities.GenerateRandomFloatArray(2048) },
                new[] { TestUtilities.GenerateRandomFloatArray(2048) }
            };

            spectrumService.Setup(service => service.CreateLogSpectrogram(samples, configuration)).Returns(logarithmizedSpectrum);
            spectrumService.Setup(service => service.CutLogarithmizedSpectrum(logarithmizedSpectrum, configuration.Stride, configuration.FingerprintLength, configuration.Overlap))
            .Returns(dividedLogSpectrum);
            waveletDecomposition.Setup(service => service.DecomposeImagesInPlace(dividedLogSpectrum));
            fingerprintDescriptor.Setup(descriptor => descriptor.ExtractTopWavelets(It.IsAny <float[][]>(), configuration.TopWavelets)).Returns(GenericFingerprint);

            List <bool[]> rawFingerprints = fingerprintService.CreateFingerprints(samples, configuration);

            Assert.AreEqual(3, rawFingerprints.Count);
            foreach (bool[] fingerprint in rawFingerprints)
            {
                Assert.AreEqual(GenericFingerprint, fingerprint);
            }
        }
Exemplo n.º 2
0
        public void CreateFingerprints()
        {
            const int TenSeconds         = 5512 * 10;
            var       samples            = TestUtilities.GenerateRandomAudioSamples(TenSeconds);
            var       fingerprintConfig  = new DefaultFingerprintConfiguration();
            var       dividedLogSpectrum = GetDividedLogSpectrum();

            spectrumService.Setup(service => service.CreateLogSpectrogram(samples, It.IsAny <DefaultSpectrogramConfig>())).Returns(dividedLogSpectrum);
            waveletDecomposition.Setup(service => service.DecomposeImageInPlace(It.IsAny <float[]>(), 128, 32, fingerprintConfig.HaarWaveletNorm));
            fingerprintDescriptor.Setup(descriptor => descriptor.ExtractTopWavelets(It.IsAny <float[]>(), fingerprintConfig.TopWavelets, It.IsAny <ushort[]>())).Returns(new TinyFingerprintSchema(8192).SetTrueAt(0, 1));
            localitySensitiveHashingAlgorithm.Setup(service => service.Hash(It.IsAny <Fingerprint>(), fingerprintConfig.HashingConfig, It.IsAny <IEnumerable <string> >()))
            .Returns(new HashedFingerprint(new int[0], 1, 0f, Enumerable.Empty <string>()));

            var fingerprints = fingerprintService.CreateFingerprints(samples, fingerprintConfig)
                               .OrderBy(f => f.SequenceNumber)
                               .ToList();

            Assert.AreEqual(dividedLogSpectrum.Count, fingerprints.Count);
        }
        public void CreateFingerprints()
        {
            const int TenSeconds         = 5512 * 10;
            var       samples            = TestUtilities.GenerateRandomAudioSamples(TenSeconds);
            var       fingerprintConfig  = new DefaultFingerprintConfiguration();
            var       dividedLogSpectrum = GetDividedLogSpectrum();

            spectrumService.Setup(service => service.CreateLogSpectrogram(samples, It.IsAny <DefaultSpectrogramConfig>())).Returns(dividedLogSpectrum);
            waveletDecomposition.Setup(service => service.DecomposeImageInPlace(It.IsAny <float[][]>()));
            fingerprintDescriptor.Setup(descriptor => descriptor.ExtractTopWavelets(It.IsAny <float[][]>(), fingerprintConfig.TopWavelets))
            .Returns(GenericFingerprint);

            var fingerprints = fingerprintService.CreateFingerprints(samples, fingerprintConfig);

            Assert.AreEqual(dividedLogSpectrum.Count, fingerprints.Count);
            for (int index = 0; index < fingerprints.Count; index++)
            {
                Assert.AreEqual(GenericFingerprint, fingerprints[index].Signature);
                Assert.AreEqual(dividedLogSpectrum[index].Timestamp, fingerprints[index].Timestamp, Epsilon);
            }
        }
        public void ShouldRunCorrectlyForSpecificUseCase()
        {
            int sequenceNumber = 334;

            float[] samples = GetAudioSamples().Samples;
            int     start   = sequenceNumber * 1536;

            float[] troubledPart = new float[8192 + 2048];
            Array.Copy(samples, start, troubledPart, 0, 8192 + 2048);
            var audioSamples = new AudioSamples(troubledPart, "test", 5512);

            var fingerprintService = new FingerprintService(
                new SpectrumService(new LomontFFT(), new LogUtility()),
                new LocalitySensitiveHashingAlgorithm(
                    new MinHashService(new DefaultPermutations()),
                    new HashConverter()),
                new StandardHaarWaveletDecomposition(),
                new FingerprintDescriptor());

            var fastFingerprintService = new FingerprintService(
                new SpectrumService(new LomontFFT(), new LogUtility()),
                new LocalitySensitiveHashingAlgorithm(
                    new MinHashService(new DefaultPermutations()),
                    new HashConverter()),
                new StandardHaarWaveletDecomposition(),
                new FastFingerprintDescriptor());

            int runs = 10;

            for (int i = 0; i < runs; ++i)
            {
                var x = fingerprintService.CreateFingerprints(audioSamples, new DefaultFingerprintConfiguration());
                var y = fastFingerprintService.CreateFingerprints(audioSamples, new DefaultFingerprintConfiguration());

                for (int j = 0; j < x.Count; ++j)
                {
                    CollectionAssert.AreEqual(x[j].HashBins, y[j].HashBins);
                }
            }
        }