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ında Android uygulamalarıyla Ses Sınıflandırıcı'nın nasıl kullanılacağı gösterilmektedir.
Ö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
MediaPipe Tasks örnek kodu, bir Ses Sınıflandırıcı'nın basit bir uygulamasıdır Android için uygulama. Örnekte, şu işlemler için fiziksel bir Android cihazdaki mikrofon kullanılmaktadır: sesleri sürekli olarak sınıflandırır ve sınıflandırıcıyı ses dosyalarında da çalıştırabilir cihazınızda depolanır.
Uygulamayı kendi Android uygulamanız için başlangıç noktası olarak kullanabilir veya buna başvurabilirsiniz mevcut bir uygulamada değişiklik yaparken. Ses Sınıflandırıcı örnek kodu, GitHub'a gidin.
Kodu indirme
Aşağıdaki talimatlarda, örneğin yerel bir kopyasını nasıl oluşturacağınız gösterilmektedir kodu oluşturmak için git komut satırı aracını kullanın.
Ö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 seyrek ödeme yöntemini kullanacak şekilde yapılandırın,
Böylece, yalnızca Ses Sınıflandırıcı örnek uygulamasına ilişkin dosyalara sahip olursunuz:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/audio_classifier/android
Örnek kodun yerel sürümünü oluşturduktan sonra projeyi içe aktarabilirsiniz. Android Studio'ya gidip uygulamayı çalıştırın. Talimatlar için Android için Kurulum Kılavuzu.
Temel bileşenler
Aşağıdaki dosyalar bu ses için önemli kodu içeriyor sınıflandırma örneği uygulaması:
- AudioClassifierHelper.kt - Ses sınıflandırıcıyı başlatır, model ve yetkiyi işler seçim.
- RecorderFragment.kt - Canlı ses kaydı için kullanıcı arayüzü ve kontrol kodu oluşturur.
- LibraryFragment.kt: Ses dosyalarının seçilmesine yönelik kullanıcı arayüzünü ve kontrol kodunu 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ı 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ı daha fazla bilgi için Android için kurulum kılavuzu.
Bağımlılıklar
Ses Sınıflandırıcı, com.google.mediapipe:tasks-audio
kitaplığını kullanır. Bunu ekle
dosyanızın build.gradle
dosyasına bağımlılığı
Android uygulama geliştirme projesi. Gerekli bağımlılıkları
şu kodu kullanın:
dependencies {
...
implementation 'com.google.mediapipe:tasks-audio:latest.release'
}
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ü.
Modeli seçin ve indirin, ardından proje dizininizde depolayın:
<dev-project-root>/src/main/assets
Yolu belirtmek için BaseOptions.Builder.setModelAssetPath()
yöntemini kullanın
modeli tarafından kullanılır. Bu yöntem,
bölümüne ekleyin.
Ses Sınıflandırıcı örnek kodu,
model, AudioClassifierHelper.kt
dosyası olarak kaydedebilirsiniz.
Görevi oluşturma
Görevi oluşturmak için createFromOptions
işlevini kullanabilirsiniz. İlgili içeriği oluşturmak için kullanılan
createFromOptions
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,
izin verilenler listesi veya ret listesi ekleyin. 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 şu giriş verisi türlerini destekler: ses klipleri ve ses akışları kullanılabilir. Hedefe uygun koşu modunu giriş veri türünüzü gözden geçirmelisiniz. Şuna karşılık gelen sekmeyi seçin: giriş veri türünüzü inceleyerek görevi nasıl oluşturacağınızı ve çıkarımda bulunacağınızı öğrenin.
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 yayını
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
farklı olabilir. Bu yaklaşım, görev oluşturma kodunu daha karmaşık hale
kullanım alanınıza uygun olmayabilir. Mod geçiş kodunu görebilirsiniz
initClassifier()
AudioClassifierHelper
Yapılandırma seçenekleri
Bu görev, Android 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 |
---|---|---|---|
runningMode |
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 |
displayNamesLocale |
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 |
maxResults |
İ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 |
scoreThreshold |
Ş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ı |
categoryAllowlist |
İ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 categoryDenylist ile birlikte kullanılamaz ve
her ikisi de hataya neden olur. |
Tüm dizeler | Ayarlanmadı |
categoryDenylist |
İ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.categoryAllowlist |
Tüm dizeler | Ayarlanmadı |
resultListener |
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ı |
errorListener |
İsteğe bağlı bir hata işleyici ayarlar. | Yok | Ayarlanmadı |
Verileri hazırlama
Ses Sınıflandırıcı, ses klipleri ve ses akışlarıyla çalışır. Görev
yeniden örnekleme, arabelleğe alma ve çerçeveleme dahil olmak üzere veri girişi ön işlemesini yönetir.
Ancak, giriş ses verilerini
com.google.mediapipe.tasks.components.containers.AudioData
nesnesini tanımlayın.
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 yayını
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
Koşu modunuza karşılık gelen classify
işlevini çağırarak şunları yapabilirsiniz:
çıkarımları tetikler. Audio Classifier API, olabilecek tüm kategoriler için
giriş ses verilerinde algılanan ses etkinlikleri.
Ses klipleri
AudioClassifierResult classifierResult = audioClassifier.classify(audioData);
Ses yayını
// 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 yayını modunda çalışırken ayrıca Hangi ses verilerini takip ettiğini belirten bir zaman damgası içeren Ses Sınıflandırıcı görevi bu akış çıkarım için kullanılmıştır.
- Ses klibi modelinde çalışırken Ses Sınıflandırıcı görevi, devam eder. Kullanıcı arayüzü yanıtlarının engellenmesini önlemek için arka plan ileti dizisi.
Ses klipleriyle Ses Sınıflandırıcı'nın çalıştırıldığına dair bir örnek görebilirsiniz.
AudioClassifierHelper
sınıf
kod örneği.
Sonuçları işleme ve görüntüleme
Bir çıkarım çalıştırdıktan sonra Ses Sınıflandırıcı görevi, mümkün olan giriş sesindeki sesli etkinliklere ilişkin kategorilerdir. Aşağıdaki giriş , bu görevdeki çıkış verilerinin bir örneğini gösterir:
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, şunları içeren bir ClassificationResult
döndürür:
AudioClassifierResult
nesneden oluşan bir liste
tüm sesli etkinlikleri, yani kategori etiketi ve güven puanı gibi bilgileri içerir.
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 yayını
// 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();
Sınıflandırmanın nasıl görüntüleneceğine dair
şunun ProbabilitiesAdapter
sınıfında bu görevden sonuç döndürüldü:
kod örneği.