Microsoft Cognitive Service ile Görüntü Analizi

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 Cognitive Service, Computer Vision API ile OCR

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.

ucak resimleri-19

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