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 yapmanıza olanak tanır. Şunları yapabilirsiniz: bu görevi, eğitilmiş bir grup kategoriden ses etkinliklerini belirlemek için kullanın. Bu Talimatlar, Ses Sınıflandırıcı'nın Python ile nasıl kullanılacağını göstermektedir.

Özellikler, modeller ve yapılandırma seçenekleri hakkında daha fazla bilgi Bu görev hakkında daha fazla bilgi için Genel Bakış'ı inceleyin.

Kod örneği

Ses Sınıflandırıcı için örnek kod, bu görevi görebilir. Bu kod, görevi test etmenize ve kendi ses sınıflandırıcınızı oluşturmaya başladınız. Verileri görüntüleyebilir, çalıştırabilir ve Ses Sınıflandırıcı örnek kod Google Colab ile yalnızca web tarayıcınızı kullanarak. Şu öğenin kaynak kodunu görüntüleyebilirsiniz: bu örneği şurada bulabilirsiniz: GitHub'a gidin.

Raspberry Pi için Ses Sınıflandırıcı'yı uyguluyorsanız bkz. 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 Ses Sınıflandırıcı'yı kullanmak için özel olarak kod projeleri. Ş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

Ses 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

İçe aktarılanlar

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örevi görebilir. Ses Sınıflandırıcı için eğitilmiş mevcut 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 Yamnet modeli.

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

Ses Sınıflandırıcı görevi, giriş olarak ses kliplerini ve ses akışlarını destekler. Siz geçerli olduğunda giriş verisi türünüze karşılık gelen çalışma modunu görevi oluşturmayı öğrendiniz. Görmek için giriş verisi türünüze karşılık gelen sekmeyi seçin nasıl oluşturacağınızı ve çıkarımda bulunacağınızı öğreneceksiniz.

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 yayını

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 kullanmak üzere Ses Sınıflandırıcı oluşturmayla ilgili 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. Ses Sınıflandırıcı'nın iki modu vardır:

. AUDIO_CLIPS: Bağımsız ses kliplerinde ses görevini çalıştırma modu.
.
. AUDIO_STREAM: Ses görevinin mikrofon gibi bir ses akışında çalıştırılması modu. Bu modda, resultListener, sınıflandırma sonuçlarını almak üzere bir dinleyici ayarlamak için çağrıldı eşzamansız olarak ayarlayabilirsiniz.
{AUDIO_CLIPS, AUDIO_STREAM} AUDIO_CLIPS
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. [0,0, 1,0] 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 Ses Sınıflandırıcı ses akışında olduğunda eşzamansız olarak yatırım yapmanız önemlidir. Yalnızca koşu modu AUDIO_STREAM olarak ayarlandığında kullanılabilir Yok Ayarlanmadı

Verileri hazırlama

Ses Sınıflandırıcı, ses klipleri ve ses akışlarıyla çalışır. Görev, projenin yürütülmesi sırasında yeniden örnekleme, arabelleğe alma ve çerçeveleme dahil olmak üzere veri girişi ön işlemesi.

Girişinizi ses dosyası veya Numpy dizisi olarak hazırlayın ve daha sonra MediaPipe AudioData nesnesi. Şunun gibi harici bir kitaplık kullanabilirsiniz: Giriş seslerinizi numpy diziler olarak yüklemek için SciPy.

Aşağıdaki örneklerde verilerin işlenmek üzere nasıl hazırlanacağı açıklanır mevcut veri türlerinin her biri:

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 yayını

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

Tetikleyicinin etkinleşmesi için koşu modunuza karşılık gelen sınıflandırma işlevini çıkarımlar. Audio Classifier API, ses için olası kategorileri döndürür. etkinlikler olduğunda.

Ses klipleri

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

Ses yayını

# 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 yayını modunda çalışırken ayrıca Ses Sınıflandırıcı görevi, giriş ses verilerinin zaman damgasıdır.
  • Ses klibi modelinde çalışırken Ses Sınıflandırıcı görevi, iş parçacığı, giriş sesini işlemeyi bitirene kadar devam eder.

Ses klipleriyle Ses Sınıflandırıcı'yı çalıştırmaya ilişkin daha kapsamlı 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, Ses Sınıflandırıcı görevi bir Olası kategorilerin listesini içeren AudioClassifierResult nesnesi ses etkinliklerini kullanın.

Aşağıda, bu görevdeki çı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, sınıflandırmanın nasıl görüntüleneceğini gösterir. bu görevden döndürülen sonuçlar için kodu örnek inceleyebilirsiniz.