Microsoft Computer Vision Api ile Görüntü Analizi
Gereksinimler: Bir önceki yazının okunması Sebep:Api’nin tanınması, api anahtarı alınması, gerekli kütüphanenin kurulması
Microsoft bu api ile görüntü analizi de yapabilmektedir. Kaynak görüntü üzerindeki insan yüzleri, yaş tahminleri, ana ve ara renkler, görüntü üzerindeki nesneler, görüntünün yetişkin içerik olup olmama durumu gibi bir çok veriyi sağlamaktadır. Tüm bu verileri kullanarak kullandığınız kaynak görüntünün yorumlamasını yaparak size bir metin verebilmektedir. Nesne ve yüz tanıma konusunda oldukca başarılı olsada görüntüyü analiz etmekte bazı sıkıntılar mevcuttur, daha sadece ve basit dnilebilecek görüntüleri yorumlada iyi olsada renk dengesi bozuk veya karışık diye tabir edebileceğimiz çok fazla nesnenin bulunduğu, nesnelerin tam olarak seçilemediği veya bir birleri arasında anlam ilişkisi olmayan nesnelerin bir arada bulunması gibi durumlarda ortaya çıkardığı yorumunda görüntü ile alakası olmayabiliyor.
Online olarak test etmek için Microsoft hesabınızla oturum açarak burayı kullanabilirsiniz, yine Microsoft tarafından hazırlanan teknik dokumanlara aynı bağlantı üzerinden ulaşabilirsiniz. Bir örnek sınıf yazalım ve bu sınıf parametre olarak verdiğimiz görüntü url, yerel dosya adresi veya bitmap nesnesini yorumlayarak sonuç olarak döndürsün. Gerekli metot açıklamaları yer almaktadır.
using Microsoft.ProjectOxford.Vision; using Microsoft.ProjectOxford.Vision.Contract; using System.Drawing; using System.IO; using System.Threading.Tasks; namespace mesutpiskin.mcvapi.analyzeimage { public class AnalyzeImage { //Microsoft Cognitive Services user api key https://www.microsoft.com/cognitive-services private const string API_KEY = "ABCÇDEFGĞ...."; /// <summary> /// Upload and analyze image with local image file /// </summary> /// <param name="imageFilePath">Local image file path</param> /// <returns>AnalysisResult object</returns> public async Task<AnalysisResult> FromFile(string imageFilePath) { // Create Project Oxford Computer Vision API Service client VisionServiceClient VisionServiceClient = new VisionServiceClient(API_KEY); using (Stream imageFileStream = File.OpenRead(imageFilePath)) { // Analyze the image for all visual features VisualFeature[] visualFeatures = new VisualFeature[] { VisualFeature.Adult, VisualFeature.Categories, VisualFeature.Color, VisualFeature.Description, VisualFeature.Faces, VisualFeature.ImageType, VisualFeature.Tags }; AnalysisResult analysisResult = await VisionServiceClient.AnalyzeImageAsync(imageFileStream, visualFeatures); return analysisResult; } } /// <summary> /// Analyze image with bitmap object /// </summary> /// <param name="image">Bitmap image</param> /// <returns>AnalysisResult object</returns> public async Task<AnalysisResult> FromMemory(Bitmap image) { // Create Project Oxford Computer Vision API Service client VisionServiceClient VisionServiceClient = new VisionServiceClient(API_KEY); //Convert image to byte array ImageConverter converter = new ImageConverter(); using (Stream imageStream = new MemoryStream((byte[])converter.ConvertTo(image, typeof(byte[])))) { // Analyze the image for all visual features VisualFeature[] visualFeatures = new VisualFeature[] { VisualFeature.Adult, VisualFeature.Categories, VisualFeature.Color, VisualFeature.Description, VisualFeature.Faces, VisualFeature.ImageType, VisualFeature.Tags }; AnalysisResult analysisResult = await VisionServiceClient.AnalyzeImageAsync(imageStream, visualFeatures); return analysisResult; } } /// <summary> /// Analyze image with web image url /// </summary> /// <param name="imageUrl">wep image url</param> /// <returns>AnalysisResult object</returns> public async Task<AnalysisResult> FromURL(string imageUrl) { // Create Project Oxford Computer Vision API Service client VisionServiceClient VisionServiceClient = new VisionServiceClient(API_KEY); // Analyze the url for all visual features VisualFeature[] visualFeatures = new VisualFeature[] { VisualFeature.Adult, VisualFeature.Categories, VisualFeature.Color, VisualFeature.Description, VisualFeature.Faces, VisualFeature.ImageType, VisualFeature.Tags }; AnalysisResult analysisResult = await VisionServiceClient.AnalyzeImageAsync(imageUrl, visualFeatures); return analysisResult; } } }
Metotlar tarafından sonuç olarak döndürdüğü AnalysisResult nesnesi içerisinde, yüz, renk, açıklama, nesneler vb. tüm görüntü özellikleri yer almaktadır.
AnalysisResult analysisResult = await analyzeImage.FromMemory(bitmapImage); //Frame analizi if (analysisResult.Description.Captions.Length > 0) { //Görüntü açıklamalarını al foreach (Caption captionItem in analysisResult.Description.Captions) { Console.WriteLine(captionItem.Text ); } //Görüntü için oluşturulan etiketleri al foreach (Tag tagItem in analysisResult.Tags) { Console.WriteLine(tagItem.Name); } }
Bu sayede görüntü için yapılan yoruma ve görüntü için oluşturulan etiketlere (nesne, eylem vb.) ulaşabilmekteyiz.
Yukarıda kullandığım görsel için elde edilen sonuçlar;
- Görüntü Analizi (Sadece İngilizce dil desteği bulunmaktadır): a passenger jet that is flying in the air
- Etiketler ise
outdoor
plane
flying
airplane
air
jet
landing
aircraft
transport
land
cloudy