Rumah  >  Artikel  >  Peranti teknologi  >  Cara menukar pertuturan kepada teks menggunakan Node.js

Cara menukar pertuturan kepada teks menggunakan Node.js

WBOY
WBOYke hadapan
2023-04-11 19:30:271776semak imbas

Penterjemah |. Li Rui

Pengulas |. Sun Shujuan

Artikel ini akan memberikan gambaran ringkas tentang teknologi pengecaman pertuturan dan aplikasi biasa, dan menunjukkan API pertuturan ke teks percuma. Boleh digunakan untuk menyalin audio dalam format fail MP3 dan WAV. Demo ini akan menyertakan arahan langkah demi langkah untuk memanggil API ini menggunakan contoh "Run Node.js Code".

Cara menukar pertuturan kepada teks menggunakan Node.js

Ikhtisar Teknologi Pengecaman Pertuturan

Orang ramai sering menganggap teknologi pengecaman pertuturan sebagai tambahan yang agak baharu kepada landskap teknologi kontemporari, dan itu hanya sebahagian daripada kebenaran. Teknologi pengecaman pertuturan telah wujud selama lebih daripada setengah abad, bermula dengan sistem pengecaman nombor/teks fungsi terhad yang dibangunkan oleh beberapa syarikat perintis pada awal 1950-an. Walaupun teknologi pengecaman pertuturan mempunyai sejarah yang panjang dan telah digunakan secara meluas dalam peranti pengguna pintar sepanjang dekad yang lalu, pengecaman pertuturan masih merupakan salah satu teknologi yang lebih abstrak di pasaran hari ini. Ini kerana pelbagai teknologi pengecaman pertuturan merangkumi bidang seperti sains komputer, linguistik pengiraan, dan matematik/statistik, dan memerlukan sejumlah besar input daripada setiap medan untuk mendapatkan hasil pertuturan ke teks yang tepat.

Pada tahap (sangat) tinggi, agar teknologi pengecaman pertuturan dapat melaksanakan tugas paling asasnya, fail audio yang diberikan mesti terlebih dahulu dipraproses untuk mengoptimumkan kualitinya. Ini kemudiannya dipecahkan kepada isyarat komponen yang lebih kecil dan diisih. Isyarat yang diisih ini mestilah cukup kecil supaya model matematik boleh memadankannya dengan fonem tertentu (bunyi khusus bahasa yang bergabung untuk mencipta perkataan; seperti bunyi "eeee" atau "ahhh"), yang membantu memadankan Frasa atau ayat itu dalam bahasa dibandingkan. Akhirnya, matlamat perkhidmatan pengecaman pertuturan adalah mudah: teka setepat mungkin perkataan yang digunakan dalam audio yang dirakam, dan terus menambah baik serta mengembangkan pangkalan data bahasanya sehingga tekaan mencapai tahap ketepatan yang boleh diterima.

Sistem tekaan maklumat yang kompleks dan terhad ini menjadikan perkhidmatan pengecaman pertuturan yang paling asas bergantung kepada bahasa dan dialek kerana ia bergantung pada kualiti audio. Variasi dalam bahasa, loghat, perbendaharaan kata dan kehadiran bunyi latar belakang semuanya mewujudkan sempadan yang sukar untuk diatasi oleh satu model pertuturan ke teks. Tambahan pula, kerumitan ini mencerminkan fakta asas bahawa perkhidmatan pengecaman pertuturan sangat intensif sumber, bergantung pada set data rujukan yang besar dan berkembang untuk perbandingan pertuturan, memerlukan kuasa pengkomputeran yang besar untuk menggunakan set data ini dengan berkesan. Bersama-sama, faktor-faktor ini menjadikan latihan model pertuturan-ke-teks baharu sebagai tugas yang sukar.

Aplikasi Pengecaman Pertuturan

Pengiktirafan pertuturan sebahagian besarnya disebabkan oleh beberapa inovasi di mana-mana dalam pasaran teknologi yang lebih besar, terutamanya penyimpanan data pengkomputeran awan hampir tak terhingga Dengan pertumbuhan penyelesaian, pengecaman pertuturan telah menjadi perkhidmatan pengguna yang cekap dan berguna yang kini dikenali orang ramai dalam kehidupan seharian mereka. Orang ramai boleh berkomunikasi dan mengadakan perbualan secara terus menggunakan telefon mudah alih, talian tetap dan peranti pejabat untuk menanya secara automatik maklumat yang mereka perlukan, merekod dan menyusun fikiran mereka untuk kegunaan kemudian, mendengar mesej teks dibaca dengan lantang dan banyak lagi.

Pada masa ini, aplikasi pengguna hanyalah puncak gunung ais aplikasi teknologi pengecaman pertuturan. Kemajuan dalam banyak proses saling berkaitan pengecaman pertuturan mewujudkan peluang untuk mengembangkan output transkripsi audio dan menggalakkan peningkatan bilangan aplikasi komersial untuk penukaran pertuturan ke teks. Terdapat banyak contoh sedemikian di sekeliling orang. Banyak platform mesyuarat maya kini menggunakan perkhidmatan pengecaman pertuturan untuk menyalin pembentangan pasukan (selalunya dalam masa nyata), dan teks yang terhasil boleh disimpan dengan mudah untuk sesiapa sahaja yang mungkin terlepas mesyuarat. Chatbots menggunakan pengecaman pertuturan untuk membantu orang ramai membuat pilihan pada telefon mereka dan audio yang ditranskripsi daripada perbualan ini boleh digunakan untuk perkara lain: untuk memaklumkan amalan perkhidmatan pelanggan yang lebih baik pada masa hadapan. Kuliah, temu bual, pembentangan dan penglibatan pengucapan lain yang mungkin dihadiri oleh orang ramai boleh dirakam dan ditranskripsikan melalui peranti peribadi untuk menghapuskan kerja menyalin nota secara manual. Sebagai contoh, transkripsi ini boleh diproses melalui model pemprosesan bahasa semula jadi (NLP) untuk mencari cerapan yang sebelum ini tidak dilihat (atau tidak didengar) daripada teks yang ditranskripsikan.

Perlu dinyatakan bahawa penyederhanaan kandungan yang berguna dan keupayaan SEO juga tersedia daripada perkhidmatan analitik pertuturan-ke-teks berskala – kali ini dalam persekitaran storan data perusahaan. Memandangkan kandungan yang tidak boleh dipercayai yang dimuat naik oleh kebanyakan pelanggan, transkripsi fail audio yang dimuat naik ke tapak web secara automatik boleh melaraskan bahasa fail audio induk untuk memastikan ia selamat untuk semua pendengar (mis. untuk melihat sama ada ia mengandungi bahasa yang sangat kontroversi, ucapan benci atau sebarang bentuk gangguan terhadap individu atau kumpulan). Ini mengurangkan beban kerja penyemak kandungan dengan ketara dan meningkatkan kecekapan mereka. Fail transkripsi yang sama ini juga boleh digunakan untuk menjana kata kunci yang berguna, menjadikan fail audio lebih mudah untuk mencari dan mendapatkan semula daripada pangkalan data yang besar.

Demo: CloudMersive Speech to Text API

Salah satu cara untuk memanfaatkan pengecaman pertuturan sebagai perkhidmatan adalah dengan memasukkan Cloudmersive Speech to Text API. API pada masa ini menyokong format MP3 atau WAV dan menggunakan model kecerdasan buatan pembelajaran mendalam untuk menyediakan transkripsi audio berketepatan tinggi. Parameter APInya sangat mudah, hanya memerlukan fail audio dan kunci API Cloudmersive (kunci API boleh diperolehi dengan mendaftar untuk akaun percuma di tapak webnya, yang menjana sehingga 800 panggilan API sebulan). Yang berikut menunjukkan cara membina panggilan API menggunakan coretan kod Node.js pelengkap.

Langkah pertama ialah memasang Node.js SDK. Ini boleh dilakukan dengan menjalankan arahan berikut:

<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">npm</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">install</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">cloudmersive</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">-</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">speech</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">-</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">api</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">-</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">client</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">--</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">save</span>

Sebagai alternatif, coretan ini boleh ditambahkan pada pakejnya.

<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"dependencies"</span>: {<br><span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"cloudmersive-speech-client"</span>: <span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"^1.1.5"</span><br>}

Selepas pemasangan selesai, anda boleh menggunakan blok kod berikut untuk membina panggilan API. Pada ketika ini, anda perlu memastikan anda mempunyai parameter berikut sedia:

(1) Fail audio MP3 atau WAV.

(2) Kunci API CloudMersive.

<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">CloudmersiveSpeechApiClient</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">require</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'cloudmersive-speech-api-client'</span>);<br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">defaultClient</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">CloudmersiveSpeechApiClient</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">ApiClient</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">instance</span>;<br><span style="color: rgb(106, 115, 125); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">// Configure API key authorization: Apikey</span><br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Apikey</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">defaultClient</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">authentications</span>[<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'Apikey'</span>];<br><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Apikey</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">apiKey</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'YOUR API KEY'</span>;<br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">apiInstance</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">new</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">CloudmersiveSpeechApiClient</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">RecognizeApi</span>();<br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">speechFile</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Buffer</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">from</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">fs</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">readFileSync</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"C:\temp\inputfile"</span>).<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">buffer</span>); <span style="color: rgb(106, 115, 125); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">// File | Speech file to perform the operation on.Common file formats such as WAV, MP3 are supported.</span><br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">callback</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">function</span>(<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">error</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">response</span>) {<br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">if</span> (<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">error</span>) {<br><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">console</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">error</span>(<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">error</span>);<br>} <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">else</span> {<br><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">console</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">log</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'API called successfully. Returned data: '</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">+</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>);<br>}<br>};<br><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">apiInstance</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">recognizeFile</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">speechFile</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">callback</span>);

Ini melengkapkan pembinaan API tanpa coretan kod selanjutnya. Panggilan API yang berjaya akan mengembalikan rentetan Textresult yang mengandungi hasil transkripsi API. Adalah penting untuk diingat bahawa kualiti audio dalam fail input akan memberi impak yang ketara ke atas keupayaan API untuk mencipta transkripsi yang tepat, jadi adalah disyorkan untuk pra-memproses dan mengoptimumkan kualiti audio sebanyak mungkin sebelum melaksanakan operasi ini.

Tajuk asal: Cara Memanfaatkan Ucapan-ke-Teks Dengan Node.js, pengarang: Brian O'Neill

Atas ialah kandungan terperinci Cara menukar pertuturan kepada teks menggunakan Node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam