public QueuedIdentificationService(IdentifierSettings settings, IImageIdentifier imageIdentifier) { _imageIdentifier = imageIdentifier; _queue = new BlockingElidingQueue<uint, Tuple<TrackedObject, TrackedObjectFrame>>(); _cancellationTokenSource = new CancellationTokenSource(); for (var i = 0; i < settings.NumThreads; ++i) { Task.Run((Action)Loop, _cancellationTokenSource.Token); } }
public async Task <IWikiImage> GetImageAsync(IImageIdentifier imageIdentifier) { var imageAddress = imageIdentifier.ImageUri; var imageAddressUri = new Uri(imageAddress); // Download image in the background. var imageTask = _networkingProvider.DownloadImageAsync(imageAddressUri); // Tokenize license in the meantime. var license = await _imageLicenseProvider.GetImageLicenseAsync(imageIdentifier); var image = await imageTask; return(_wikiMediaFactory.CreateWikiImage(imageIdentifier, license, image)); }
public async Task <ILicense> GetImageLicenseAsync(IImageIdentifier identifier) { // Tokenize license on a background thread. var copyrightLicenseTask = Task.Run(() => _copyrightTokenizer.GetCopyrightLicense(identifier.ImageMetadata)); // Not all images have the Artist attribute. var artistName = identifier.ImageMetadata.GetValueOrDefault("Artist"); IAttribution attribution = string.IsNullOrWhiteSpace(artistName) ? _copyrightFactory.CreateAttributionWithoutAuthor(identifier.Title, identifier.CreditUri) : _copyrightFactory.CreateAttribution(identifier.Title, artistName, identifier.CreditUri); var licenseRestrictions = _licenseRestrictionsTokenizer.GetLicenseRestrictions(identifier.ImageMetadata); var copyright = _copyrightFactory.CreateCopyright(await copyrightLicenseTask); // Retrieve tokenized license from background job. var license = _licenseFactory.CreateLicense(copyright, attribution, licenseRestrictions); return(license); }
public ImageIdentifier(IImageIdentifier other) : base(other) { CopyFrom(other); InstanceNumber = other.InstanceNumber; }
private IIdentificationService CreateIdService(IImageIdentifier identifier) { switch (Profile.IdentifierSettings.IdServiceType) { case IdServiceType.Akka: return new AkkaIdentificationService(Profile.IdentifierSettings, identifier); case IdServiceType.Classic: return new QueuedIdentificationService(Profile.IdentifierSettings, identifier); default: throw new NotSupportedException(string.Format("Id Service {0} is not supported", Profile.IdentifierSettings.IdServiceType)); } }
public WikiImage(IImageIdentifier identifier, ILicense license, Image image) : base(license) { Identifier = identifier; Image = image; }
public IWikiImage CreateWikiImage(IImageIdentifier identifier, ILicense license, Image image) { return(new WikiImage(identifier, license, image)); }