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, Android uygulamalarıyla Ses Sınıflandırıcı'nın 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
MediaPipe Görevleri örnek kodu, Android için bir Ses Sınıflandırıcı uygulamasının basit bir uygulamasıdır. Örnek, sesleri sürekli olarak sınıflandırmak için fiziksel bir Android cihazın mikrofonunu kullanır ve sınıflandırıcıyı, cihazda depolanan ses dosyalarında da çalıştırabilir.
Uygulamayı kendi Android uygulamanız için başlangıç noktası olarak kullanabilir veya mevcut bir uygulamayı değiştirirken referans olarak kullanabilirsiniz. Ses Sınıflandırıcı örnek kodu GitHub'da barındırılmaktadır.
Kodu indirme
Aşağıdaki talimatlar, git komut satırı aracını kullanarak örnek kodun yerel bir kopyasını nasıl oluşturacağınızı göstermektedir.
Örnek kodu indirmek için:
- Aşağıdaki komutu kullanarak git deposunu klonlayın:
git clone https://github.com/google-ai-edge/mediapipe-samples
- İsteğe bağlı olarak, git örneğinizi az ödeme yöntemini kullanacak şekilde yapılandırın. Böylece yalnızca Ses Sınıflandırıcı örnek uygulamasının dosyalarına sahip olursunuz:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/audio_classifier/android
Örnek kodun yerel bir sürümünü oluşturduktan sonra projeyi Android Studio'ya aktarabilir ve uygulamayı çalıştırabilirsiniz. Talimatlar için Android için Kurulum Kılavuzu'na bakın.
Temel bileşenler
Aşağıdaki dosyalar, bu ses sınıflandırma örnek uygulaması için önemli kodu içerir:
- AudioClassifierHelper.kt - Ses sınıflandırıcıyı başlatır, modeli işler ve seçim yetkisi verir.
- RecorderFragment.kt - Canlı ses kaydı için kullanıcı arayüzünü ve kontrol kodunu oluşturur.
- LibraryFragment.kt - Ses dosyalarını seçmek için kullanıcı arayüzü ve kontrol kodu oluşturur.
- ProbabilitiesAdapter.kt - Sınıflandırıcının tahmin sonuçlarını işler ve biçimlendirir.
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 bilgiler için Android için kurulum kılavuzuna bakın.
Bağımlılıklar
Ses Sınıflandırıcı, com.google.mediapipe:tasks-audio
kitaplığını kullanır. Bu bağımlılığı, Android uygulaması geliştirme projenizin build.gradle
dosyasına ekleyin. Gerekli bağımlılıkları aşağıdaki kodla içe aktarın:
dependencies {
...
implementation 'com.google.mediapipe:tasks-audio:latest.release'
}
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.
Modeli seçip indirin ve ardından proje dizininizde depolayın:
<dev-project-root>/src/main/assets
Modelin kullandığı yolu belirtmek için BaseOptions.Builder.setModelAssetPath()
yöntemini kullanın. Bu yöntem, bir sonraki bölümde yer alan kod örneğinde ele alınmaktadır.
Ses Sınıflandırıcı örnek kodunda model, AudioClassifierHelper.kt
dosyasında tanımlanmıştır.
Görevi oluşturma
Görevi oluşturmak için createFromOptions
işlevini kullanabilirsiniz. createFromOptions
işlevi; çalıştırma modu, görünen adlar yerel ayarı, maksimum sonuç sayısı, güven eşiği ve kategori izin verilenler listesi veya 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 şu giriş verisi türlerini destekler: ses klipleri ve ses akışları. Bir görev oluştururken giriş verisi türünüze karşılık gelen çalışma 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
AudioClassifierOptions options = AudioClassifierOptions.builder() .setBaseOptions( BaseOptions.builder().setModelAssetPath("model.tflite").build()) .setRunningMode(RunningMode.AUDIO_CLIPS) .setMaxResults(5) .build(); audioClassifier = AudioClassifier.createFromOptions(context, options);
Ses akışı
AudioClassifierOptions options = AudioClassifierOptions.builder() .setBaseOptions( BaseOptions.builder().setModelAssetPath("model.tflite").build()) .setRunningMode(RunningMode.AUDIO_STREAM) .setMaxResults(5) .setResultListener(audioClassifierResult -> { // Process the classification result here. }) .build(); audioClassifier = AudioClassifier.createFromOptions(context, options);
Ses Sınıflandırıcı örnek kod uygulaması, kullanıcının işleme modları arasında geçiş yapmasını sağlar. Bu yaklaşım, görev oluşturma kodunu daha karmaşık hale
getirir ve sizin kullanım alanınıza uygun olmayabilir. Mod değiştirme kodunu AudioClassifierHelper
öğesinin initClassifier()
işlevinde görebilirsiniz.
Yapılandırma seçenekleri
Bu görev, Android uygulamaları için aşağıdaki yapılandırma seçeneklerine sahiptir:
Seçenek Adı | Açıklama | Değer Aralığı | Varsayılan Değer |
---|---|---|---|
runningMode |
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 |
displayNamesLocale |
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 |
maxResults |
İ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 |
scoreThreshold |
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 |
categoryAllowlist |
İ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, categoryDenylist ile birlikte kullanılamaz ve her iki sonucun da kullanılması hataya neden olur. |
Herhangi bir dize | Belirlenmedi |
categoryDenylist |
İ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 categoryAllowlist ile birlikte kullanılamaz ve her iki sonucun da kullanılması hataya neden olur. |
Herhangi bir dize | Belirlenmedi |
resultListener |
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 |
errorListener |
İsteğe bağlı bir hata işleyici ayarlar. | 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şi ön işlemesini yönetir.
Ancak, giriş ses verilerini Ses Sınıflandırıcı görevine iletmeden önce bir com.google.mediapipe.tasks.components.containers.AudioData
nesnesine dönüştürmeniz gerekir.
Ses klipleri
import com.google.mediapipe.tasks.components.containers.AudioData; // Load an audio on the user’s device as a float array. // Convert a float array to a MediaPipe’s AudioData object. AudioData audioData = AudioData.create( AudioData.AudioDataFormat.builder() .setNumOfChannels(numOfChannels) .setSampleRate(sampleRate) .build(), floatData.length); audioData.load(floatData);
Ses akışı
import android.media.AudioRecord; import com.google.mediapipe.tasks.components.containers.AudioData; AudioRecord audioRecord = audioClassifier.createAudioRecord(/* numChannels= */ 1, /* sampleRate= */ 16000); audioRecord.startRecording(); ... // To get a one second clip from the AudioRecord object: AudioData audioData = AudioData.create( 16000 /*sample counts per second*/); AudioData.AudioDataFormat.create(audioRecord.getFormat()), audioData.load(audioRecord)
Görevi çalıştırma
Çıkarımları tetiklemek için koşu modunuza karşılık gelen classify
işlevini çağırabilirsiniz. Audio Classifier API, giriş ses verilerinde tanınan ses etkinlikleri için olası kategorileri döndürür.
Ses klipleri
AudioClassifierResult classifierResult = audioClassifier.classify(audioData);
Ses akışı
// Run inference on the audio block. The classifications results will be available // via the `resultListener` provided in the `AudioClassifierOptions` when // the audio classifier was created. audioClassifier.classifyAsync(audioBlock, timestampMs);
Aşağıdakileri göz önünde bulundurun:
- Ses akışı modunda çalışırken, çıkarım için akış içindeki hangi ses verilerinin kullanıldığını izlemek üzere Ses Sınıflandırıcı görevine bir zaman damgası eklemeniz gerekir.
- Ses klipleri modelinde çalışırken, Ses Sınıflandırıcı görevi giriş sesini işlemeyi bitirene kadar mevcut ileti dizisini engeller. Kullanıcı arayüzü yanıtlarını engellemekten kaçınmak için işlemeyi bir arka plan iş parçacığında yürütün.
Ses klipleriyle Ses Sınıflandırıcı çalıştırmayla ilgili bir örnek görebilirsiniz. Kod örneğindeki AudioClassifierHelper
sınıfına bakın.
Sonuçları işleme ve görüntüleme
Bir çıkarım yaptıktan sonra Ses Sınıflandırıcı görevi, giriş sesindeki ses etkinlikleri için olası kategorilerin bir listesini döndürür. Aşağıdaki listede, bu görevden elde edilen çı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
Bir Android uygulamasında görev, bir ses etkinliğiyle ilgili tahminleri (kategori etiketi ve güven puanı dahil) temsil eden AudioClassifierResult
nesnelerinin listesini içeren bir ClassificationResult
döndürür.
Ses klipleri
// In the audio clips mode, the classification results are for the entire audio // clip. The results are timestamped AudioClassifierResult objects, each // classifying an interval of the entire audio clip that starts at // ClassificationResult.timestampMs().get(). for (ClassificationResult result : audioClassifierResult.classificationResults()) { // Audio interval start timestamp: result.timestampMs().get(); // Classification result of the audio interval. result.classifications(); }
Ses akışı
// In the audio stream mode, the classification results list only contains one // element, representing the classification result of the audio block that // starts at ClassificationResult.timestampMs in the audio stream. ClassificationResult result = audioClassifierResult.classificationResults().get(0); // The audio block start timestamp audioClassifierResult.timestampMs(); // Alternatively, the same timestamp can be retrieved from // result.timestampMs().get(); // Classification result. result.classifications();
Bu görevden döndürülen sınıflandırma sonuçlarının nasıl görüntüleneceğini, kod örneğinin ProbabilitiesAdapter
sınıfında görebilirsiniz.