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ı
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:
- starter - Bu codelab için geliştirdiğiniz başlangıç kodu.
- Son: 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.
- Android Studio'yu açın ve Projeyi İçe Aktar (Gradle, Eclipse ADT vb.) seçeneğini belirleyin.
- Daha önce indirdiğiniz kaynak koddan
starter
klasörünü (audio_classification/codelab1/android/starter
) açın.
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.
- Android Studio araç çubuğundan Projeyi Gradle Dosyalarıyla Senkronize Et'i () 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'ı ( ) tıklayın.
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.
Modeller alan adlarına göre kategorilere ayrılır. Şu anda ihtiyacınız olan tek şey Ses Sorunlu Alan Adları.
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.
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.
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.
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.
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.
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
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'ı () 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
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
- TensorFlow Lite dokümanları
- TensorFlow Lite Destek Kitaplığı
- TensorFlow Lite Görev Kitaplığı
- TensorFlow Hub belgeleri
- Google teknolojileriyle cihaz üzerinde makine öğrenimi