Azure AI Vision ile .NET'te Görüntü Analizi ve OCR
Azure AI Vision (eski adıyla Cognitive Services Computer Vision), görüntülerden anlam çıkarmanıza olanak tanıyan güçlü bir bulut hizmetidir. .NET uygulamalarınızda nesne tespiti, sahne tanıma, yüz analizi ve optik karakter tanıma (OCR) gibi işlemleri kolayca entegre edebilirsiniz.
Paket Kurulumu
dotnet add package Azure.AI.Vision.ImageAnalysis
dotnet add package Azure.Identity
Temel Görüntü Analizi
Görüntü analizi servisi, bir görüntüdeki nesneleri, renkleri, etiketleri ve açıklamaları otomatik olarak üretir:
using Azure;
using Azure.AI.Vision.ImageAnalysis;
public class VisionAnalysisService
{
private readonly ImageAnalysisClient _client;
public VisionAnalysisService(IConfiguration config)
{
var endpoint = new Uri(config["AzureVision:Endpoint"]!);
var key = new AzureKeyCredential(config["AzureVision:Key"]!);
_client = new ImageAnalysisClient(endpoint, key);
}
public async Task<ImageAnalysisResult> AnalyzeImageAsync(string imageUrl)
{
var result = await _client.AnalyzeAsync(
new Uri(imageUrl),
VisualFeatures.Caption |
VisualFeatures.Objects |
VisualFeatures.Tags |
VisualFeatures.DenseCaptions,
new ImageAnalysisOptions
{
GenderNeutralCaption = true,
Language = "tr"
});
return result.Value;
}
}
Sonuçları İşlemek
var result = await visionService.AnalyzeImageAsync(imageUrl);
Console.WriteLine($"Başlık: {result.Caption?.Text} (Güven: {result.Caption?.Confidence:P1})");
Console.WriteLine("Tespit edilen nesneler:");
foreach (var obj in result.Objects ?? Enumerable.Empty<DetectedObject>())
{
Console.WriteLine($" - {obj.Tags.First().Name} at {obj.BoundingBox}");
}
Console.WriteLine("Etiketler:");
foreach (var tag in result.Tags?.Values ?? Enumerable.Empty<DetectedTag>())
{
if (tag.Confidence > 0.7)
Console.WriteLine($" - {tag.Name} ({tag.Confidence:P1})");
}
OCR ile Metin Çıkarma
Document Intelligence yerine hızlı OCR için Vision servisi yeterli olabilir:
public async Task<string> ExtractTextFromImageAsync(Stream imageStream)
{
var result = await _client.AnalyzeAsync(
BinaryData.FromStream(imageStream),
VisualFeatures.Read);
var sb = new StringBuilder();
foreach (var block in result.Value.Read?.Blocks ?? [])
{
foreach (var line in block.Lines)
{
sb.AppendLine(line.Text);
}
}
return sb.ToString().Trim();
}
Görüntü Akışından Analiz
URL yerine doğrudan byte array veya stream göndermek de mümkündür:
// Yüklenen bir dosyayı analiz etmek için
public async Task<IActionResult> AnalyzeUpload(IFormFile file)
{
await using var stream = file.OpenReadStream();
var data = BinaryData.FromStream(stream);
var result = await _client.AnalyzeAsync(
data,
VisualFeatures.Caption | VisualFeatures.Tags | VisualFeatures.Read,
new ImageAnalysisOptions { Language = "tr" });
return Ok(new
{
Caption = result.Value.Caption?.Text,
Tags = result.Value.Tags?.Values.Select(t => t.Name).ToList(),
Text = string.Join("\n", result.Value.Read?.Blocks
.SelectMany(b => b.Lines)
.Select(l => l.Text) ?? [])
});
}
Akıllı Thumbnail Oluşturma
Vision servisi, görüntünün en önemli bölgesini akıllıca kırpabilir:
public async Task<byte[]> GetSmartThumbnailAsync(string imageUrl, int width, int height)
{
// Not: Bu özellik eski Cognitive Services endpoint ile çalışır
// Yeni SDK'da SmartCropping VisualFeature olarak gelir
var result = await _client.AnalyzeAsync(
new Uri(imageUrl),
VisualFeatures.SmartCrops,
new ImageAnalysisOptions
{
SmartCropsAspectRatios = [(double)width / height]
});
var crop = result.Value.SmartCrops?.Values.FirstOrDefault();
// BoundingBox kullanarak crop bölgesini belirleyin
return await DownloadAndCropAsync(imageUrl, crop?.BoundingBox);
}
Ürün Görsellerini Otomatik Etiketleme
E-ticaret uygulamalarında ürün görselleri için otomatik etiket üretimi:
public class ProductImageTagger
{
private readonly ImageAnalysisClient _vision;
private readonly IProductRepository _repo;
public async Task TagProductImagesAsync(CancellationToken ct = default)
{
var untaggedProducts = await _repo.GetUntaggedAsync(ct);
await Parallel.ForEachAsync(untaggedProducts,
new ParallelOptions { MaxDegreeOfParallelism = 5, CancellationToken = ct },
async (product, token) =>
{
try
{
var result = await _vision.AnalyzeAsync(
new Uri(product.ImageUrl),
VisualFeatures.Tags | VisualFeatures.Caption,
cancellationToken: token);
var tags = result.Value.Tags?.Values
.Where(t => t.Confidence > 0.8)
.Select(t => t.Name)
.ToList() ?? [];
await _repo.UpdateTagsAsync(product.Id, tags, result.Value.Caption?.Text, token);
}
catch (RequestFailedException ex) when (ex.Status == 429)
{
// Rate limit: bir süre bekle
await Task.Delay(TimeSpan.FromSeconds(10), token);
}
});
}
}
appsettings.json Yapılandırması
{
"AzureVision": {
"Endpoint": "https://<your-resource>.cognitiveservices.azure.com/",
"Key": "<your-key>"
}
}
DI Kaydı
builder.Services.AddSingleton(sp =>
{
var config = sp.GetRequiredService<IConfiguration>();
return new ImageAnalysisClient(
new Uri(config["AzureVision:Endpoint"]!),
new AzureKeyCredential(config["AzureVision:Key"]!));
});
builder.Services.AddScoped<VisionAnalysisService>();
Sonuç
Azure AI Vision, .NET uygulamalarınıza birkaç satır kodla görsel zeka ekler. OCR, nesne tespiti ve akıllı etiketleme gibi özellikler; içerik yönetimi, erişilebilirlik iyileştirme ve ürün katalog otomasyonu gibi pek çok senaryoda değer yaratır. Production'da Managed Identity ile key yerine kimlik tabanlı erişim kullanmayı ve görüntü başına yaklaşık 1-2 ms gecikmeyi göz önünde bulundurmayı unutmayın.