Python için nesne algılama rehberi

MediaPipe Object Detector görevi, birden fazla öğenin mevcut düşünme egzersizlerini teşvik edersiniz. Bu talimatlarda, Nesne Algılayıcı'nın nasıl kullanılacağı gösterilmektedir görevi görür. Bu talimatlarda açıklanan kod örneğini şu adreste bulabilirsiniz: GitHub'a gidin.

Web demosunu görüntüleyerek bu görevin nasıl yerine getirildiğini öğrenebilirsiniz. Modeller ve özellikler, yapılandırma seçeneklerini görmek için Genel Bakış'ı inceleyin.

Kod örneği

Nesne Dedektörü örnek kodu, bu yapılandırmanın tam olarak görevi görebilir. Bu kod, görevi test etmenize ve kendi metin sınıflandırma uygulamanızı geliştirmeye başladınız. Bu dosyaları görüntüleyebilir, çalıştırabilir Nesne Dedektörü örnek kodunu düzenleyin. yalnızca web tarayıcınızı kullanarak.

Raspberry Pi için Nesne Dedektörü'nü uyguluyorsanız Raspberry Pi örneği uygulamasında gösterilir.

Kurulum

Bu bölümde, geliştirme ortamınızı ve ayarlarınızı yönetmeyle ilgili Nesne Dedektörü'nü kullanmak için özel olarak kod projelerini kodlayın. Ş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 Python kurulum kılavuzu.

Paketler

Nesne Algılayıcı görevi, mediapipe pip paketini gerektirir. Google Etiket Yöneticisi'ni kullanarak aşağıdaki komutları kullanın:

$ 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 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ü.

Bir model seçip indirin, ardından bu modeli yerel bir dizinde depolayın:

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

Yolu belirtmek için BaseOptions nesnesi model_asset_path parametresini kullanın modelin tüm özellikleridir. Kod örneği için sonraki bölüme bakın.

Görevi oluşturma

Görevi oluşturmak için create_from_options işlevini kullanın. İlgili içeriği oluşturmak için kullanılan create_from_options 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 de dahildir. Bir 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ılayıcı görevi birkaç giriş verisi türünü destekler: hareketsiz görüntüler, video dosyaları ve canlı video akışları kullanılabilir. Giriş verilerinize karşılık gelen sekmeyi seçin yazın.

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 Dedektörü oluşturmayla ilgili kapsamlı bir örnek için kod örneği hakkında daha fazla bilgi edinin.

Yapılandırma seçenekleri

Bu görev, Python 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
running_mode 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
display_names 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
max_results İ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)
score_threshold Ş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ı
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ı filtrelendi. Yinelenen veya bilinmeyen kategori adları yoksayılır. Bu seçenek category_denylist ile birlikte kullanılamaz ve her ikisi de hataya neden olur. Tüm dizeler Ayarlanmadı
category_denylist İ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.category_allowlist Tüm dizeler Ayarlanmadı

Verileri hazırlama

Girişinizi bir görüntü dosyası veya Numpy dizisi olarak hazırlayın ve daha sonra bunu bir mediapipe.Image nesnesine dönüştürün. Girişiniz bir video dosyasıysa bir web kamerasından canlı yayın yapmak için Giriş çerçevelerinizi numpy olarak yüklemek için OpenCV dizi'dir.

Aşağıdaki örneklerde verilerin işlenmek üzere nasıl hazırlanacağı açıklanmakta ve gösterilmektedir tıklayın:

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ş görüntüsünde veya çerçevede 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 Dedektörü çalıştırmanın tam bir örneği için kod örneğini inceleyin.

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

  • Video modunda veya canlı yayın modunda çalışırken şunları da yapmanız gerekir: Nesne Dedektörü görevine giriş çerçevesinin zaman damgasını sağlar.
  • Görüntü veya video modelinde çalışırken Nesne Algılayıcı görevi, giriş resmini işlemeyi bitirene kadar geçerli iş parçacığını engeller veya çerçeve.
  • 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 ObjectDetectionResult 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 kod örneği inceleyebilirsiniz.