Ses sınıflandırması için temel bir uygulama oluşturma

1. Başlamadan önce

TensorFlow, çok amaçlı bir makine öğrenimi çerçevesidir. Bu model, buluttaki kümelerde büyük modelleri eğitmek veya telefonunuz gibi yerleşik bir sistemde yerel olarak çalıştırmak için kullanılabilir.

Bu codelab, bir Android cihazda ses sınıflandırma modeli çalıştırmak için TensorFlow Lite'ı kullanır.

Neler öğreneceksiniz?

  • Kullanıma hazır, önceden eğitilmiş bir makine öğrenimi modeli nasıl bulunur?
  • Gerçek zamanlı olarak kaydedilen seslerde ses sınıflandırması nasıl yapılır?
  • Model girişini ve işlem sonrası model çıkışını önceden işlemek için TensorFlow Lite Destek Kitaplığı'nı kullanma.
  • Sesle ilgili tüm işi yapmak için Ses Görev Kitaplığı'nı kullanma.

Derlemeniz istenen nedir?

Mikrofondan gelen sesleri gerçek zamanlı olarak tanımlamak için TensorFlow Lite ses tanıma modeli çalıştıran basit bir ses tanıma uygulaması

33af0fdb0a027fa8.png

Gerekenler

  • Android Studio'nun en yeni sürümü (v4.1.2+)
  • API 23'te Android sürümü bulunan fiziksel Android cihaz (Android 6.0)
  • Örnek kod
  • Kotlin'de Android geliştirmeyle ilgili temel bilgiler

2. Örnek kodu alın

Kodu İndirme

Bu codelab'in tüm kodunu indirmek için aşağıdaki bağlantıyı tıklayın:

İndirilen ZIP dosyasını paketten çıkarın. Bu, ihtiyaç duyacağınız tüm kaynaklarla bir kök klasörün (odml-pathways) paketini açar. Bu codelab için yalnızca audio_classification/codelab1/android alt dizinindeki kaynaklara ihtiyacınız olacaktır.

Not: Depoyu klonlayabilirsiniz:

git clone https://github.com/googlecodelabs/odml-pathways.git

audio_classification/codelab1/android deposundaki android alt dizini iki dizin içerir:

  • android_studio_folder.pngstarter - Bu codelab için geliştirdiğiniz başlangıç kodu.
  • android_studio_folder.pngSon: Tamamlanmış örnek uygulama için kod tamamlandı.

Başlangıç uygulamasını içe aktarın

Başlangıç uygulamasını Android Studio'ya aktararak başlayalım.

  1. Android Studio'yu açın ve Projeyi İçe Aktar (Gradle, Eclipse ADT vb.) seçeneğini belirleyin.
  2. Daha önce indirdiğiniz kaynak koddan starter klasörünü (audio_classification/codelab1/android/starter) açın.

7c0f27882a2698ac.png

Uygulamanızın tüm bağımlılıkları tarafından kullanılabileceğinden emin olmak için içe aktarma işlemi tamamlandığında projenizi gradle dosyalarıyla senkronize etmeniz gerekir.

  1. Android Studio araç çubuğundan Projeyi Gradle Dosyalarıyla Senkronize Et'i (b451ab2d04d835f9.png) seçin.

Starter uygulamasını çalıştırma

Projeyi Android Studio'ya aktardığınıza göre, uygulamayı ilk kez çalıştırmaya hazırsınız.

Android cihazınızı bilgisayarınıza USB üzerinden bağlayın ve Android Studio araç çubuğundaki Çalıştır'ı ( yürütün.png) tıklayın.

5518972c21705945.png

3. Önceden eğitilmiş bir model bulma

Ses Sınıflandırmayı yapmak için bir modele ihtiyacınız vardır. Önceden eğitilmiş bir modelle işe başlayın. Böylece, kendiniz eğitmek zorunda kalmazsınız.

Önceden eğitilmiş modelleri bulmak için TensorFlow Hub'ı (www.tfhub.dev) kullanırsınız.

91e39900ff58818c.png

Modeller alan adlarına göre kategorilere ayrılır. Şu anda ihtiyacınız olan tek şey Ses Sorunlu Alan Adları.

9d44d38c297bf3dc.png

Uygulamanız için YAMNet modeliyle etkinlik sınıflandırması yaparsınız.

YAMNet, ses dalga biçimini giriş olarak alan ve 521 ses etkinliğinin her biri için bağımsız tahminlerde bulunan bir ses etkinliği sınıflandırıcıdır.

yamnet/classize modeli, TensorFlow Lite'a zaten dönüştürülmüştür ve Ses için TFLite Görev Kitaplığı'nın, modelin mobil cihazlarda kullanımını kolaylaştırmak amacıyla etkinleştirildiği belirli meta verilere sahiptir.

65dc0f610eb27762.png

Doğru sekmeyi seçin: TFLite (yamnet/sınıflandırma/tflite) ve İndir'i tıklayın. Modelin meta verilerini en altta da görebilirsiniz.

cfb3cfeb310e1f51.png

Bu model dosyası (lite-model_yamnet_classification_tflite_1.tflite) bir sonraki adımda kullanılacaktır.

4. Yeni modeli temel uygulamaya aktarın

İlk adım, indirilen modeli önceki adımda uygulamanızın öğeleri klasörüne taşımaktır.

Android Studio'da proje gezgininde öğeler klasörünü sağ tıklayın.

7cca2c22ed8cf4c8.png

Seçenekler listesinin yer aldığı bir pop-up görürsünüz. Bunlardan biri, klasörü dosya sisteminizde açmak olacaktır. Mac'te bu, Finder'da Göster, Windows'da ise Gezgin'de Aç ve Ubuntu'da Dosyalarda Göster olur. İşletim sisteminize uygun olanı bulun ve seçin.

95e0eca881d35f6b.png

Sonra, indirdiğiniz modeli kopyalayın.

Bu işlemi yaptıktan sonra Android Studio'ya geri dönün. Dosyanızı assets klasöründe göreceksiniz.

703b1842fb09e893.png

5. Yeni modeli temel uygulamada yükleyin

Şimdi Yapılacaklar'ın bazılarını takip edecek ve önceki adımda projeye yeni eklediğiniz modelle ses sınıflandırmasını etkinleştireceksiniz.

Yapılacaklar listesini bulmayı kolaylaştırmak için Android Studio'da Görünüm > Araç Windows > TODO menüsüne gidin. Listenin olduğu bir pencere açılır. Bu listeyi tıklayarak doğrudan koda gidebilirsiniz.

build.gradle dosyasında (Modül sürümü) ilk görevi bulursunuz.

TODO 1, Android bağımlılıklarını eklemek içindir:

implementation 'org.tensorflow:tensorflow-lite-task-audio:0.2.0'

Geri kalan kod değişiklikleri MainActivity

TODO 2.1, sonraki adımlarda yüklenecek model adını içeren değişkeni oluşturur.

var modelPath = "lite-model_yamnet_classification_tflite_1.tflite"

TODO 2.2 sayesinde modelden gelen tahminleri kabul etmek için minimum eşik belirleyebilirsiniz. Bu değişken daha sonra kullanılacaktır.

var probabilityThreshold: Float = 0.3f

TODO 2.3, modeli öğeler klasöründen yükleyeceğiniz yerdir. Ses Görevi Kitaplığı'nda tanımlanan AudioClassifier sınıfı, modeli yüklemek için gerekli hazırlığı yapar ve çıkarım yapmanız için gerekli tüm yöntemleri sunar. Ayrıca, bir Ses Kaydedici oluşturmanıza da yardımcı olur.

val classifier = AudioClassifier.createFromFile(this, modelPath)

6. Ses yakala

Audio Tasks API'de, modelinizin beklediği uygun yapılandırmaya sahip bir ses kayıt cihazı (ör. Örnek Hızı, Bit Hızı, kanal sayısı) oluşturmanıza yardımcı olacak bazı yardımcı yöntemler bulunmaktadır. Böylece manuel olarak bulmanız ve ayrıca yapılandırma nesneleri oluşturmanız gerekmez.

TODO 3.1: Kaydı çıkarım için depolayacak tensor değişkeni oluşturun ve kaydedicinin biçim spesifikasyonunu oluşturun.

val tensor = classifier.createInputTensorAudio()

TODO 3.2: Önceki adımda modelin meta verileri tarafından tanımlanan ses kaydedici özelliklerini gösterir.

val format = classifier.requiredTensorAudioFormat
val recorderSpecs = "Number Of Channels: ${format.channels}\n" +
       "Sample Rate: ${format.sampleRate}"
recorderSpecsTextView.text = recorderSpecs

92e81894674a5b0.png

TODO 3.3: Ses kaydediciyi oluşturun ve kaydı başlatın.

val record = classifier.createAudioRecord()
record.startRecording()

Şu anda uygulamanız telefonunuzun mikrofonunda dinleniyor ancak hâlâ herhangi bir çıkarım yapmıyor. Bu sorunu bir sonraki adımda gidereceksiniz.

7. Çıkarımı modelinize ekleyin

Bu adımda, çıkarım kodunu uygulamanıza ekleyip ekranda göreceksiniz. Kod zaten yarım saniyede bir yürütülecek bir zamanlayıcı ileti dizisine sahip. Bu çıkarım, çalıştırılacak.

scheduleAtFixedRate yönteminin parametreleri, 500 milisaniyenin altındaki kodda yürütmenin başlatılması için ne kadar bekleneceği ve sonraki görev yürütme arasındaki süredir.

Timer().scheduleAtFixedRate(1, 500) {
...
}

TODO 4.1 Modeli kullanmak için kodu ekleyin. İlk önce kaydı bir ses tensörüne yükleyin ve sınıflandırıcıya iletin:

tensor.load(record)
val output = classifier.classify(tensor)

Daha iyi çıkarım sonuçları elde etmek için TODO 4.2'de, çok düşük olasılıklı sınıflandırmaları filtreleyebilirsiniz. Burada, önceki adımda (probabilityThreshold) oluşturulan değişkeni kullanacaksınız:

val filteredModelOutput = output[0].categories.filter {
   it.score > probabilityThreshold
}

TODO 4.3: Sonuçların okunmasını kolaylaştırmak için filtrelenmiş sonuçları içeren bir dize oluşturun:

val outputStr = filteredModelOutput.sortedBy { -it.score }
   .joinToString(separator = "\n") { "${it.label} -> ${it.score} " }

TODO 4.4 Kullanıcı arayüzünü güncelleyin. Bu çok basit uygulamada, sonuç yalnızca TextView'da gösteriliyor. Sınıflandırma, Ana İş Parçacığı üzerinde olmadığından bu güncellemeyi yapmak için bir işleyici kullanmanız gerekir.

runOnUiThread {
   textView.text = outputStr
}

Aşağıdakileri yapmak için gereken tüm kodu eklediniz:

  • Öğeler klasöründen modeli yükleyin
  • Doğru yapılandırmaya sahip ses kaydedici oluşturma
  • Devam eden çıkarım
  • En iyi sonuçları ekranda gösterin

Şimdi gereken tek şey uygulamayı test etmek.

8. Son uygulamayı çalıştırın

Ses sınıflandırma modelini uygulamaya entegre ettiğiniz için test edelim.

Android cihazınızı bağlayıp Android Studio araç çubuğundaki Çalıştır'ı (yürütün.png) tıklayın.

İlk çalıştırmada, uygulamaya ses kaydı izinleri vermeniz gerekir.

İzin verildikten sonra, uygulama başlangıçta telefonun mikrofonunu kullanır. Test etmek için YAMNet'in algıladığı sınıflardan biri konuşma olduğundan telefonun yakınında konuşmaya başlayın. Kolayca test edilebilen bir diğer sınıf da parmakla tutturmak veya alkış etmektir.

Ayrıca, bir köpek havlaması ve diğer olası etkinlikleri de tespit etmeyi deneyebilirsiniz (521). Tam liste için kaynak kodlarına göz atabilir veya doğrudan etiketler dosyasıyla meta verileri okuyabilirsiniz

33af0fdb0a027fa8.png

9. Tebrikler!

Bu codelab'de, TensorFlow Lite'ı kullanarak ses sınıflandırması için önceden eğitilmiş bir model bulmayı ve mobil uygulamanıza dağıtmayı öğrendiniz. TFLite hakkında daha fazla bilgi edinmek için diğer TFLite örneklerini inceleyin.

Ele aldığımız konular

  • Bir Android uygulamasına TensorFlow Lite modeli dağıtma.
  • TensorFlow Hub'da model bulma ve kullanma.

Sonraki Adımlar

  • Modeli kendi verilerinizle özelleştirin.

Daha Fazla Bilgi

Sorunuz mu var?

Sorun Bildir