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. Bu görevi, eğitim sırasında tanımlanan bir dizi kategori arasından bir resmin neyi temsil ettiğini belirlemek için kullanabilirsiniz. Bu talimatlarda, Resim Sınıflandırıcı'nın Python ile nasıl kullanılacağı gösterilmektedir.
Web demosunu görüntüleyerek bu görevin nasıl yerine getirildiğini öğrenebilirsiniz. Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel Bakış bölümünü inceleyin.
Kod örneği
Resim Sınıflandırıcı örnek kodu, referans olması açısından bu görevin Python'da eksiksiz bir şekilde uygulanmasını sağlar. 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 Resim 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ı oluşturmaya yönelik temel adımlar ve özellikle Görüntü Sınıflandırıcı'yı kullanmak için proje kodlama açıklanmaktadır. Platform sürümü gereksinimleri de dahil olmak üzere MediaPipe görevlerini kullanmak üzere geliştirme ortamınızı ayarlama hakkında genel bilgi edinmek için Python kurulum kılavuzuna bakın.
Paketler
Görüntü Sınıflandırıcı, mediapipe pip paketine görev yapar. Bağımlılığı aşağıdaki şekilde 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 olan eğitilmiş bir model gerektirir. Resim Sınıflandırıcı için eğitilmiş modeller hakkında daha fazla bilgi için göreve genel bakış Modeller bölümüne bakın.
Bir model seçip indirin, ardından bu modeli yerel bir dizinde depolayın. Önerilen EfficientNet-Lite0 modelini kullanabilirsiniz.
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. create_from_options
işlevi; çalışma modu, görünen adlar yerel ayarı, maksimum sonuç sayısı, güven eşiği, kategoriye izin verilenler listesi ve reddetme listesi dahil yapılandırma seçeneklerini kabul eder. Yapılandırma seçenekleri hakkında daha fazla bilgi için Yapılandırmaya Genel Bakış bölümüne bakı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ı. Görevi nasıl oluşturacağınızı ve çıkarımda bulunacağınızı görmek için giriş verisi 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 görüntüyle kullanmak üzere Resim Sınıflandırıcı oluşturmaya ilişkin eksiksiz bir örnek için kod örneğine 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. Üç mod vardır: IMAGE: Tek resimli girişlerin modu. VİDEO: Bir videonun kodu çözülmüş karelerine yönelik mod. LIVE_STREAM: Giriş verilerinin canlı yayınlanması (ör. kameradan) modu. Bu modda, sonuçları eşzamansız olarak alacak bir işleyici ayarlamak için resultListener çağrılmalıdır. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
display_names_locale |
Varsa görev modelinin meta verilerinde sağlanan görünen adlar için kullanılacak etiketlerin dilini ayarlar. İngilizce için varsayılan dil en şeklindedir. TensorFlow Lite Metadata Writer API'yi kullanarak özel modelin meta verilerine yerelleştirilmiş etiketler ekleyebilirsiniz. |
Yerel ayar kodu | en |
max_results |
Döndürülecek isteğe bağlı maksimum puanlı sınıflandırma sonucu sayısını ayarlar. 0'dan küçükse tüm mevcut sonuçlar döndürülür. | Pozitif sayılar | -1 |
score_threshold |
Model meta verilerinde (varsa) belirtilen 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 | Belirlenmedi |
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ı yoksayılır.
Bu seçenek, category_denylist ile birlikte kullanılamaz ve her iki sonucun da kullanılmasında hatayla sonuçlanır. |
Tüm dizeler | Belirlenmedi |
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ı yoksayılır. Bu seçenek category_allowlist ile karşılıklı olarak hariç tutulup her iki sonucun da hatalı olarak kullanılmasıdır. |
Tüm dizeler | Belirlenmedi |
result_callback |
Sonuç işleyiciyi, 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 koşu modu LIVE_STREAM olarak ayarlandığında kullanılabilir |
Yok | Belirlenmedi |
Verileri hazırlama
Girişinizi görüntü dosyası veya Numpy dizisi olarak hazırlayıp mediapipe.Image
nesnesine dönüştürün. Girişiniz bir video dosyası veya web kamerasından canlı yayınsa giriş çerçevelerinizi sayısal diziler 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şlenmek üzere 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ışma modunuza karşılık gelen sınıflandırma işlevini çağırabilirsiniz. Image Classifier API, giriş görüntüsünün veya çerçevesinin içindeki 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 Resim Sınıflandırıcı görevine giriş çerçevesinin zaman damgasını da sağlamanız gerekir.
- Resimde veya video modelinde çalışırken Görüntü Sınıflandırıcı görevi, giriş resmini veya kareyi işlemeyi bitirene kadar geçerli iş parçacığını engeller.
- Canlı yayın modunda çalışırken Görüntü Sınıflandırıcı görevi mevcut ileti dizisini engellemez ancak hemen geri döner. Bir giriş çerçevesini işlemeyi her bitirdiğinde, sonuç işleyicisini sınıflandırma sonucuyla birlikte çağırır. Görüntü 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ş çerçevesini yoksayar.
Bir görüntüyle kullanmak üzere Resim Sınıflandırıcı oluşturmaya ilişkin eksiksiz bir örnek için kod örneğine bakın.
Sonuçları işleme ve görüntüleme
Çıkarım çalıştırıldıktan sonra Görüntü Sınıflandırıcı görevi, giriş görüntüsü veya çerçevesindeki nesneler için olası kategorilerin listesini içeren bir ImageClassifierResult
nesnesi döndürür.
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ç, aşağıdaki cihazda Bird Classifier çalıştırılarak elde edilmiştir:
Görüntü Sınıflandırıcı örnek kodu, görevden döndürülen sınıflandırma sonuçlarının nasıl görüntüleneceğini gösterir. Ayrıntılar için kod örneğine bakın.