Python için nesne algılama rehberi

MediaPipe Nesne Algılama görevi, birden fazla nesne sınıfının varlığını ve konumunu algılamanıza olanak tanır. Bu talimatlarda, Nesne Tarayıcısı görevinin Python'da nasıl kullanılacağı gösterilmektedir. Bu talimatlarda açıklanan kod örneğini GitHub'da bulabilirsiniz.

Bu görevi çalışırken görmek için web demosunu görüntüleyebilirsiniz. Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel bakış bölümüne bakın.

Kod örneği

Nesne algılayıcıyla ilgili örnek kodda, bu görevin Python'da eksiksiz bir şekilde uygulanmasına referans olarak yer verilmiştir. Bu kod, bu görevi test etmenize ve kendi metin sınıflandırma uygulamanızı oluşturmaya başlamanıza yardımcı olur. Nesne Tanımlayıcı örnek kodunu yalnızca web tarayıcınızı kullanarak görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz.

Nesne Algılama'yı Raspberry Pi için uyguluyorsanız Raspberry Pi örnek uygulamasına bakın.

Kurulum

Bu bölümde, geliştirme ortamınızı ve kod projelerinizi özellikle Nesne Tarayıcısı'nı kullanacak şekilde ayarlamayla ilgili temel adımlar açıklanmaktadır. Platform sürümü gereksinimleri dahil olmak üzere, geliştirme ortamınızı MediaPipe görevlerini kullanmak için ayarlama hakkında genel bilgi için Python için kurulum kılavuzu başlıklı makaleyi inceleyin.

Paketler

Nesne algılama görevi için mediapipe pip paketi gerekir. Gerekli paketleri aşağıdaki komutlarla yükleyebilirsiniz:

$ python -m pip install mediapipe

İçe aktarılanlar

Nesne algılayıcı görev işlevlerine erişmek için aşağıdaki sınıfları içe aktarın:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

Model

MediaPipe Nesne Algılama görevi, bu görevle uyumlu bir eğitimli model gerektirir. Nesne Algılama için kullanılabilen eğitilmiş modeller hakkında daha fazla bilgi edinmek istiyorsanız göreve genel bakıştaki Modeller bölümüne göz atın.

Bir model seçip indirin ve yerel bir dizinde depolayın:

model_path = '/absolute/path/to/lite-model_efficientdet_lite0_detection_metadata_1.tflite'

Kullanılacak modelin yolunu belirtmek için BaseOptions nesnesi model_asset_path parametresini kullanın. Kod örneği için sonraki bölüme bakın.

Görevi oluşturun

Görevi oluşturmak için create_from_options işlevini kullanın. create_from_options işlevi; çalışma modu, görüntülenen adlar yerel ayarı, maksimum sonuç sayısı, güven eşiği, kategori izin verilenler listesi ve reddedilenler listesi gibi yapılandırma seçeneklerini kabul eder. Yapılandırma seçeneği ayarlamazsanız görev varsayılan değeri kullanır. Yapılandırma seçenekleri hakkında daha fazla bilgi için Yapılandırma seçenekleri bölümüne bakın.

Nesne algılama görevi, çeşitli giriş veri türlerini destekler: sabit resimler, video dosyaları ve canlı video akışları. Görevi nasıl oluşturacağınızı ve çıkarım işlemini nasıl çalıştıracağınızı görmek için giriş veri türünüze karşılık gelen sekmeyi seçin.

Resim

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ObjectDetector = mp.tasks.vision.ObjectDetector
ObjectDetectorOptions = mp.tasks.vision.ObjectDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

options = ObjectDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    max_results=5,
    running_mode=VisionRunningMode.IMAGE)

with ObjectDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

Video

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ObjectDetector = mp.tasks.vision.ObjectDetector
ObjectDetectorOptions = mp.tasks.vision.ObjectDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

options = ObjectDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    max_results=5,
    running_mode=VisionRunningMode.VIDEO)

with ObjectDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

Canlı yayın

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
DetectionResult = mp.tasks.components.containers.detections.DetectionResult
ObjectDetector = mp.tasks.vision.ObjectDetector
ObjectDetectorOptions = mp.tasks.vision.ObjectDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

def print_result(result: DetectionResult, output_image: mp.Image, timestamp_ms: int):
    print('detection result: {}'.format(result))

options = ObjectDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    running_mode=VisionRunningMode.LIVE_STREAM,
    max_results=5,
    result_callback=print_result)

with ObjectDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

Bir resimle kullanmak üzere nesne algılayıcı oluşturma ile ilgili eksiksiz bir örnek için kod örneğine bakın.

Yapılandırma seçenekleri

Bu görevde, Python uygulamaları için aşağıdaki yapılandırma seçenekleri bulunur:

Seçenek Adı Açıklama Değer Aralığı Varsayılan değer
running_mode Görevin çalışma modunu ayarlar. Üç mod vardır:

RESİM: Tek resim girişleri için kullanılan mod.

VIDEO: Bir videonun kod çözülmüş karelerinin modu.

LIVE_STREAM: Kameradan alınan giriş verilerinin canlı yayını için kullanılan mod. Bu modda, sonuçları asenkron olarak alacak bir dinleyici oluşturmak için resultListener çağrılmalıdır.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
display_names Görevin modelinin meta verilerinde sağlanan görünen adlar için kullanılacak etiketlerin dilini belirler (varsa). Varsayılan değer, İngilizce için en'tir. TensorFlow Lite Meta Veri Yazıcı API'yi kullanarak özel bir modelin meta verilerine yerelleştirilmiş etiketler ekleyebilirsiniz Yer kodu en
max_results Döndürülecek isteğe bağlı maksimum puana sahip algılama sonucu sayısını ayarlar. Tüm pozitif sayılar -1 (tüm sonuçlar döndürülür)
score_threshold Model meta verilerinde (varsa) sağlanan eşiği geçersiz kılan tahmin puanı eşiğini belirler. Bu değerin altındaki sonuçlar reddedilir. Herhangi bir kayan nokta Ayarlanmadı
category_allowlist İ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ı filtrelenir. Yinelenen veya bilinmeyen kategori adları yok sayılır. Bu seçenek, category_denylist ile birbirini hariç tutar ve her ikisinin de kullanılması hatayla sonuçlanır. Herhangi bir dize Ayarlanmadı
category_denylist İzin verilmeyen kategori adlarının isteğe bağlı listesini ayarlar. Boş değilse kategori adı bu grupta bulunan algılama sonuçları filtrelenir. Yinelenen veya bilinmeyen kategori adları yok sayılır. Bu seçenek, category_allowlist ile birlikte kullanılamaz. İkisinin birlikte kullanılması hataya neden olur. Herhangi bir dize Ayarlanmadı

Verileri hazırlama

Girişinizi resim dosyası veya numpy dizisi olarak hazırlayın, ardından mediapipe.Image nesnesine dönüştürün. Girişiniz bir video dosyası veya web kamerasından canlı yayınsa giriş karelerinizi numpy dizileri olarak yüklemek için OpenCV gibi harici bir kitaplık kullanabilirsiniz.

Aşağıdaki örneklerde, mevcut veri türlerinin her biri için verilerin işlemeye nasıl hazırlanacağı açıklanmakta ve gösterilmektedir:

Resim

import mediapipe as mp

# Load the input image from an image file.
mp_image = mp.Image.create_from_file('/path/to/image')

# Load the input image from a numpy array.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)
    

Video

import mediapipe as mp

# Use OpenCV’s VideoCapture to load the input video.

# Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS
# You’ll need it to calculate the timestamp for each frame.

# Loop through each frame in the video using VideoCapture#read()

# Convert the frame received from OpenCV to a MediaPipe’s Image object.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
    

Canlı yayın

import mediapipe as mp

# Use OpenCV’s VideoCapture to start capturing from the webcam.

# Create a loop to read the latest frame from the camera using VideoCapture#read()

# Convert the frame received from OpenCV to a MediaPipe’s Image object.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
    

Görevi çalıştırma

Çıkarımları tetiklemek için algılama işlevlerinden birini çağırabilirsiniz. Nesne algılayıcı görevi, giriş resminde veya karede algılanan nesneleri döndürür.

Resim

# Perform object detection on the provided single image.
detection_result = detector.detect(mp_image)
    

Video

# Calculate the timestamp of the current frame
frame_timestamp_ms = 1000 * frame_index / video_file_fps

# Perform object detection on the video frame.
detection_result = detector.detect_for_video(mp_image, frame_timestamp_ms)
    

Canlı yayın

# Send the latest frame to perform object detection.
# Results are sent to the `result_callback` provided in the `ObjectDetectorOptions`.
detector.detect_async(mp_image, frame_timestamp_ms)
    

Bir resimde Nesne Tarayıcısı'nın çalıştırıldığı tam bir örnek için ayrıntılı bilgi edinmek üzere kod örneğine bakın.

Aşağıdakileri göz önünde bulundurun:

  • Video modunda veya canlı yayın modunda çalışırken Nesne Algılama görevine giriş karesinin zaman damgasını da sağlamanız gerekir.
  • Nesne algılama görevi, resim veya video modelinde çalışırken giriş resmini ya da kareyi işlemeyi tamamlayana kadar mevcut iş parçacısını engeller.
  • Canlı yayın modunda çalışırken nesne algılama görevi, geçerli iş parçacığını engellemez ancak hemen döndürülür. Her giriş çerçevesini işlemeyi tamamladığında sonuç dinleyicisini algılama sonucuyla çağırır. Nesne algılama görevi başka bir kareyi işlemekle meşgulken algılama işlevi çağrılırsa yeni giriş karesi yoksayılır.

Sonuçları işleme ve görüntüleme

Nesne algılama görevi, çıkarım çalıştırıldığında giriş görüntüsünde bulduğu nesneleri açıklayan bir ObjectDetectionResult nesnesi döndürür.

Aşağıda, bu görevin çıkış verilerine örnek verilmiştir:

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 çıktısının görselleştirmesi gösterilmektedir:

Sınırlayıcı kutularla vurgulanan iki köpek

Nesne algılayıcı örnek kodunda, görevden döndürülen algılama sonuçlarının nasıl görüntüleneceği gösterilmektedir. Ayrıntılar için kod örneğine bakın.