Python için görüntü sınıflandırma kılavuzu

MediaPipe Resim Sınıflandırıcı görevi, resimlerde sınıflandırma yapmanıza olanak tanır. Bir resmin, eğitim sırasında tanımlanan bir dizi kategori arasında neyi temsil ettiğini belirlemek için bu görevi kullanabilirsiniz. Bu talimatlarda, Görüntü Sınıflandırıcı'nın Python ile nasıl kullanılacağı gösterilmektedir.

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

Resim sınıflandırıcısı için ö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 görüntü sınıflandırıcınızı oluşturmaya başlamanıza yardımcı olur. Yalnızca web tarayıcınızı kullanarak Görüntü Sınıflandırıcı örnek kodunu görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz.

Raspberry Pi için resim sınıflandırıcıyı uyguluyorsanız Raspberry Pi örnek uygulamasına bakın.

Kurulum

Bu bölümde, geliştirme ortamınızı ve kod projelerinizi özellikle Resim Sınıflandırıcı'yı 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ılavuzuna bakın.

Paketler

Resim sınıflandırıcı görevi, mediapipe pip paketini kullanır. Bağımlılığı aşağıdakilerle yükleyebilirsiniz:

$ python -m pip install mediapipe
``` ### Imports

Import the following classes to access the Image Classifier task functions:

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

Model

MediaPipe görüntü sınıflandırıcı görevi, bu görevle uyumlu bir eğitimli model gerektirir. Resim sınıflandırıcı için mevcut eğitilmiş modeller hakkında daha fazla bilgi edinmek isterseniz göreve genel bakıştaki Modeller bölümüne göz atın.

Bir model seçip indirin ve yerel bir dizinde saklayın. Önerilen EfficientNet-Lite0 modelini kullanabilirsiniz.

model_path = '/absolute/path/to/efficientnet_lite0_int8_2.tflite'

Model Adı parametresinde modelin yolunu aşağıda gösterildiği gibi belirtin:

base_options = BaseOptions(model_asset_path=model_path)

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çenekleri hakkında daha fazla bilgi için Yapılandırmaya Genel Bakış başlıklı makaleyi inceleyin.

Resim sınıflandırıcı görevi 3 giriş veri türünü 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
ImageClassifier = mp.tasks.vision.ImageClassifier
ImageClassifierOptions = mp.tasks.vision.ImageClassifierOptions
VisionRunningMode = mp.tasks.vision.RunningMode

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

with ImageClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
    

Video

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ImageClassifier = mp.tasks.vision.ImageClassifier
ImageClassifierOptions = mp.tasks.vision.ImageClassifierOptions
VisionRunningMode = mp.tasks.vision.RunningMode

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

with ImageClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
    

Canlı yayın

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ImageClassifierResult = mp.tasks.vision.ImageClassifier.ImageClassifierResult
ImageClassifier = mp.tasks.vision.ImageClassifier
ImageClassifierOptions = mp.tasks.vision.ImageClassifierOptions
VisionRunningMode = mp.tasks.vision.RunningMode

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

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

with ImageClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
    

Bir resimle birlikte kullanılacak resim sınıflandırı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_locale 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 sınıflandırma sonucu sayısını belirler. < 0 ise mevcut tüm sonuçlar döndürülür. Tüm pozitif sayılar -1
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 sınıflandırma 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 kümede bulunan sınıflandırma 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ı
result_callback Sonuç dinleyicisini, görüntü sınıflandırıcı canlı yayın modundayken sınıflandırma sonuçlarını eşzamansız olarak alacak şekilde ayarlar. Yalnızca çalışma modu LIVE_STREAM olarak ayarlandığında kullanılabilir. Yok 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 çalıştırma modunuza karşılık gelen sınıflandırma işlevini çağırabilirsiniz. Görüntü Sınıflandırıcı API'si, giriş resmi veya çerçevesindeki nesne için olası kategorileri döndürür.

Resim

# Perform image classification on the provided single image.
classification_result = classifier.classify(mp_image)
    

Video

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

# Perform image classification on the video frame.
classification_result = classifier.classify_for_video(mp_image, frame_timestamp_ms)
    

Canlı yayın

# Send the latest frame to perform image classification.
# Results are sent to the `result_callback` provided in the `ImageClassifierOptions`.
classifier.classify_async(mp_image, frame_timestamp_ms)
    

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

  • Video modunda veya canlı yayın modunda çalışırken Görüntü Sınıflandırıcı görevine giriş karesinin zaman damgasını da sağlamanız gerekir.
  • Resim veya video modelinde çalışırken Resim Sınıflandırıcı görevi, giriş resmini veya kareyi işlemeye başlayana kadar mevcut iş parçacığını engeller.
  • Canlı yayın modunda çalışırken Görüntü Sınıflandırıcı görevi, mevcut iş parçacığını engellemez ancak hemen döndürülür. Her giriş karesini işlemeyi tamamladığında sonuç dinleyicisini sınıflandırma sonucuyla çağırır. Resim sınıflandırıcı görevi başka bir kareyi işlemekle meşgulken classifyAsync işlevi çağrılırsa görev yeni giriş karesini yoksayar.

Bir resimle birlikte kullanılacak resim sınıflandırıcı oluşturma ile ilgili eksiksiz bir örnek için kod örneğine bakın.

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

Resim Sınıflandırıcı görevi, çıkarım çalıştırıldığında giriş resmi veya çerçevedeki nesneler için olası kategorilerin listesini içeren bir ImageClassifierResult nesnesi döndürür.

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

ImageClassifierResult:
 Classifications #0 (single classification head):
  head index: 0
  category #0:
   category name: "/m/01bwb9"
   display name: "Passer domesticus"
   score: 0.91406
   index: 671
  category #1:
   category name: "/m/01bwbt"
   display name: "Passer montanus"
   score: 0.00391
   index: 670

Bu sonuç, Kuş Sınıflandırıcı'nın şunda çalıştırılmasıyla elde edilmiştir:

Ev serçesinin yakın çekim fotoğrafı

Resim sınıflandırıcı örnek kodunda, görevden döndürülen sınıflandırma sonuçlarının nasıl görüntüleneceği gösterilmektedir. Ayrıntılar için kod örneğine bakın.