1. Başlamadan önce
ML Kit, Google'ın cihaz üzerinde makine öğrenimi uzmanlığını Android ve iOS uygulamalarına taşıyan bir mobil SDK'dır. Uygulamalarınızdaki yaygın sorunları çözmek veya yepyeni kullanıcı deneyimleri oluşturmak için güçlü ancak kullanımı kolay Vision ve Natural Language API'lerini kullanabilirsiniz. Tümü Google'ın sınıfının en iyisi makine öğrenimi modelleriyle desteklenir ve size ücretsiz olarak sunulur.
ML Kit'in tüm API'leri cihaz üzerinde çalışır. Bu sayede, örneğin canlı kamera görüntü akışını işlemek istediğiniz gerçek zamanlı kullanım alanlarında kullanılabilir. Bu, işlevin çevrimdışı olarak da kullanılabileceği anlamına gelir.
Bu codelab'de, belirli bir resim için Nesne Algılama ve İzleme (ODT) özelliğini mevcut Android uygulamanıza ekleme konusunda basit adımlar açıklanmaktadır. Bu codelab'de, ML Kit ODT kullanımını vurgulamak için bazı kısayollar kullanıldığını lütfen unutmayın.
Ne oluşturacaksınız?
Bu codelab'de ML Kit ile bir Android uygulaması oluşturacaksınız. Uygulamanız, belirli bir görüntüdeki nesneleri algılamak için ML Kit Nesne Algılama ve İzleme API'sini kullanır.Sonunda, sağdaki görüntüye benzer bir şey görmeniz gerekir. |
|
Neler öğreneceksiniz?
- ML Kit SDK'sını Android uygulamanıza entegre etme
- ML Kit Nesne Algılama ve İzleme API'si
Gerekenler
- Android Studio'nun yeni bir sürümü (4.1.2 veya daha yeni)
- Android Studio Emulator veya fiziksel bir Android cihaz
- Örnek kod
- Kotlin ile Android geliştirme hakkında temel düzeyde bilgi sahibi olma
Bu codelab, ML Kit'e odaklanmaktadır. Alakalı olmayan kavramlar ve kod blokları işaretlenmiştir ve yalnızca kopyalayıp yapıştırmanız için paylaşılmıştır.
2. Hazırlanın
Kodu İndirme
Bu codelab'in tüm kodunu indirmek için aşağıdaki bağlantıyı tıklayın:
İndirilen ZIP dosyasını açın. Bu işlem, ihtiyacınız olan tüm kaynakları içeren bir kök klasörü (mlkit-android-main) açar. Bu codelab için yalnızca object-detection alt dizinindeki kaynaklara ihtiyacınız olacak.
mlkit-android deposundaki object-detection alt dizini iki dizin içerir:
starter: Bu codelab'de temel alacağınız başlangıç kodu.
final: Tamamlanmış örnek uygulamanın kodu.
3. Projeye ML Kit Nesne Algılama ve İzleme API'sini ekleme
Uygulamayı Android Studio'ya aktarma
Başlangıç uygulamasını Android Studio'ya aktararak başlayalım.
Android Studio'yu açın, Import Project (Gradle, Eclipse ADT, etc.)'yi (Projeyi İçe Aktar (Gradle, Eclipse ADT vb.)) seçin ve daha önce indirdiğiniz kaynak kodundan starter klasörünü belirleyin.

ML Kit Nesne Algılama ve İzleme'nin bağımlılıklarını ekleme
ML Kit bağımlılıkları, ML Kit ODT SDK'sını uygulamanıza entegre etmenize olanak tanır. Projenizin app/build.gradle dosyasının sonuna aşağıdaki satırları ekleyin:
build.gradle
dependencies {
// ...
implementation 'com.google.mlkit:object-detection:16.2.4'
}
Projenizi Gradle dosyalarıyla senkronize etme
Tüm bağımlılıkların uygulamanızda kullanılabilir olduğundan emin olmak için bu noktada projenizi Gradle dosyalarıyla senkronize etmeniz gerekir.
Android Studio araç çubuğundan Projeyi Gradle Dosyalarıyla Senkronize Et'i (
) seçin.
(Bu düğme devre dışıysa yalnızca starter/app/build.gradle öğesini içe aktardığınızdan emin olun. Deponun tamamını içe aktarmayın.)
4. Başlangıç uygulamasını çalıştırma
Projeyi Android Studio'ya aktardığınıza ve ML Kit Nesne Algılama ve İzleme bağımlılıklarını eklediğinize göre uygulamayı ilk kez çalıştırmaya hazırsınız.
Android cihazınızı USB ile ana makinenize bağlayın veya Android Studio emülatörünü başlatın ve Android Studio araç çubuğunda Run'ı (
) tıklayın.
Uygulamayı çalıştırma ve keşfetme
Uygulama, Android cihazınızda başlatılmalıdır. Fotoğraf çekmenize veya önceden ayarlanmış bir resmi seçip bu codelab'de oluşturacağınız nesne algılama ve izleme işlem hattına aktarmanıza olanak tanıyan bazı ortak metin kodları içerir. Kod yazmadan önce uygulamayı biraz inceleyelim.
İlk olarak, altta Düğme (
) bulunur. Bu düğmeyle:
- cihazınızda/emülatörünüzde entegre kamera uygulamasını açma
- Kamera uygulamanızda fotoğraf çekme
- çekilen görüntüyü başlangıç uygulamasında alma
- resmi görüntüleme
Fotoğraf çek düğmesini deneyin, fotoğraf çekmek için istemleri uygulayın, fotoğrafı kabul edin ve başlangıç uygulamasında gösterilmesini izleyin.
Nasıl çalıştığını görmek için birkaç kez tekrarlayın:

İkinci olarak, aralarından seçim yapabileceğiniz 3 hazır resim vardır. Android emülatöründe çalışıyorsanız bu resimleri daha sonra nesne algılama kodunu test etmek için kullanabilirsiniz.
3 hazır resimden birini seçin. Resmin daha büyük görünümde gösterildiğinden emin olun:

5. Cihaz üzerinde nesne algılama ekleme
Bu adımda, başlangıç uygulamasına resimlerdeki nesneleri algılama işlevini ekleyeceksiniz. Önceki adımda gördüğünüz gibi, başlangıç uygulaması cihazdaki kamera uygulamasıyla fotoğraf çekmek için ortak metin kodu içerir. Ayrıca, Android emülatöründe codelab'i çalıştırıyorsanız nesne algılamayı deneyebileceğiniz 3 hazır resim de vardır.
Hazır resimlerden birini seçtiğinizde veya kamera uygulamasıyla fotoğraf çektiğinizde, ortak metin kodu bu resmi Bitmap örneğine dönüştürür, ekranda gösterir ve resimle birlikte runObjectDetection yöntemini çağırır.
Bu adımda, nesne algılama için runObjectDetection yöntemine kod ekleyeceksiniz.
Görüntüde cihaz üzerinde nesne algılamayı ayarlama ve çalıştırma
ML Kit ODT'yi ayarlamak için yalnızca 3 basit adım ve 3 API vardır:
- Resim hazırlama:
InputImage - Algılayıcı nesnesi oluşturma:
ObjectDetection.getClient(options) - Yukarıdaki 2 nesneyi bağla:
process(image)
Bunları MainActivity.kt dosyasındaki runObjectDetection(bitmap: Bitmap) işlevinde yaparsınız.
/**
* ML Kit Object Detection Function
*/
private fun runObjectDetection(bitmap: Bitmap) {
}
Şu anda işlev boş. ML Kit ODT'yi uygulamak için aşağıdaki adımlara geçin. Bu süreçte Android Studio, gerekli içe aktarmaları eklemenizi ister:
com.google.mlkit.vision.common.InputImagecom.google.mlkit.vision.objects.ObjectDetectioncom.google.mlkit.vision.objects.defaults.ObjectDetectorOptions
1. adım: InputImage oluşturun
ML Kit, Bitmap öğesinden InputImage oluşturmak için basit bir API sağlar. Ardından, ML Kit API'lerine bir InputImage besleyebilirsiniz.
// Step 1: create ML Kit's InputImage object
val image = InputImage.fromBitmap(bitmap, 0)
Yukarıdaki kodu runObjectDetection(bitmap:Bitmap) dosyasının en üstüne ekleyin.
2. adım: Algılayıcı örneği oluşturun
ML Kit, Builder Design Pattern'i kullanır. Yapılandırmayı oluşturucuya iletir, ardından yapılandırmadan bir algılayıcı edinirsiniz. Yapılandırılacak 3 seçenek vardır (bu codelab'de kalın olarak belirtilen seçenekler kullanılır):
- algılama modu (tek resim veya akış)
- algılama modu (tek veya çoklu nesne algılama)
- sınıflandırma modu (açık veya kapalı)
Bu kod laboratuvarı, tek görüntüde birden fazla nesne algılama ve sınıflandırma içindir. Hemen ekleyin:
// Step 2: acquire detector object
val options = ObjectDetectorOptions.Builder()
.setDetectorMode(ObjectDetectorOptions.SINGLE_IMAGE_MODE)
.enableMultipleObjects()
.enableClassification()
.build()
val objectDetector = ObjectDetection.getClient(options)
3. adım: Görüntüleri dedektöre aktarın
Nesne algılama ve sınıflandırma, eş zamansız işleme olarak yapılır:
- Tespit aracına (
process()üzerinden) bir resim gönderirsiniz. - Dedektör bu konuda oldukça yoğun çalışır.
- Algılayıcı, sonucu geri arama yoluyla size bildirir.
Aşağıdaki kod tam olarak bunu yapar (kopyalayıp fun runObjectDetection(bitmap:Bitmap)): içindeki mevcut koda ekleyin).
// Step 3: feed given image to detector and setup callback
objectDetector.process(image)
.addOnSuccessListener {
// Task completed successfully
debugPrint(it)
}
.addOnFailureListener {
// Task failed with an exception
Log.e(TAG, it.message.toString())
}
Tamamlandığında dedektör sizi aşağıdaki bilgilerle uyarır:
- Algılanan toplam nesne sayısı. Algılanan her nesne şu şekilde açıklanır:
trackingId: Çerçeveler arası izlemek için kullandığınız bir tam sayı (bu codelab'de kullanılmaz).boundingBox: nesnenin sınırlayıcı kutusu.labels:Algılanan nesne için etiketlerin listesi (yalnızca sınıflandırma etkinleştirildiğinde):index(Bu etiketin dizinini alma)text("Moda Ürünleri", "Yiyecek", "Ev Ürünleri", "Yer", "Bitki" dahil olmak üzere bu etiketin metnini alın)confidence( 1,0 %100 anlamına gelen, 0,0 ile 1,0 arasında değişen bir kayan nokta)
Kodun, debugPrint() ile algılanan sonuç için printf benzeri bir işlem yaptığını fark etmişsinizdir.
MainActivity sınıfına ekleyin:
private fun debugPrint(detectedObjects: List<DetectedObject>) {
detectedObjects.forEachIndexed { index, detectedObject ->
val box = detectedObject.boundingBox
Log.d(TAG, "Detected object: $index")
Log.d(TAG, " trackingId: ${detectedObject.trackingId}")
Log.d(TAG, " boundingBox: (${box.left}, ${box.top}) - (${box.right},${box.bottom})")
detectedObject.labels.forEach {
Log.d(TAG, " categories: ${it.text}")
Log.d(TAG, " confidence: ${it.confidence}")
}
}
}
Artık algılama için resim kabul etmeye hazırsınız.
Android Studio araç çubuğunda Run'ı (
) tıklayarak codelab'i çalıştıralım. Önceden ayarlanmış bir resmi seçmeyi deneyin veya fotoğraf çekin, ardından IDE'deki logcat penceresine(
) bakın.
Aşağıdakine benzer bir ifade görürsünüz:
D/MLKit Object Detection: Detected object: 0
D/MLKit Object Detection: trackingId: null
D/MLKit Object Detection: boundingBox: (481, 2021) - (2426,3376)
D/MLKit Object Detection: categories: Food
D/MLKit Object Detection: confidence: 0.90234375
D/MLKit Object Detection: Detected object: 1
D/MLKit Object Detection: trackingId: null
D/MLKit Object Detection: boundingBox: (2639, 2633) - (3058,3577)
D/MLKit Object Detection: Detected object: 2
D/MLKit Object Detection: trackingId: null
D/MLKit Object Detection: boundingBox: (3, 1816) - (615,2597)
D/MLKit Object Detection: categories: Home good
D/MLKit Object Detection: confidence: 0.75390625
...yani dedektör 3 nesne gördü:
- Kategoriler Yiyecek ve Ev eşyası'dır.
- 2. için bilinmeyen bir sınıf olduğundan kategori döndürülmedi.
trackingIdyok (çünkü bu, tek resim algılama modudur).boundingBoxdikdörtgenin içindeki konum (ör. (481, 2021) – (2426, 3376))- Algılayıcı, 1. öğenin Yiyecek olduğuna oldukça emin (güven oranı% 90, salata olduğu için).
ML Kit Nesne Algılama'nın çalışması için teknik olarak ihtiyacınız olan her şeyi şu anda elde ettiniz. Tebrikler!
Kullanıcı arayüzü tarafında, başladığınız aşamadasınız ancak daha iyi bir deneyim oluşturmak için sınırlayıcı kutuyu çizmek gibi kullanıcı arayüzünde algılanan sonuçlardan yararlanabilirsiniz. Bir sonraki adıma geçelim: Algılanan sonuçları işleme sonrası hale getirin.
6. Algılama sonuçlarını işleme sonrası düzenleme
Önceki adımlarda, algılanan sonucu logcat'e yazdırıyorsunuz: basit ve hızlı.
Bu bölümde, resimdeki sonucu kullanacaksınız:
- görüntüde sınırlayıcı kutuyu çizin
- sınırlayıcı kutunun içine kategori adını ve güven düzeyini çiz
Görselleştirme yardımcı programlarını anlama
Algılama sonucunu görselleştirmenize yardımcı olmak için codelab'in içinde bazı standart kodlar bulunur. Görselleştirme kodumuzu basitleştirmek için bu yardımcı programlardan yararlanın:
data class BoxWithText(val box: Rect, val text: String)Bu, görselleştirme için bir nesne algılama sonucunu depolayan bir veri sınıfıdır.box, nesnenin bulunduğu sınırlayıcı kutu,textise nesnenin sınırlayıcı kutusuyla birlikte görüntülenecek algılama sonucu dizesidir.fun drawDetectionResult(bitmap: Bitmap, detectionResults: List<BoxWithText>): BitmapBu yöntem, girişbitmapüzerindedetectionResultsnesne algılama sonuçlarını çizer ve değiştirilmiş kopyasını döndürür.
drawDetectionResult yardımcı program yönteminin çıkışına dair bir örneği aşağıda görebilirsiniz:

ML Kit algılama sonucunu görselleştirme
ML Kit nesne algılama sonucunu giriş görüntüsünün üzerine çizmek için görselleştirme yardımcı programlarını kullanın.
debugPrint() işlevini çağırdığınız yere gidin ve altına aşağıdaki kod snippet'ini ekleyin:
// Parse ML Kit's DetectedObject and create corresponding visualization data
val detectedObjects = it.map { obj ->
var text = "Unknown"
// We will show the top confident detection result if it exist
if (obj.labels.isNotEmpty()) {
val firstLabel = obj.labels.first()
text = "${firstLabel.text}, ${firstLabel.confidence.times(100).toInt()}%"
}
BoxWithText(obj.boundingBox, text)
}
// Draw the detection result on the input bitmap
val visualizedResult = drawDetectionResult(bitmap, detectedObjects)
// Show the detection result on the app screen
runOnUiThread {
inputImageView.setImageBitmap(visualizedResult)
}
- Öncelikle ML Kit'in
DetectedObjectayrıştırarak görselleştirme sonucunu göstermek içinBoxWithTextnesnelerin listesini oluşturursunuz. - Ardından,
drawDetectionResultyardımcı yöntemini kullanarak algılama sonucunu giriş resminin üzerine çizin ve ekranda gösterin.
Uygulayın
Şimdi Android Studio araç çubuğunda Run'ı (
) tıklayın.
Uygulama yüklendikten sonra kamera simgesinin bulunduğu düğmeye basın, kameranızı bir nesneye doğrultun, fotoğraf çekin, fotoğrafı kabul edin (Kamera uygulamasında) veya herhangi bir hazır resme kolayca dokunun. Algılama sonuçlarını görmeniz gerekir. En yeni ML Kit ODT'yi deneyimlemek için düğmeye tekrar basın veya başka bir resim seçin.

7. Tebrikler!
Uygulamanıza Nesne Algılama özellikleri eklemek için ML Kit'i kullanmış olmanız gerekir:
- 3 API ile 3 adım
- Giriş Resmi Oluşturma
- Algılayıcı Oluşturma
- Resmi Tespit Aracı'na Gönderme
Çalıştırmak için yapmanız gerekenler bu kadar.
Devam ederken modeli geliştirmek isteyebilirsiniz: Varsayılan modelin yalnızca 5 kategoriyi tanıyabildiğini görebilirsiniz. Model, bıçak, çatal ve şişeyi bile bilmiyor. Özel bir modeli nasıl eğitebileceğinizi öğrenmek için Cihaz Üzerinde Makine Öğrenimi - Nesne Algılama öğrenme rotamızdaki diğer codelab'e göz atın.
İşlediğimiz konular
- Android uygulamanıza ML Kit Nesne Algılama ve İzleme'yi ekleme
- Resimlerdeki nesneleri algılamak için ML Kit'te cihaz üzerinde nesne algılama ve izleme özelliğini kullanma
Sonraki Adımlar
- Algılama ve sınıflandırma doğruluğu ile performansı deneyimlemek için daha fazla resim ve canlı video ile ML Kit ODT'yi kullanarak daha fazlasını keşfedin.
- Özel bir modeli nasıl eğiteceğinizi öğrenmek için Cihaz Üzerinde Makine Öğrenimi - Nesne Algılama öğrenme rotasına göz atın.
- Kendi Android uygulamanızda ML Kit ODT'yi uygulama