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

MediaPipe Görüntü Sınıflandırıcı görevi, görüntüler üzerinde sınıflandırma yapmanıza olanak tanır. Tekliflerinizi otomatikleştirmek ve optimize etmek için bu görev, bir resmin tanımlanan bir dizi kategori arasından neyi temsil çok önemlidir. Bu talimatlarda, Resim Sınıflandırıcı'nın nasıl kullanılacağı gösterilmektedir bazı ipuçları vereceğim.

Web sayfasını ziyaret ederek bu görevi demo'ya gidin. Örneğin, özellikleri, modelleri ve yapılandırma seçenekleri hakkında Bu görev için Genel Bakış'ı inceleyin.

Kod örneği

Resim Sınıflandırıcı için örnek kod, bu görevi görebilir. Bu kod, görevi test etmenize ve kendi resim sınıflandırıcınızı oluşturmaya başladınız. Verileri görüntüleyebilir, çalıştırabilir ve Resim Sınıflandırıcı örnek kod yalnızca web tarayıcınızı kullanarak.

Raspberry Pi için Resim Sınıflandırıcı'yı 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 Resim Sınıflandırıcı'yı kullanmak için projeleri kodlayın. Şu konularda genel bilgi için: dahil olmak üzere MediaPipe görevlerini kullanmak için geliştirme ortamınızı platform sürümü gereksinimleri hakkında daha fazla bilgi için Python'da kullanılabilir.

Paketler

Görüntü Sınıflandırıcı, mediapipe pip paketine görev yapar. Google Etiket Yöneticisi'ni kullanarak bağımlılığı olabilir:

$ 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örevi görebilir. Resim Sınıflandırıcı için eğitilmiş modeller hakkında daha fazla bilgi için bkz. göreve genel bakış Modeller bölümü.

Bir model seçip indirin, ardından bu modeli yerel bir dizinde depolayın. Tekliflerinizi otomatikleştirmek ve optimize etmek için önerilen EfficientNet-Lite0 modeli.

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

Aşağıda gösterildiği gibi, Model Adı parametresi içinde modelin yolunu belirtin:

base_options = BaseOptions(model_asset_path=model_path)

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. Yapılandırma hakkında daha fazla bilgi için Yapılandırmaya Genel Bakış bölümüne göz atın.

Resim Sınıflandırıcı görevi 3 giriş verisi türünü destekler: hareketsiz resimler, video dosyaları ve canlı video akışları kullanılabilir. Giriş verisi türünüze karşılık gelen sekmeyi ve çıkarımda bulunmayı öğreneceğiz.

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 kullanmak üzere Resim Sınıflandırıcı oluşturmaya ilişkin tam bir örnek için bkz. kod örnek bölümüne bakın.

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_locale 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 puanlı sınıflandırma sonucu sayısını şu değere ayarlar: dön. < 0 ise tüm mevcut sonuçlar döndürülür. Pozitif sayılar -1
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 sınıflandırma 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 sınıflandırma 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ı
result_callback Sonuç işleyiciyi sınıflandırma sonuçlarını alacak şekilde ayarlar Resim Sınıflandırıcı canlı yayındayken eşzamansız olarak yatırım yapmanız önemlidir. Yalnızca koşu modu LIVE_STREAM olarak ayarlandığında kullanılabilir Yok Ayarlanmadı

Verileri hazırlama

Girişinizi bir görüntü dosyası veya Numpy dizisi olarak hazırlayın ve daha sonra mediapipe.Image nesne algılandı. Girişiniz bir video dosyası veya şunun gibi harici bir kitaplık kullanabilirsiniz: 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çıklanır mevcut veri türlerinin her biri

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

Tetikleyicinin etkinleşmesi için çalışma modunuza karşılık gelen sınıflandırma işlevini çıkarımlar. Görüntü Sınıflandırıcı API, nesnesini ifade eder.

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 şunları da yapmanız gerekir: Resim Sınıflandırıcı görevine giriş çerçevesinin zaman damgasını sağlar.
  • Görüntü veya video modelinde çalışırken Resim Sınıflandırı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 Resim Sınıflandırıcı görevi, devam eder, ancak hemen geri döner. Sonucunu çağırır dinleyiciyle birlikte sınıflandırma sonucunu görmelerini sağlar. bir giriş çerçevesi işleniyor. classifyAsync işlevi Resim Sınıflandırıcı görevi başka bir kareyi işlemekle meşgulse görev, yeni giriş çerçevesine dokunun.

Bir resimle kullanmak üzere Resim Sınıflandırıcı oluşturmaya ilişkin tam bir örnek için bkz. kod örnek bölümüne bakın.

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

Çıkarım çalıştırıldığında, Görüntü Sınıflandırıcı görevi bir Olası kategorilerin listesini içeren ImageClassifierResult nesnesi giriş resmindeki veya çerçevesindeki nesneler için geçerlidir.

Aşağıda, bu görevdeki çıkış verilerinin bir örneği gösterilmektedir:

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ç, Bird Classifier (Bird Sınıflandırıcı) çalıştırılarak elde edilmiştir. tarih:

Resim Sınıflandırıcı örnek kodu, sınıflandırmanın nasıl görüntüleneceğini gösterir daha fazla bilgi için koda bakın örnek inceleyebilirsiniz.