Nesne Dedektörü görevi, birden fazla öğenin mevcut olup olmadığını düşünme egzersizlerini teşvik edersiniz. Örneğin, bir nesne dedektörü belirli bir yerde, görüntüsüdür. Bu talimatlar, cihazınızda Nesne Algılayıcı görevini nasıl Android Bu talimatlarda açıklanan kod örneğini şu adreste bulabilirsiniz: GitHub'a gidin. Bunu görüntüleyerek bu görevi uygulamalı olarak görebilirsiniz Web demosu. Özellikler, modeller ve yapılandırma seçenekleri hakkında daha fazla bilgi Bu görev hakkında daha fazla bilgi için Genel Bakış'ı inceleyin.
Kod örneği
MediaPipe Tasks örnek kodu, bir Nesne Dedektörü'nün kullanımı ve Android için uygulama. Örnekte, fiziksel bir Android cihazın kamerasıyla nesneleri sürekli olarak algılar ve ayrıca fotoğraf makinelerinden cihaz galerisini kullanır.
Uygulamayı kendi Android uygulamanız için başlangıç noktası olarak kullanabilir veya buna başvurabilirsiniz mevcut bir uygulamada değişiklik yaparken. Nesne Algılayıcısı örnek kodu, GitHub'a gidin.
Kodu indirme
Aşağıdaki talimatlarda, örneğin yerel bir kopyasını nasıl oluşturacağınız gösterilmektedir kodu oluşturmak için git komut satırı aracını kullanın.
Örnek kodu indirmek için:
- Aşağıdaki komutu kullanarak git deposunu klonlayın:
git clone https://github.com/google-ai-edge/mediapipe-samples
. - İsteğe bağlı olarak, git örneğinizi seyrek ödeme yöntemini kullanacak şekilde yapılandırın,
Dolayısıyla, yalnızca Nesne Algılayıcı örnek uygulamasına ait dosyalara sahip olursunuz:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/object_detection/android
.
Örnek kodun yerel sürümünü oluşturduktan sonra projeyi içe aktarabilirsiniz. Android Studio'ya gidip uygulamayı çalıştırın. Talimatlar için Android için Kurulum Kılavuzu.
Temel bileşenler
Aşağıdaki dosyalar, Object Detector için önemli kodu içerir örnek uygulama:
- ObjectDetectorHelper.kt - Nesne algılayıcıyı başlatır, modeli ve yetkiyi işler seçim
- MainActivity.kt Uygulamayı uygular ve kullanıcı arayüzü bileşenlerini derler
- OverlayView.kt - Sonuçları ele alır ve gösterir
Kurulum
Bu bölümde, geliştirme ortamınızı ve ayarlarınızı yönetmeyle ilgili kod projelerini kullanır. Şu konularda genel bilgi için: dahil olmak üzere MediaPipe görevlerini kullanmak için geliştirme ortamınızı daha fazla bilgi için Android için kurulum kılavuzu.
Bağımlılıklar
Nesne Algılayıcı com.google.mediapipe:tasks-vision
kitaplığını kullanır. Bunu ekle
dosyanızın build.gradle
dosyasına bağımlılığı
Android uygulama geliştirme projesi. Gerekli bağımlılıkları
şu kodu kullanın:
dependencies {
implementation 'com.google.mediapipe:tasks-vision:latest.release'
}
Model
MediaPipe Nesne Dedektörü görevi bu görevi görebilir. Nesne Algılayıcı için eğitilen modeller hakkında daha fazla bilgi için göreve genel bakış Modeller bölümü.
Modeli seçin ve indirin, ardından proje dizininizde depolayın:
<dev-project-root>/src/main/assets
Yolu belirtmek için BaseOptions.Builder.setModelAssetPath()
yöntemini kullanın
modeli tarafından kullanılır. Kod örneği için sonraki bölüme bakın.
Görevi oluşturma
Görevi oluşturmak için createFromOptions
işlevini kullanabilirsiniz. İlgili içeriği oluşturmak için kullanılan
createFromOptions
işlevi, çalıştırma da dahil olmak üzere yapılandırma seçeneklerini kabul eder
mod, görünen adlar yerel ayarı, maksimum sonuç sayısı, güven eşiği,
kategori izin verilenler listesi ve ret listeleri. Bir yapılandırma seçeneği belirtilmemişse
varsayılan değer kullanılır. Yapılandırma seçenekleri hakkında daha fazla bilgi için
Yapılandırmaya Genel Bakış bölümüne bakın.
Nesne Algılayıcı görevi 3 giriş verisi türünü destekler: hareketsiz görüntüler, video dosyaları ve canlı video akışları kullanılabilir. Hedefe uygun koşu modunu giriş verilerinin türünü belirler. Şuna karşılık gelen sekmeyi seçin: giriş veri türünüzü inceleyerek görevi nasıl oluşturacağınızı ve çıkarımda bulunacağınızı öğrenin.
Resim
ObjectDetectorOptions options = ObjectDetectorOptions.builder() .setBaseOptions(BaseOptions.builder().setModelAssetPath(‘model.tflite’).build()) .setRunningMode(RunningMode.IMAGE) .setMaxResults(5) .build(); objectDetector = ObjectDetector.createFromOptions(context, options);
Video
ObjectDetectorOptions options = ObjectDetectorOptions.builder() .setBaseOptions(BaseOptions.builder().setModelAssetPath(‘model.tflite’).build()) .setRunningMode(RunningMode.VIDEO) .setMaxResults(5) .build(); objectDetector = ObjectDetector.createFromOptions(context, options);
Canlı yayın
ObjectDetectorOptions options = ObjectDetectorOptions.builder() .setBaseOptions(BaseOptions.builder().setModelAssetPath(‘model.tflite’).build()) .setRunningMode(RunningMode.LIVE_STREAM) .setMaxResults(5) .setResultListener((result, inputImage) -> { // Process the detection result here. }) .setErrorListener((result, inputImage) -> { // Process the classification errors here. }) .build(); objectDetector = ObjectDetector.createFromOptions(context, options);
Nesne Dedektörü örnek kod uygulaması, kullanıcının
farklı olabilir. Bu yaklaşım, görev oluşturma kodunu daha karmaşık hale
kullanım alanınıza uygun olmayabilir. Bu kodu
ObjectDetectorHelper
setupObjectDetector()
sınıf işlevi.
Yapılandırma seçenekleri
Bu görev, Android uygulamaları için aşağıdaki yapılandırma seçeneklerini içerir:
Seçenek Adı | Açıklama | Değer Aralığı | Varsayılan Değer |
---|---|---|---|
runningMode |
Görev için çalışma modunu ayarlar. Üç tane var
modlar: . IMAGE: Tek resimli giriş modu. . . VIDEO: Bir videonun kodu çözülmüş karelerine yönelik mod. . . LIVE_STREAM: Giriş canlı yayını modu kameradan alınan veriler gibi. Bu modda, resultListener, sonuçları almak üzere bir dinleyici ayarlamak için çağrıldı eşzamansız olarak ayarlayabilirsiniz. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
displayNamesLocales |
görev modelinin meta verileri (varsa). Şunun için varsayılan: en
İngilizce. Özel bir modelin meta verilerine yerelleştirilmiş etiketler ekleyebilirsiniz
TensorFlow Lite Metadata Writer API'yi kullanarak
|
Yerel ayar kodu | en |
maxResults |
İsteğe bağlı maksimum üst puanlı algılama sonucu sayısını şu değere ayarlar: dön. | Pozitif sayılar | -1 (tüm sonuçlar döndürülür) |
scoreThreshold |
Şu kriterde sağlanan tahmini geçersiz kılan bir tahmin puanı eşiğini belirler: model meta verileri (varsa). Bu değerin altındaki sonuçlar reddedilir. | Herhangi bir kayan nokta | Ayarlanmadı |
categoryAllowlist |
İzin verilen kategori adlarının isteğe bağlı listesini ayarlar. Boş değilse
kategori adı bu kümede bulunmayan algılama sonuçları
filtrelendi. Yinelenen veya bilinmeyen kategori adları yoksayılır.
Bu seçenek categoryDenylist ile birlikte kullanılamaz ve
her ikisi de hataya neden olur. |
Tüm dizeler | Ayarlanmadı |
categoryDenylist |
İzin verilmeyen kategori adlarının isteğe bağlı listesini ayarlar. Eğer
Boş olmayan, kategori adı bu kümede bulunan algılama sonuçları filtrelenir
çıkar. Yinelenen veya bilinmeyen kategori adları yoksayılır. Bu seçenek birlikte
hariç tutmanın yanı sıra her iki sonucun da hatalı olarak kullanılmasıdır.categoryAllowlist |
Tüm dizeler | Ayarlanmadı |
resultListener |
Sonuç işleyiciyi algılama sonuçlarını alacak şekilde ayarlar nesne algılayıcı canlı yayındayken eşzamansız olarak yatırım yapmanız önemlidir. Bu seçeneği yalnızca runningMode'u LIVE_STREAM olarak ayarladığınızda kullanabilirsiniz. | Geçerli değil | Ayarlanmadı |
Verileri hazırlama
Giriş resmini veya çerçevesini
com.google.mediapipe.framework.image.MPImage
nesnesini
Nesne Algılayıcı.
Aşağıdaki örneklerde verilerin işlenmek üzere nasıl hazırlanacağı açıklanmakta ve gösterilmektedir tıklayın:
Resim
import com.google.mediapipe.framework.image.BitmapImageBuilder; import com.google.mediapipe.framework.image.MPImage; // Load an image on the user’s device as a Bitmap object using BitmapFactory. // Convert an Android’s Bitmap object to a MediaPipe’s Image object. Image mpImage = new BitmapImageBuilder(bitmap).build();
Video
import com.google.mediapipe.framework.image.BitmapImageBuilder; import com.google.mediapipe.framework.image.MPImage; // Load a video file on the user's device using MediaMetadataRetriever // From the video’s metadata, load the METADATA_KEY_DURATION and // METADATA_KEY_VIDEO_FRAME_COUNT values. Use these values // to calculate the timestamp of each frame later. // Loop through the video and load each frame as a Bitmap object. // Convert the Android’s Bitmap object to a MediaPipe’s Image object. Image mpImage = new BitmapImageBuilder(frame).build();
Canlı yayın
import com.google.mediapipe.framework.image.MediaImageBuilder; import com.google.mediapipe.framework.image.MPImage; // Create a CameraX’s ImageAnalysis to continuously receive frames // from the device’s camera. Configure it to output frames in RGBA_8888 // format to match with what is required by the model. // For each Android’s ImageProxy object received from the ImageAnalysis, // extract the encapsulated Android’s Image object and convert it to // a MediaPipe’s Image object. android.media.Image mediaImage = imageProxy.getImage() MPImage mpImage = new MediaImageBuilder(mediaImage).build();
Nesne Algılayıcısı örnek kodunda, veri hazırlığı
ObjectDetectorHelper
detectImage()
, detectVideoFile()
, detectLivestreamFrame()
içindeki sınıf
işlevlerine dahildir.
Görevi çalıştırma
Üzerinde çalıştığınız veri türüne bağlı olarak
ObjectDetector.detect...()
yöntemini çağırın. Tekliflerinizi otomatikleştirmek ve optimize etmek için
Ayrı resimler için detect()
,
Video dosyalarındaki kareler için detectForVideo()
ve
Video akışları için detectAsync()
. Bir makinede algılamalar
bu sorunu önlemek için algılamaları ayrı bir iş parçacığında çalıştırdığınızdan emin olun.
ileti dizisi engelleniyor.
Aşağıdaki kod örnekleri, Object Detector'ın nasıl çalıştırılacağına ilişkin basit örnekleri gösterir şu farklı veri modlarında kullanabilirsiniz:
Resim
ObjectDetectorResult detectionResult = objectDetector.detect(image);
Video
// Calculate the timestamp in milliseconds of the current frame. long frame_timestamp_ms = 1000 * video_duration * frame_index / frame_count; // Run inference on the frame. ObjectDetectorResult detectionResult = objectDetector.detectForVideo(image, frameTimestampMs);
Canlı yayın
// Run inference on the frame. The detection results will be available // via the `resultListener` provided in the `ObjectDetectorOptions` when // the object detector was created. objectDetector.detectAsync(image, frameTimestampMs);
Nesne Algılayıcı kodu örneği, bu özelliklerden her birinin,
hakkında daha fazla bilgi edinin
detect()
detectVideoFile()
,
ve detectAsync()
.
Örnek kod, kullanıcının işleme modları arasında geçiş yapmasını sağlar
Bu, kullanım alanınız için gerekli olmayabilir.
Aşağıdakileri göz önünde bulundurun:
- Video modunda veya canlı yayın modunda çalışırken şunları da yapmanız gerekir: Giriş çerçevesinin zaman damgasını Nesne Algılayıcı görevine sağlar.
- Görüntü veya video modunda çalışırken Nesne Dedektörü görevi, giriş resmini işlemeyi bitirene kadar geçerli iş parçacığını engeller veya çerçeve. Mevcut iş parçacığının engellenmesini önlemek için işlemeyi arka plan ileti dizisi.
- Canlı yayın modunda çalışırken Nesne Algılayıcı görevi, devam eder, ancak hemen geri döner. Sonucunu çağırır algılama sonucuyla birlikte gelen bir hata dinleyicisidir. giriş çerçevesine sahip. Nesne Dedektörü görevi başka bir kareyi işlemekle meşgulse yeni giriş çerçevesi yoksayılacak.
Sonuçları işleme ve görüntüleme
Çıkarım çalıştırıldığında, Nesne Algılayıcı görevi bir
Bulunduğu nesneleri açıklayan ObjectDetectorResult
nesnesi
giriş resmine bakalım.
Aşağıda, bu görevdeki çıkış verilerinin bir örneği gösterilmektedir:
ObjectDetectorResult:
Detection #0:
Box: (x: 355, y: 133, w: 190, h: 206)
Categories:
index : 17
score : 0.73828
class name : dog
Detection #1:
Box: (x: 103, y: 15, w: 138, h: 369)
Categories:
index : 17
score : 0.73047
class name : dog
Aşağıdaki resimde, görev çıkışının görselleştirmesi gösterilmektedir:
Nesne Algılayıcısı örnek kodu, algılamanın nasıl görüntüleneceğini
daha fazla bilgi edinmek için
OverlayView
inceleyebilirsiniz.