Görüntülerden bilgi toplama yeteneği derin bir iş potansiyeline sahiptir. Ve aynı zamanda eğlenceli de olabilir. Bu yazıda, nasıl kullandığımızı ana hatlarıyla anlatacağım.
Basitçe söylemek gerekirse, görüntü nesnesi tespiti, belirli bir görüntüdeki varlıklar hakkındaki bilgilerin tespit edilmesi ve çıkarılması işlemidir. Bu, nesnelerin, etkinliklerin, yerlerin, hayvanların, ürünlerin vb. tespit edilmesini içerir.
Görüntü nesnesi algılamanın çeşitli endüstrilerde çok çeşitli kullanım durumları vardır. Bankalar, sigorta, sosyal medya, flört uygulamaları, haber ajansları ve FinTech gibi büyük sektörler, nesne algılamayı şu veya bu şekilde kullanıyor.
Yakın zamanda bir sosyal medya girişimi için görüntü nesnesi algılama özelliği oluşturma görevi aldık. Kullanım durumu basitti; kullanıcılar en sevdikleri fotoğraflardan bazılarını seçebilmeli ve bunları girişimin sosyal medya sayfalarından birinde öne çıkarılmak üzere gönderebilmelidir.
Sosyal medya pazarlama ekibinin, okyanus fotoğrafları, popüler yerler, hayvanlar, müzik konserleri vb. gibi belirli temalar için gönderilen görseller arasında arama yapmanın bir yoluna ihtiyacı vardı.
Görüntüleri analiz etmek ve bunları görüntüdeki manzaraya ve nesnelere göre sınıflandırmak basit bir iş değildir. İnsan görüşü olağanüstüdür ve beynin nesneleri algılama yeteneğini kopyalayabilen bir uygulama oluşturmak son derece karmaşıktır. Tam da bunu yapmaya adanmış bir bilgisayarlı görüntü endüstrisi var.
Nesne algılamanın sıfırdan gerçekleştirilmesi genellikle aşağıdakileri içeren çok adımlı bir işlemdir:
Bu özelliğin amacı, projedeki diğer tüm özellikler gibi, onu hızlı bir şekilde oluşturmak ve üretim ortamında etkinliğini mümkün olan en kısa sürede test etmekti. Ayrıca, mevcut bulut hizmetlerinden yararlanabilecekken, geliştirme kaynaklarını sıfırdan bir çözüm oluşturmaya adamak istemedik.
Cue Sunucusuz — startup'ın tüm arka ucu tamamen Sunucusuzdur ve olay odaklıdır. Bu mimariyle, yalnızca sosyal medya uygulamasını diğerlerinden farklı kılan özelliklere odaklanması gereken geliştirici ekiplerine sahip olabiliyoruz. Sunucusuz aynı zamanda yüksek düzeyde ölçeklenebilir hizmetler oluşturmamıza ve aynı zamanda yalnızca tam olarak kullandığımız kadar ödeme yapmamıza olanak tanır; bu, ölçeklendirme girişimi için önemli bir husustur.
Bu özelliği elde etmek için tamamen Sunucusuz bir görüntü ve video analiz hizmeti olan Amazon Rekognition'ı kullandık. Rekognition'ı kullanarak bu karmaşık ve kritik iş akışını birkaç saat içinde geliştirmeyi başardık. Hadi derinlemesine inceleyelim.
Amazon Rekognition, görüntü ve video analizi gerçekleştirmek için derin öğrenmeyi kullanan bir AWS Sunucusuz teklifidir. Tamamen Sunucusuz olmak, Rekognition ile temeldeki altyapının karmaşıklığı konusunda endişelenmemize gerek olmadığı anlamına gelir; yalnızca kullandığımız kadar ödeme yaparız ve bu bize görüntü ve video analiz görevleri için önceden yazılmış bir yazılım sağlar. Rekognition, resim etiketi algılama, yüz algılama, ünlü algılama, içerik denetimi ve metin algılama dahil olmak üzere bir dizi özellik sunar.
En iyi kısım? Tanıma, derin öğrenme modellerini oluşturma, eğitme ve analiz etmenin ağır yükünü ortadan kaldırır. Minimum kurulum gereksinimiyle görüntü ve video analizi hızlı ve basittir. Hizmetimizin ölçeklenmesi için kendi veri kümelerimizi oluşturma ve eğitme ve sunucu kapasitesi sağlama konusunda endişelenmemize gerek yoktu. Endişelenmemiz gereken tek şey entegrasyondu.
Mimari basittir. Mobil uygulamamız, kullanıcıların telefonlarındaki görüntüleri bir S3 klasörüne yükler. Daha sonra S3'e yükleme, Rekognition API'yi çağıran ve sonuçları sorgulama için DynamoDB'de saklayan bir Lambda işlevini tetikler.
AWS kullanarak sunucusuz görüntü nesnesi algılama mimarisi diyagramı
Kod yazmak eğlencelidir, değil mi? Daha az kod yazmak daha da eğlenceli.
Rekognition, görüntü verilerini gönderdiğiniz, analizi gerçekleştiren ve sonuçları döndüren bir dizi API'yi ortaya çıkarır. Kullanım durumumuz için şunu kullandık:
Sunucusuz çerçeve Altyapımızın Kod olarak basitleştirilmiş bir sürümü şu şekilde görünür:
//serverless.yamlfunctions: imageLabelDetection: handler: image-label-detection.handler events: - s3: bucket: my-image-bucket event: s3:ObjectCreated:* existing: true iamRoleStatements: - Effect: Allow Action: rekognition:DetectLabels Resource: "*" - Effect: Allow Action: s3:GetObject Resource: arn:aws:s3:::my-image-bucket
Lambda kodumuz yalnızca Rekognition API'yi çağırır ve sonuçları DynamoDB'de saklar; ancak kullanım durumunuz için anlamlı olanı kullanabilirsiniz. S3 kova adını ve görüntünün nesne adını S3 olayından alıyoruz ve bunları algılama etiketi işlevine aktarıyoruz.
Ayrıca güven düzeyi eşiğini ve döndürülmesini istediğimiz maksimum etiket sayısını belirtmek için iki isteğe bağlı parametreyi (MaxLabels ve MinConfidence) aktarıyoruz. Aşağıdaki örnekte yanıtta yalnızca 20'ye kadar etiket alacağız ve tüm etiketlerin güven düzeyi %80'in üzerinde olacaktır.
//image-label-detecion.jsconst AWS = require("aws-sdk");const rekognition = new AWS.Rekognition();exports.handler = async (event) => { const imageDetails = event.Records[0].s3; const bucketName = imageDetails.bucket.name; const objectKey = imageDetails.object.key; const rekognitionResp = await rekognition .detectLabels({ Image: { S3Object: { Bucket: bucketName, Name: objectKey, }, }, MaxLabels: 20, MinConfidence: 80, }) .promise(); // Send to data store, eg DynamoDB // ... };
Köpek resmini kim sevmez? Aşağıda S3 klasörümüze yüklediğimiz bir görselin yanıtı bulunmaktadır. Gördüğünüz gibi Rekognition, bunun açık havada, çakıllı bir yolda yürüyen bir köpeğin resmi olduğunu doğru bir şekilde belirler (ve bize köpeğin resimde nerede olduğunu söyler!).
Tanıma yanıtı (solda), yüklenen resim (sağda).
Peki Rekognition'ı üretimde birkaç ay kullandıktan sonra düşüncelerim neler? İşte önemli çıkarımların bir listesi:
TLDR: Rekognition, doğru, hızlı ve ölçeklenebilir bir görüntü nesnesi algılama özelliğini hızla oluşturmamızı sağladı.