private async Task <MediaAI> AnalyseMediaAsync( Media media, ICloudAIMediaAnalyser analyser, CancellationToken cancellationToken) { Log.Information("Analyse media {Id} using {Analyzer}", media.Id, analyser.Source); MediaBlobData?request = _mediaService.GetBlobRequest(media, MediaFileType.Original); using Stream imageStream = _mediaStore.Blob.GetStreamAsync(request); using Stream stream = await RemoveExifDataAsync(imageStream, cancellationToken); MediaAI aiData = new(); try { aiData = await analyser.AnalyseImageAsync( stream, cancellationToken); } catch (Exception ex) { aiData.SourceInfo = new List <MediaAISourceInfo> { new MediaAISourceInfo { AnalysisDate = DateTime.UtcNow, Source = analyser.Source, Success = false, Data = new() {
public async Task ProcessNewBySourceAsync( AISource source, CancellationToken cancellationToken) { IEnumerable <MediaAI> result = await _mediaStore.MediaAI.GetWithoutSourceInfoAsync( source, limit : 1, excludePersons : true, cancellationToken); foreach (MediaAI mediaAI in result) { Media media = await _mediaService.GetByIdAsync(mediaAI.MediaId, cancellationToken); ICloudAIMediaAnalyser analyser = _analysers.Single(x => x.Source == source); MediaAI aiData = await AnalyseMediaAsync(media, analyser, cancellationToken); await SaveMediaAIDatas(new[] { aiData }, cancellationToken); } }