Malay (Melayu) translation by Kaustina Nurul Ilmi (you can also view the original English article)
Aplikasi yang benar-benar memahami bahasa asli adalah sesuatu yang peminat sci-fi, programmer, dan penyelidik AI telah impikan selama beberapa dekad. Hari ini, berkat kemajuan besar dalam teknologi pembelajaran mesin, mimpi itu lebih dekat dari sebelumnya untuk menjadi kenyataan. Lebih teruk lagi, awan berasaskan perkhidmatan seperti Google Cloud Machine Learning telah menjadikan teknologi tersebut tersedia secara percuma untuk digunakan semua orang.
Dalam tutorial ini, anda akan belajar cara menggunakan dua API yang berorientasi alam yang kuat yang ditawarkan oleh Google Cloud Machine Learning platform: API Speech Cloud dan Cloud Language API Natural . Dengan menggunakannya bersama-sama, Anda dapat membuat aplikasi yang dapat menangani percakapan dalam banyak bahasa yang digunakan secara luas.
Prasyarat
Untuk mengikuti, Anda perlu:
- Android Studio 2.2 atau lebih tinggi
- Akaun Platform Awan Google
- Peranti yang menggunakan Android 4.4 atau lebih tinggi
1.Mengapa Menggunakan API ini?
Aplikasi yang boleh memproses ucapan mesti mempunyai keupayaan berikut:
- Ia mesti dapat mengekstrak kata-kata individu dari data audio mentah.
- Ia mesti dapat membuat tekaan berpendidikan mengenai hubungan tatabahasa antara kata-kata yang telah diekstrak.
Ia mesti dapat membuat tekaan berpendidikan mengenai hubungan tatabahasa antara kata-kata yang telah diekstrak.
Fungsi API Ucapan Awan sebagai pengenal ucapan yang canggih yang dapat menerjemahkan ucapan dengan tepat di lebih daripada 80 bahasa. Ia juga boleh mengendalikan aksen serantau dan keadaan yang bising.
Pada nota yang sama, API Bahasa Asli Awan adalah sistem pemprosesan bahasa yang boleh, dengan ketepatan hampir manusia, menentukan peranan perkataan dalam kalimat yang diberikan kepadanya. Pada masa ini ia menyokong sepuluh bahasa, dan juga menawarkan analisis entiti dan sentimen.
2. Mengaktifkan API
Sebelum menggunakan API Ucapan dan Bahasa Semula Jadi, anda mesti mengaktifkannya dalam Konsol Awan Google. Oleh itu, pergi ke konsol dan navigasi ke Pengurus API> Perpustakaan .

Untuk mengaktifkan Ucapan API, klik pautan API Ucapan di bahagian Pembelajaran Mesin Awan Google . Pada halaman seterusnya yang terbuka, tekan butang Aktifkan .

Tekan butang belakang penyemak imbas anda untuk kembali ke halaman sebelumnya.
Kali ini, aktifkan API Bahasa Semula Jadi dengan mengklik pautan API Bahasa Semula Jadi dan menekan butang Dayakan pada halaman seterusnya.

Anda memerlukan kunci API semasa berinteraksi dengan API. Jika anda belum memilikinya, buka tab Kredensial , tekan butang Bukti kelayakan , dan pilih kekunci API .
Kini anda akan melihat pop timbul yang memaparkan kunci API anda. Perhatikan supaya anda dapat menggunakannya kemudian.

3. Konfigurasikan Projek Anda
Kedua-dua API berasaskan JSON dan titik akhir REST boleh berinteraksi langsung dengan mana-mana perpustakaan rangkaian. Bagaimanapun, anda boleh menyimpan banyak masa - dan juga menulis kod yang lebih mudah dibaca - dengan menggunakan perpustakaan Google API Pelanggan yang tersedia kepada mereka. Jadi buka fail build.gradle dari modul app
projek anda dan tambahkan kebergantungan compile
berikut ke dalamnya:
compile 'com.google.api-client:google-api-client-android:1.22.0' compile 'com.google.apis:google-api-services-speech:v1beta1-rev336-1.22.0' compile 'com.google.apis:google-api-services-language:v1beta2-rev6-1.22.0' compile 'com.google.code.findbugs:jsr305:2.0.1'
Di samping itu, kami akan melakukan beberapa operasi fail I / O dalam tutorial ini. Untuk memudahkan ini, tambah kebergantungan compile
untuk perpustakaan IO Commons .
compile 'commons-io:commons-io:2.5'
Akhirnya, jangan lupa untuk meminta kebenaran INTERNET
dalam fail AndroidManifest.xml . Tanpa itu, aplikasi anda tidak akan dapat menyambung ke pelayan Google.
<uses-permission android:name="android.permission.INTERNET"/>
4. Menggunakan API Ucapan Awan
Ia tidak mengatakan bahawa API Speech Cloud menjangkakan data audio sebagai salah satu inputnya. Oleh itu, sekarang kami akan membuat aplikasi Android yang boleh menyalin fail audio.
Untuk memastikannya mudah, kami hanya akan menyalin fail FLAC, fail yang menggunakan format pengekod Audio Audio Lossless Percuma. Anda mungkin sudah mempunyai fail sedemikian pada peranti anda. Jika tidak, saya cadangkan anda memuat turun beberapa dari Wikimedia Commons .
Langkah 1: Buat Layout
Tata letak aplikasi kami akan mempunyai widget Button
yang pengguna boleh mengetuk untuk memaparkan pemilih fail, antara muka
di mana mereka boleh menyemak imbas dan memilih fail audio yang
tersedia pada peranti mereka.
Susun atur juga akan mempunyai widget TextView
untuk memaparkan transkrip fail audio yang dipilih. Dengan cara ini, tambahkan kod berikut ke susun atur aktiviti anda fail XML:
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="" android:id="@+id/speech_to_text_result" android:textSize="18sp" android:layout_alignParentTop="true"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:id="@+id/browse_button" android:text="Browse"/>
Langkah 2: Buat Pemilih Fail
Antara muka pemilih fail mesti dipaparkan apabila pengguna menekan butang yang kami buat dalam langkah sebelumnya, jadi OnClickListener
objek OnClickListener dengannya. Sebelum anda melakukan ini, pastikan anda memulakan butang menggunakan kaedah findViewById()
.
Button browseButton = (Button)findViewById(R.id.browse_button); browseButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // More code here } });
Dengan
Rangka Kerja Akses Simpanan Android, yang tersedia pada peranti yang
menjalankan API tahap 19 atau lebih tinggi, membuat pemilih fail hanya
memerlukan sedikit usaha. Apa yang perlu anda lakukan ialah mencipta maksud ACTION_GET_CONTENT
dan meneruskannya ke kaedah startActivityForResult()
Opsyenal,
anda boleh mengehadkan pemetik fail sahaja untuk memaparkan fail FLAC
dengan melewati jenis MIME yang sepadan dengan kaedah setType()
objek Intent
.
Intent filePicker = new Intent(Intent.ACTION_GET_CONTENT); filePicker.setType("audio/flac"); startActivityForResult(filePicker, 1);
Output dari pemetik fail akan menjadi objek Intent
lain yang mengandungi URI fail terpilih pengguna. Untuk dapat mengaksesnya, anda mesti menggantikan kaedah onActivityResult()
kelas Activity
anda.
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(resultCode == RESULT_OK) { final Uri soundUri = data.getData(); // More code here } }
Langkah 3: Kodkan Fail
API Ucapan Awan menjangkakan data audio berada dalam bentuk rentetan Base64. Untuk menghasilkan rentetan seperti itu, anda boleh membaca kandungan fail yang dipilih pengguna ke dalam array byte
dan lulus ke kaedah utiliti encodeBase64String()
ditawarkan oleh perpustakaan Google API Pelanggan.
Walau bagaimanapun, pada masa ini anda hanya mempunyai URI fail yang dipilih, bukan jalan mutlak. Itu bermakna, untuk dapat membaca fail, anda mesti melengkapkan URI terlebih dahulu. Anda boleh melakukan ini dengan menyampaikannya kepada kaedah openInputStream()
kaedah resolver kandungan aktiviti anda. Selepas anda mempunyai akses kepada aliran input dari fail, anda boleh
lulus ke kaedah toByteArray()
kelas IOUtils
untuk menukarnya kepada
array byte. Kod berikut menunjukkan cara anda:
AsyncTask.execute(new Runnable() { @Override public void run() { InputStream stream = getContentResolver() .openInputStream(soundUri); byte[] audioData = IOUtils.toByteArray(stream); stream.close(); String base64EncodedData = Base64.encodeBase64String(audioData); // More code here } }
Seperti yang anda lihat dalam kod di atas, kami menggunakan thread baru untuk menjalankan semua operasi I / O. Melakukannya adalah penting untuk memastikan bahawa UI aplikasi tidak mengalami proses pembekuan.
Langkah 4: Main Fail
Pada pendapat saya, memainkan fail bunyi yang sedang ditranskripsikan, apabila ia ditranskripsikan, adalah idea yang baik. Ia tidak memerlukan banyak usaha, dan ia meningkatkan pengalaman pengguna.
Anda boleh menggunakan kelas MediaPlayer
untuk memainkan fail bunyi. Setelah anda mengarahkannya ke fail URI menggunakan kaedah setDataSource()
, anda mesti memanggil kaedah prepare()
untuk menyediakan pemain pada masa yang sama. Apabila pemain sudah bersedia, anda boleh memanggil kaedah start()
untuk mula memainkan fail.
Di samping itu, anda mesti ingat untuk melepaskan sumber pemain selepas selesai memainkan fail itu. Untuk melakukan ini, tetapkan objek OnCompletionListener
kepadanya dan panggil kaedah release()
. Kod berikut menunjukkan cara anda:
MediaPlayer player = new MediaPlayer(); player.setDataSource(MainActivity.this, soundUri); player.prepare(); player.start(); // Release the player player.setOnCompletionListener( new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mediaPlayer) { mediaPlayer.release(); } });
Langkah 5: Segerakkan Fail Transkripsi
Pada ketika ini, kami boleh menghantar data audio yang dikodkan oleh Base64 kepada API Ucapan Awan untuk menyalinnya. Tetapi pertama sekali, saya cadangkan anda menyimpan kunci API yang anda buat sebelum ini sebagai pembolehubah anggota kelas Activity
anda.
private final String CLOUD_API_KEY = "ABCDEF1234567890";
Untuk berkomunikasi dengan API Ucapan Awan, anda mesti membuat objek Speech
menggunakan contoh Speech.Builder
. Sebagai hujah, pembina menjangkakan kilang HTTP dan kilang JSON. Di samping itu, untuk memastikan bahawa kunci API disertakan dalam
setiap permintaan HTTP ke API, anda mesti mengaitkan objek
SpeechRequestInitializer
dengan pengarang dan meneruskan kuncinya.
Kod berikut mencipta objek Speech
menggunakan kelas AndroidJsonFactory
sebagai kilang JSON dan kelas NetHttpTransport
sebagai pengangkutan HTTP:
Speech speechService = new Speech.Builder( AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), null ).setSpeechRequestInitializer( new SpeechRequestInitializer(CLOUD_API_KEY)) .build();
API Ucapan Awan mesti diberitahu bahasa apa yang mengandungi fail audio. Anda boleh melakukan ini dengan membuat objek RecognitionConfig
dan memanggil kaedah setLanguageCode()
. Inilah caranya anda mengkonfigurasinya untuk menulis hanya Bahasa Inggeris Amerika:
RecognitionConfig recognitionConfig = new RecognitionConfig(); recognitionConfig.setLanguageCode("en-US");
Di samping itu, rentetan yang dikodkan Base64 mesti dibungkus di objek RecognitionAudio
sebelum ia boleh digunakan oleh API.
RecognitionAudio recognitionAudio = new RecognitionAudio(); recognitionAudio.setContent(base64EncodedData);
Seterusnya, menggunakan objek RecognitionConfig
dan RecognitionConfig
, anda mesti membuat objek SyncRecognizeRequest
. Seperti namanya, ini membolehkan anda membuat permintaan HTTP untuk menyalin data audio serentak. Selepas objek dicipta, anda boleh menyebarkannya sebagai hujah kepada kaedah syncrecognize()
dan memanggil Speech.SpeechOperations.Syncrecognize
kaedah Speech.SpeechOperations.Syncrecognize execute() untuk benar-benar melaksanakan permintaan HTTP.
Nilai yang dikembalikan dari kaedah SyncRecognizeResponse execute()
adalah objek SyncRecognizeResponse
, yang mungkin mengandungi beberapa transkrip alternatif. Buat masa ini, kami akan menggunakan alternatif pertama sahaja.
// Create request SyncRecognizeRequest request = new SyncRecognizeRequest(); request.setConfig(recognitionConfig); request.setAudio(recognitionAudio); // Generate response SyncRecognizeResponse response = speechService.speech() .syncrecognize(request) .execute(); // Extract transcript SpeechRecognitionResult result = response.getResults().get(0); final String transcript = result.getAlternatives().get(0) .getTranscript();
Akhirnya, untuk memaparkan transkrip kepada pengguna, anda boleh meneruskannya ke widget TextView
.
Sudah tentu, kerana perubahan kepada antara muka pengguna mesti selalu
berlaku pada thread UI, pastikan anda melakukan ini selepas memanggil
kaedah aktiviti runOnUiThread()
.
runOnUiThread(new Runnable() { @Override public void run() { TextView speechToTextResult = (TextView)findViewById(R.id.speech_to_text_result); speechToTextResult.setText(transcript); } });
Anda kini boleh menjalankan aplikasi anda, pilih fail FLAC yang mengandungi ucapan dalam Bahasa Inggeris Amerika, dan lihat API Ucapan Awan yang menghasilkan transkrip untuknya.
Perlu menyebut bahawa API Ucapan Awan hanya boleh memproses fail audio satu saluran pada masa ini. Jika anda menghantar fail dengan beberapa saluran di sana, anda akan mendapat respons ralat.
5. Menggunakan API Bahasa Asli Awan
Setelah kami mempunyai transkrip, kami dapat meneruskannya ke API Bahasa Semula Jadi Awan untuk menganalisisnya. Untuk memastikan tutorial ini pendek, kami hanya akan menjalankan analisis entiti dan sentimen pada transkrip. Dalam erti kata lain, kita akan menentukan semua entiti yang disebut dalam transkrip, seperti orang, tempat, dan profesi, dan juga mengetahui sama ada sentimen keseluruhan adalah negatif, neutral atau positif.
Langkah 1: Kemas kini Tata Letak
Untuk membolehkan pengguna memulakan analisis, susun atur kami mesti mengandungi widget Button
lain. Oleh itu, tambah kod berikut untuk fail XML aktiviti anda:
<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@+id/browse_button" android:id="@+id/analyze_button" android:text="Analyze"/>
Langkah 2: Transkripsi Annotation
REST API Language Natural Cloud menawarkan pilihan kemudahan yang disebut annotateText yang membolehkan anda menjalankan kedua-dua sentimen entiti dan analisis pada dokumen dengan hanya satu permintaan HTTP. Kami akan menggunakannya untuk menganalisis transkrip kami.
Kerana analisis mesti bermula apabila pengguna menekan butang yang kami buat pada langkah sebelumnya, tambahkan OnClickListener
kepadanya.
Button analyzeButton = (Button)findViewById(R.id.analyze_button); analyzeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // More code here } });
Untuk berinteraksi dengan API menggunakan perpustakaan Google API Pelanggan, anda mesti membuat objek CloudNaturalLanguage
menggunakan kelas CloudNaturalLanguage.Builder
. Pembina juga menjangka pengangkutan HTTP dan kilang JSON.
Di samping itu, dengan menetapkan contoh CloudNaturalLanguageRequestInitializer
ke dalamnya, anda boleh memaksanya untuk memasukkan kunci API anda dalam semua permintaannya.
final CloudNaturalLanguage naturalLanguageService = new CloudNaturalLanguage.Builder( AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), null ).setCloudNaturalLanguageRequestInitializer( new CloudNaturalLanguageRequestInitializer(CLOUD_API_KEY) ).build();
Semua teks yang anda mahu analisa menggunakan API mesti diletakkan di dalam objek Document
. Objek Document
juga mesti mengandungi maklumat konfigurasi, seperti
bahasa teks dan sama ada ia diformat sebagai teks biasa atau HTML. Oleh
itu, tambahkan kod berikut:
String transcript = ((TextView)findViewById(R.id.speech_to_text_result)) .getText().toString(); Document document = new Document(); document.setType("PLAIN_TEXT"); document.setLanguage("en-US"); document.setContent(transcript);
Seterusnya, anda mesti mencipta Features
Ciri yang menentukan ciri-ciri yang anda mahu analisa. Kod berikut menunjukkan cara untuk membuat objek Features
yang mengatakan bahawa anda mahu mengekstrak entiti dan menjalankan analisis sentimen sahaja.
Features features = new Features(); features.setExtractEntities(true); features.setExtractDocumentSentiment(true);
Anda kini boleh menggunakan objek Document
dan Features
untuk menyusun objek AnnotateTextRequest
, yang boleh diteruskan ke kaedah annotateText()
untuk membuat objek AnnotateTextResponse
.
final AnnotateTextRequest request = new AnnotateTextRequest(); request.setDocument(document); request.setFeatures(features); AsyncTask.execute(new Runnable() { @Override public void run() { AnnotateTextResponse response = naturalLanguageService.documents() .annotateText(request).execute(); // More code here } }
Perhatikan bahawa kami menjana respons pada thread baru kerana operasi rangkaian tidak dibenarkan pada thread UI.
Anda boleh mengeluarkan senarai entiti dari objek AnnotateTextResponse
dengan memanggil kaedah getEntities()
. Begitu juga, anda boleh mengekstrak sentimen transkrip keseluruhan dengan memanggil kaedah getDocumentSentiment()
. Untuk mendapatkan skor sentimen sebenar, anda juga perlu memanggil kaedah getScore()
, yang mengembalikan float
.
Seperti yang anda jangkakan, skor sentimen adalah sifar, iaitu sentimen bermakna neutral, skor lebih besar daripada sifar bermakna sentimen positif, dan skor kurang daripada sifar bermakna sentimen negatif.
Apa yang anda lakukan dengan senarai entiti dan skor sentimen, sudah tentu terpulang kepada anda. Buat masa ini, mari kita tunjukkan kedua-duanya menggunakan contoh AlertDialog
.
final List<Entity> entityList = response.getEntities(); final float sentiment = response.getDocumentSentiment().getScore(); runOnUiThread(new Runnable() { @Override public void run() { String entities = ""; for(Entity entity:entityList) { entities += "\n" + entity.getName().toUpperCase(); } AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) .setTitle("Sentiment: " + sentiment) .setMessage("This audio file talks about :" + entities) .setNeutralButton("Okay", null) .create(); dialog.show(); } });
Dengan kod di atas, skor sentimen akan dipaparkan dalam tajuk, dan senarai entiti akan dipaparkan di dalam badannya.
Jika anda menjalankan aplikasi sekarang, anda harus dapat menganalisis kandungan fail audio, dan juga menyalinnya.
Kesimpulannya
Anda kini tahu cara menggunakan Ucapan Awan dan API Bahasa Semula Awan bersama dengan apl Android yang hanya boleh menterjemahkan fail audio tetapi juga menjalankan entiti dan analisis sentimen di atasnya. Dalam tutorial ini, anda juga belajar bagaimana untuk bekerja dengan Rangka Akses Akses Android dan perpustakaan Google Client API.
Google telah kerap menambahkan ciri-ciri baru dan menarik - bersama-sama dengan sokongan untuk lebih banyak bahasa - untuk API kedua-duanya. Untuk terus mengemaskini tentang mereka, sila rujuk dokumentasi rasmi.
Dan semasa anda di sini, lihat beberapa jawatan lain kami di perkhidmatan awan aplikasi mudah alih dan pembelajaran mesin!
Envato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post