Inheritance: QueryConfiguration
Ejemplo n.º 1
0
 internal QueryCommand(IFingerprintCommandBuilder fingerprintCommandBuilder, IQueryFingerprintService queryFingerprintService)
 {
     this.fingerprintCommandBuilder = fingerprintCommandBuilder;
     this.queryFingerprintService = queryFingerprintService;
     FingerprintConfiguration = new EfficientFingerprintConfigurationForQuerying();
     QueryConfiguration = new DefaultQueryConfiguration { FingerprintConfiguration = FingerprintConfiguration };
 }
        public void HammingSimilarityIsSummedUpAccrossAllSubFingerprintsTest()
        {
            var queryHash = new HashedFingerprint(GenericSignature(), GenericHashBuckets(), 0, 0, Enumerable.Empty<string>());
            const int FirstTrackId = 20;
            const int FirstSubFingerprintId = 10;
            const int SecondSubFingerprintId = 11;
            var firstTrackReference = new ModelReference<int>(FirstTrackId);
            var firstResult = new SubFingerprintData(GenericHashBuckets(), 1, 0, new ModelReference<int>(FirstSubFingerprintId), firstTrackReference);
            var secondResult = new SubFingerprintData(GenericHashBuckets(), 2, 0.928, new ModelReference<int>(SecondSubFingerprintId), firstTrackReference);
            var defaultQueryConfiguration = new DefaultQueryConfiguration();

            modelService.Setup(service => service.SupportsBatchedSubFingerprintQuery).Returns(false);
            modelService.Setup(service => service.ReadSubFingerprints(It.IsAny<long[]>(), defaultQueryConfiguration))
                        .Returns(new List<SubFingerprintData> { firstResult, secondResult });
            modelService.Setup(service => service.ReadTrackByReference(firstTrackReference))
                        .Returns(new TrackData { ISRC = "isrc", TrackReference = firstTrackReference });

            var queryResult = queryFingerprintService.Query(new List<HashedFingerprint> { queryHash }, defaultQueryConfiguration, modelService.Object);

            Assert.IsTrue(queryResult.ContainsMatches);
            Assert.AreEqual("isrc", queryResult.BestMatch.Track.ISRC);
            Assert.AreEqual(firstTrackReference, queryResult.BestMatch.Track.TrackReference);
            Assert.AreEqual(GenericSignature().Length * 2, queryResult.BestMatch.HammingSimilaritySum);
            Assert.AreEqual(1, queryResult.ResultEntries.Count());
        }
        public void CustomQueryConfigurationInheritsDefaultValuesTest()
        {
            var queryConfiguration = new CustomQueryConfiguration();
            var defaultConfiguration = new DefaultQueryConfiguration();

            Assert.AreEqual(defaultConfiguration.ThresholdVotes, queryConfiguration.ThresholdVotes);
            Assert.AreEqual(defaultConfiguration.MaximumNumberOfTracksToReturnAsResult, queryConfiguration.MaximumNumberOfTracksToReturnAsResult);
        }
        public void MaximumNumberOfReturnedTracksIsLessThanAnalyzedCandidatesResultsTest()
        {
            var queryHash = new HashedFingerprint(GenericSignature(), GenericHashBuckets(), 1, 0, Enumerable.Empty<string>());
            const int DefaultThreshold = 5;
            const int FirstTrackId = 20;
            const int SecondTrackId = 21;
            const int ThirdTrackId = 22;
            const int FirstSubFingerprintId = 10;
            const int SecondSubFingerprintId = 11;
            var firstTrackReference = new ModelReference<int>(FirstTrackId);
            var secondTrackReference = new ModelReference<int>(SecondTrackId);
            var firstResult = new SubFingerprintData(
                GenericHashBuckets(),
                1,
                0,
                new ModelReference<int>(FirstSubFingerprintId),
                firstTrackReference);
            var secondResult = new SubFingerprintData(
                GenericHashBuckets(),
                2,
                0.928,
                new ModelReference<int>(SecondSubFingerprintId),
                secondTrackReference);
            var thirdResult = new SubFingerprintData(
                GenericHashBuckets(),
                3,
                0.928 * 2,
                new ModelReference<int>(SecondSubFingerprintId),
                new ModelReference<int>(ThirdTrackId));

            var customQueryConfiguration = new DefaultQueryConfiguration { MaxTracksToReturn = 2, ThresholdVotes = DefaultThreshold };

            modelService.Setup(service => service.SupportsBatchedSubFingerprintQuery).Returns(false);
            modelService.Setup(
                service => service.ReadSubFingerprints(It.IsAny<long[]>(), customQueryConfiguration)).Returns(
                    new List<SubFingerprintData> { firstResult, secondResult, thirdResult });
            modelService.Setup(service => service.ReadTrackByReference(firstTrackReference)).Returns(
                new TrackData { ISRC = "isrc", TrackReference = firstTrackReference });
            modelService.Setup(service => service.ReadTrackByReference(secondTrackReference)).Returns(
               new TrackData { ISRC = "isrc_1", TrackReference = secondTrackReference });

            var queryResult = queryFingerprintService.Query(new List<HashedFingerprint> { queryHash }, customQueryConfiguration, modelService.Object);

            Assert.IsTrue(queryResult.ContainsMatches);
            Assert.AreEqual("isrc", queryResult.BestMatch.Track.ISRC);
            Assert.AreEqual(firstTrackReference, queryResult.BestMatch.Track.TrackReference);
            Assert.AreEqual(50, queryResult.BestMatch.HammingSimilaritySum);
            Assert.AreEqual(2, queryResult.ResultEntries.Count());
            var results = queryResult.ResultEntries.ToList();
            Assert.AreEqual(firstTrackReference, results[0].Track.TrackReference);
            Assert.AreEqual(secondTrackReference,  results[1].Track.TrackReference);
        }
        public void QueryCommandIsBuiltWithCustomQueryAndFingerprintConfigCorrectly()
        {
            var customQueryConfig = new DefaultQueryConfiguration();
            var customFingerprintConfig = new DefaultFingerprintConfiguration();

            var command = queryCommandBuilder.BuildQueryCommand()
                                             .From("path-to-file")
                                             .WithConfigs(customFingerprintConfig, customQueryConfig)
                                             .UsingServices(modelService.Object, audioService.Object);

            Assert.AreSame(command.QueryConfiguration, customQueryConfig);
            Assert.AreSame(command.FingerprintConfiguration, customFingerprintConfig);
        }
        public void ShouldGetBestCandidatesByHammingDistance()
        {
            var modelService = new Mock<IModelService>(MockBehavior.Strict);
            var trackReference = new ModelReference<int>(3);
            modelService.Setup(s => s.ReadTrackByReference(trackReference)).Returns(
                new TrackData { ISRC = "isrc-1234-1234" });

            var queryConfiguration = new DefaultQueryConfiguration { MaxTracksToReturn = 1 };

            var query = new List<HashedFingerprint>
                {
                    new HashedFingerprint(null, null, 1, 0d, Enumerable.Empty<string>()),
                    new HashedFingerprint(null, null, 1, 4d, Enumerable.Empty<string>()),
                    new HashedFingerprint(null, null, 1, 8d, Enumerable.Empty<string>())
                };

            var first = new ResultEntryAccumulator(query[0], new SubFingerprintData(null, 1, 0d, null, null), 100);
            var second = new ResultEntryAccumulator(query[1], new SubFingerprintData(null, 1, 4d, null, null), 99);
            var third = new ResultEntryAccumulator(query[2], new SubFingerprintData(null, 1, 8d, null, null), 101);
            var hammingSimilarties = new Dictionary<IModelReference, ResultEntryAccumulator>
                {
                    { new ModelReference<int>(1), first },
                    { new ModelReference<int>(2), second },
                    { new ModelReference<int>(3), third },
                };

            var best = queryMath.GetBestCandidates(
                query,
                hammingSimilarties,
                queryConfiguration.MaxTracksToReturn,
                modelService.Object,
                queryConfiguration.FingerprintConfiguration);

            Assert.AreEqual(1, best.Count);
            Assert.AreEqual("isrc-1234-1234", best[0].Track.ISRC);
            Assert.AreEqual(9.48d, best[0].QueryLength, 0.01);
            Assert.AreEqual(0d, best[0].TrackStartsAt);
            modelService.VerifyAll();
        }
Ejemplo n.º 7
0
        public RealtimeQueryConfiguration(int thresholdVotes,
                                          IRealtimeResultEntryFilter resultEntryFilter,
                                          Action <ResultEntry> successCallback,
                                          Action <ResultEntry> didNotPassFilterCallback,
                                          Action <Hashes> queryFingerprintsCallback,
                                          Action <Exception, Hashes> errorCallback,
                                          Action restoredAfterErrorCallback,
                                          IEnumerable <Hashes> downtimeHashes,
                                          IStride stride,
                                          double permittedGap,
                                          double downtimeCapturePeriod,
                                          int millisecondsDelay,
                                          IDictionary <string, string> metaFieldFilters)
        {
            QueryConfiguration = new DefaultQueryConfiguration
            {
                ThresholdVotes           = thresholdVotes,
                FingerprintConfiguration = new DefaultFingerprintConfiguration
                {
                    SpectrogramConfig = new DefaultSpectrogramConfig
                    {
                        Stride = stride
                    }
                },
                YesMetaFieldsFilters = metaFieldFilters,
                PermittedGap         = permittedGap
            };

            ResultEntryFilter          = resultEntryFilter;
            SuccessCallback            = successCallback;
            DidNotPassFilterCallback   = didNotPassFilterCallback;
            QueryFingerprintsCallback  = queryFingerprintsCallback;
            ErrorCallback              = errorCallback;
            RestoredAfterErrorCallback = restoredAfterErrorCallback;
            DowntimeHashes             = downtimeHashes;
            DowntimeCapturePeriod      = downtimeCapturePeriod;
            MillisecondsDelay          = millisecondsDelay;
        }
        public void NoResultsReturnedFromUnderlyingStorageTest()
        {
            var queryHash = new HashedFingerprint(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11 }, new long[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, 0, 0, Enumerable.Empty<string>());
            var customQueryConfiguration = new DefaultQueryConfiguration { MaxTracksToReturn = 1, ThresholdVotes = 10, FingerprintConfiguration = new DefaultFingerprintConfiguration() };
            modelService.Setup(service => service.SupportsBatchedSubFingerprintQuery).Returns(false);
            modelService.Setup(service => service.ReadSubFingerprints(It.IsAny<long[]>(), customQueryConfiguration)).Returns(new List<SubFingerprintData>());

            var queryResult = queryFingerprintService.Query(new List<HashedFingerprint> { queryHash }, customQueryConfiguration, modelService.Object);

            Assert.IsFalse(queryResult.ContainsMatches);
            Assert.IsNull(queryResult.BestMatch);
            Assert.AreEqual(0, queryResult.ResultEntries.Count());
        }