Python için ses sınıflandırma kılavuzu

MediaPipe Ses Sınıflandırıcı görevi, ses verileri üzerinde sınıflandırma gerçekleştirmenizi sağlar. Bu görevi eğitilmiş bir dizi kategoriden ses etkinliklerini tanımlamak için kullanabilirsiniz. Bu talimatlarda, Ses Sınıflandırıcı'nın Python ile nasıl kullanılacağı gösterilmektedir.

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

Ses Sınıflandırıcı için verilen örnek kod, size referans olması açısından bu görevin Python'da eksiksiz bir uygulamasını sunmaktadır. Bu kod, bu görevi test etmenize ve kendi ses sınıflandırıcınızı oluşturmaya başlamanıza yardımcı olur. Ses Sınıflandırıcı örnek kodunu Google Colab ile yalnızca web tarayıcınızı kullanarak görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz. Bu örnekle ilgili kaynak kodunu GitHub'da görüntüleyebilirsiniz.

Raspberry Pi için Ses 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ı kurmanın temel adımları açıklanmaktadır. Projelerinizi özel olarak Ses Sınıflandırıcı'yı kullanmak için kodlayın. 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

Ses Sınıflandırıcı, mediapipe pip paketinin görevidir. Bağımlılığı aşağıdaki komut dosyalarıyla yükleyebilirsiniz:

$ python -m pip install mediapipe

İçe Aktarımlar

Ses 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 audio

Model

MediaPipe Ses Sınıflandırıcı görevi, bu görevle uyumlu, eğitilmiş bir model gerektirir. Ses 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 Yamnet modelini kullanabilirsiniz.

model_path = '/absolute/path/to/lite-model_yamnet_classification_tflite_1.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.

Ses Sınıflandırıcı görevi, giriş olarak ses kliplerini ve ses akışlarını destekler. Görevi oluştururken giriş verisi türünüze karşılık gelen çalıştırma modunu belirtmeniz gerekir. Görevi nasıl oluşturacağınızı ve çıkarımı nasıl yapacağınızı görmek için giriş verisi türünüze karşılık gelen sekmeyi seçin.

Ses klipleri

AudioClassifier = mp.tasks.audio.AudioClassifier
AudioClassifierOptions = mp.tasks.audio.AudioClassifierOptions
AudioRunningMode = mp.tasks.audio.RunningMode
BaseOptions = mp.tasks.BaseOptions

options = AudioClassifierOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    max_results=5,
    running_mode=AudioRunningMode.AUDIO_CLIPS)

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

Ses akışı

AudioClassifier = mp.tasks.audio.AudioClassifier
AudioClassifierOptions = mp.tasks.audio.AudioClassifierOptions
AudioClassifierResult = mp.tasks.audio.AudioClassifierResult
AudioRunningMode = mp.tasks.audio.RunningMode
BaseOptions = mp.tasks.BaseOptions

def print_result(result: AudioClassifierResult, timestamp_ms: int):
    print(AudioClassifierResult result: {}’.format(result))

options = AudioClassifierOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    running_mode=AudioRunningMode.AUDIO_STREAM,
    max_results=5,
    result_callback=print_result)

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

Sesle kullanılmak üzere bir Ses Sınıflandırıcı oluşturmanın tam bir ö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. Ses Sınıflandırıcı'nın iki modu vardır:

AUDIO_CLIPS: Ses görevini bağımsız ses kliplerinde çalıştırma modu.

AUDIO_STREAM: Ses görevini mikrofon gibi bir ses akışında çalıştırma modu. Bu modda, sınıflandırma sonuçlarını eşzamansız olarak almak için bir işleyici ayarlamak üzere resultListener çağrılmalıdır.
{AUDIO_CLIPS, AUDIO_STREAM} AUDIO_CLIPS
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. [0,0, 1,0] 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 Ses Sınıflandırıcı, ses akışı modundayken sonuç işleyiciyi, sınıflandırma sonuçlarını eşzamansız olarak alacak şekilde ayarlar. Yalnızca çalıştırma modu AUDIO_STREAM olarak ayarlandığında kullanılabilir Yok Belirlenmedi

Verileri hazırlama

Ses Sınıflandırıcı, ses klipleriyle ve ses akışlarıyla çalışır. Görev; yeniden örnekleme, arabelleğe alma ve çerçeveleme dahil, veri girişini ön işlemeyle ilgilenir.

Girişinizi ses dosyası veya numpy dizisi olarak hazırlayın, ardından bir MediaPipe AudioData nesnesine dönüştürün. Giriş seslerinizi sayı dizileri olarak yüklemek için SciPy 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:

Ses klipleri

import numpy as np
from scipy.io import wavfile

AudioData = mp.tasks.components.containers.AudioData

sample_rate, buffer = wavfile.read('/path/to/audio.wav')
audio_data = AudioData.create_from_array(
    buffer.astype(float) / np.iinfo(np.int16).max, sample_rate)
    

Ses akışı

import numpy as np

AudioData = mp.tasks.components.containers.AudioData

# Read microphone data as np arrays, then call

audio_data = AudioData.create_from_array(
    buffer.astype(float) / np.iinfo(np.int16).max, sample_rate)
    

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ğırırsınız. Audio Classifier API, giriş ses arabelleğindeki ses etkinlikleri için olası kategorileri döndürür.

Ses klipleri

# Perform audio classification on the provided audio clip.
audio_classifier_result_list = classifier.classify(audio_data)
    

Ses akışı

# Send live audio data to perform audio classification.
# Results are sent to the `result_callback` provided in the `AudioClassifierOptions`
classifier.classify_async(audio_data, timestamp_ms)
    

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

  • Ses akışı modunda çalışırken Ses Sınıflandırıcı görevine, giriş ses verilerinin zaman damgasını da sağlamanız gerekir.
  • Ses klibi modelinde çalışırken, Ses Sınıflandırıcı görevi giriş sesini işlemeyi bitirene kadar geçerli iş parçacığını engeller.

Ses Sınıflandırıcı'yı ses klipleriyle çalıştırmayla ilgili daha kapsamlı bir örnek için kod örneğine bakın.

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

Çıkarım çalıştırıldığında, Ses Sınıflandırıcı görevi giriş sesindeki ses etkinlikleri için olası kategorilerin listesini içeren bir AudioClassifierResult nesnesi döndürür.

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

AudioClassifierResult:
  Timestamp in microseconds: 100
  ClassificationResult #0:
    Timestamp in microseconds: 100  
    Classifications #0 (single classification head):
      head index: 0
      category #0:
        category name: "Speech"
        score: 0.6
        index: 0
      category #1:
        category name: "Music"
        score: 0.2
        index: 1

Ses Sınıflandırıcı örnek kodu, bu 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.