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, bir resmin eğitim sırasında tanımlanan bir grup kategori içinde neyi temsil ettiğini belirlemek için kullanabilirsiniz. Bu talimatlar, Python ile Image Classifier'ın nasıl kullanılacağını gösterir.
Web demosunu görüntüleyerek bu görevi çalışırken görebilirsiniz. Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel Bakış'a bakın.
Kod örneği
Image Classifier örnek kodu, size referans olması açısından bu görevin Python'da eksiksiz bir uygulamasını sağlar. Bu kod, bu görevi test etmenize ve kendi resim sınıflandırıcınızı oluşturmaya başlamanıza yardımcı olur. Image Classifier örnek kodunu yalnızca web tarayıcınızı kullanarak görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz.
Raspberry Pi için Image Classifier'ı uyguluyorsanız Raspberry Pi örnek uygulamasına bakın.
Kurulum
Bu bölümde, geliştirme ortamınızı kurmanın önemli adımları ve projelerinizi özel olarak Image Classifier kullanmak için kodlamak açıklanmaktadır. Platform sürümü gereksinimleri de dahil olmak üzere, MediaPipe görevlerini kullanmak amacıyla geliştirme ortamınızı ayarlama hakkında genel bilgileri Python için kurulum kılavuzu bölümünde bulabilirsiniz.
Paketler
Image Classifier, mediapipe pip paketinin görevidir. Bağımlılığı aşağıdaki komut dosyalarıyla yükleyebilirsiniz:
$ python -m pip install mediapipe
İçe Aktarımlar
Görüntü Sınıflandırı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 Image Classifier görevi, bu görevle uyumlu, eğitilmiş bir model gerektirir. Resim Sınıflandırıcı için eğitilmiş modeller hakkında daha fazla bilgi almak isterseniz göreve genel bakış Modeller bölümüne bakın.
Bir model seçip indirin ve ardından 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ı parametresinde 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ıştırma modu, görünen adlar yerel ayarı, maksimum sonuç sayısı, güven eşiği, kategori izin verilenler listesi ve reddetme listesi dahil olmak üzere 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.
Görüntü 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ı nasıl çalıştıracağı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 resimle birlikte kullanılmak üzere bir Resim Sınıflandırıcı oluşturmanın tam örneği 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çeneklerine sahiptir:
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 resimli girişler için mod. VİDEO: Bir videonun kodu çözülmüş karelerine yönelik mod. LIVE_STREAM: Kamera gibi giriş verilerini içeren bir canlı yayın modu. Bu modda, sonuçları eşzamansız olarak almak üzere 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 değer en şeklindedir. TensorFlow Lite Metadata Writer API'yi kullanarak özel modelin meta verilerine yerelleştirilmiş etiketler ekleyebilirsiniz |
Yerel ayar kodu | en |
max_results |
İsteğe bağlı olarak döndürülecek en yüksek puanlı sınıflandırma sonuçlarının isteğe bağlı maksimum sayısını ayarlar. < 0 ise mevcut tüm sonuçlar döndürülür. | Pozitif sayılar | -1 |
score_threshold |
Model meta verilerinde belirtilen eşiği (varsa) geçersiz kılan tahmin puanı eşiğini ayarlar. Bu değerin altındaki sonuçlar reddedilir. | Tüm kayan | Belirlenmedi |
category_allowlist |
İsteğe bağlı olarak izin verilen kategori adları listesini ayarlar. Boş değilse kategori adı bu grupta yer almayan 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ı hataya neden olur. |
Herhangi bir dize | Belirlenmedi |
category_denylist |
İzin verilmeyen kategori adlarının isteğe bağlı listesini ayarlar. Boş değilse kategori adı bu kümede yer alan sınıflandırma sonuçları filtrelenir. Yinelenen veya bilinmeyen kategori adları yoksayılır. Bu seçenek category_allowlist ile birlikte kullanılamaz ve her iki sonucun da kullanılması hataya neden olur. |
Herhangi bir dize | 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 çalıştırma 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 bir web kamerasından canlı yayın ise giriş karelerinizi sayı 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ş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 koşu modunuza karşılık gelen sınıflandırma işlevini çağırabilirsiniz. Image Classifier API, giriş görüntüsü veya çerçevesi 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 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ş görüntüsünü veya çerçevesini işlemeyi bitirene kadar geçerli iş parçacığını engeller.
- Canlı yayın modunda çalışırken Resim Sınıflandırıcı görevi mevcut ileti dizisini engellemez ancak hemen geri döner. Bir giriş çerçevesini işlemeyi her tamamladığında sınıflandırma sonucuyla birlikte sonuç işleyicisini ç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ş çerçevesini yoksayar.
Bir resimle birlikte kullanılmak üzere bir Resim Sınıflandırıcı oluşturmanın tam örneği için kod örneğine 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 giriş görüntüsü veya çerçevesi içindeki nesneler için olası kategorilerin listesini içeren bir ImageClassifierResult
nesnesi döndürür.
Aşağıda, bu görevden alınan çı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ç, şurada Kuş Sınıflandırıcı çalıştırılarak elde edildi:
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.