>  기사  >  기술 주변기기  >  Node.js를 사용하여 음성을 텍스트로 변환하는 방법

Node.js를 사용하여 음성을 텍스트로 변환하는 방법

WBOY
WBOY앞으로
2023-04-11 19:30:271775검색

번역가 | Li Rui

리뷰어 | Sun Shujuan

이 기사에서는 음성 인식 기술 및 일반적인 응용 프로그램에 대한 간략한 개요를 제공하고 MP3 및 WAV로 오디오를 텍스트로 변환하는 데 사용할 수 있는 무료 음성-텍스트 API를 시연합니다. 파일 형식 . 이 데모에는 "Node.js 코드 실행" 예제를 사용하여 이 API를 호출하기 위한 단계별 지침이 포함되어 있습니다.

Node.js를 사용하여 음성을 텍스트로 변환하는 방법

음성 인식 기술 개요

사람들은 종종 음성 인식 기술을 현대 기술 환경에 상대적으로 새롭게 추가된 기술로 생각하는데, 이는 사실의 일부일 뿐입니다. 음성 인식 기술은 1950년대 초 소수의 선구적인 회사가 개발한 제한된 기능의 숫자/텍스트 인식 시스템을 시작으로 반세기 이상 동안 존재해 왔습니다. 음성 인식 기술은 오랜 역사를 가지고 있으며 지난 10년 동안 스마트 소비자 기기에 널리 사용되어 왔지만, 음성 인식은 오늘날에도 여전히 시장에서 가장 추상적인 기술 중 하나입니다. 다양한 음성인식 기술은 컴퓨터과학, 전산언어학, 수학/통계 등 다양한 분야에 걸쳐 있으며, 정확한 음성-텍스트 결과를 얻기 위해서는 각 분야에서 많은 양의 입력이 필요하기 때문입니다.

(매우) 높은 수준에서 음성 인식 기술이 가장 기본적인 작업을 수행하려면 먼저 특정 오디오 파일을 사전 처리하여 품질을 최적화해야 합니다. 그런 다음 이는 더 작은 구성 요소 신호로 분류되어 정렬됩니다. 이러한 정렬된 신호는 수학적 모델이 이를 특정 음소("eeee" 또는 "ahhh" 잡음과 같이 결합하여 단어를 생성하는 언어별 소리)와 일치시킬 수 있을 만큼 작아야 합니다. 언어가 비교됩니다. 궁극적으로 음성 인식 서비스의 목표는 간단합니다. 녹음된 오디오에 사용된 단어를 최대한 정확하게 추측하고, 추측이 허용 가능한 정확도 수준에 도달할 때까지 언어 데이터베이스를 지속적으로 개선하고 확장하는 것입니다.

이 복잡하고 본질적으로 제한된 정보 추측 시스템은 오디오 품질에 따라 가장 기본적인 음성 인식 서비스의 언어 및 방언도 종속되게 만듭니다. 언어, 억양, 어휘 및 배경 소음의 변화는 모두 단일 음성-텍스트 모델이 극복하기 어려운 경계를 만듭니다. 또한 이러한 복잡성은 음성 인식 서비스가 리소스 집약적이며 음성 비교를 위해 크고 증가하는 참조 데이터 세트에 의존하고 이러한 데이터 세트를 효과적으로 활용하려면 상당한 컴퓨팅 성능이 필요하다는 근본적인 사실을 반영합니다. 이러한 요인들로 인해 새로운 음성-텍스트 모델을 훈련하는 것은 어려운 작업이 됩니다.

음성 인식의 응용

대규모 기술 시장의 유비쿼터스 혁신, 특히 거의 무한에 가까운 클라우드 컴퓨팅 데이터 스토리지 솔루션의 성장으로 인해 음성 인식이 크게 발전했습니다. 이제 사람들이 인식하는 효율적이고 유용한 소비자 서비스가 되었습니다. 그들의 일상 생활에서. 사람들은 휴대전화, 유선전화, 사무실 기기를 사용해 직접 소통하고 대화를 나눌 수 있어 필요한 정보를 자동으로 쿼리하고, 나중에 사용할 수 있도록 생각을 녹음 및 정리하고, 문자 메시지를 소리내어 읽어주는 등의 작업을 할 수 있습니다.

현재 소비자 애플리케이션은 음성 인식 기술 애플리케이션의 빙산의 일각에 불과합니다. 음성 인식의 상호 관련된 여러 프로세스의 발전으로 오디오 전사 출력을 확장하고 음성-텍스트 변환을 위한 상용 응용 프로그램의 증가를 장려할 수 있는 기회가 만들어졌습니다. 사람들 주변에는 그러한 예가 많이 있습니다. 이제 많은 가상 회의 플랫폼에서는 음성 인식 서비스를 사용하여 팀 프레젠테이션을 기록하고(종종 실시간으로) 결과 텍스트를 회의에 참석하지 못한 사람을 위해 편리하게 저장할 수 있습니다. 챗봇은 음성 인식을 사용하여 사람들이 휴대폰에서 선택을 할 수 있도록 돕고, 이러한 대화에서 녹음된 오디오는 향후 더 나은 고객 서비스 관행을 알리는 데 사용될 수 있습니다. 사람들이 참석할 수 있는 강의, 인터뷰, 프리젠테이션 및 기타 연설 약속을 개인 장치를 통해 녹음하고 복사할 수 있으므로 수동으로 메모를 복사하는 수고를 덜 수 있습니다. 예를 들어, 이러한 전사는 자연어 처리(NLP) 모델을 통해 처리되어 전사된 텍스트에서 이전에 볼 수 없거나 들어본 적이 없는 통찰력을 찾을 수 있습니다.

확장 가능한 음성-텍스트 분석 서비스에서 유용한 콘텐츠 조정 및 SEO 기능도 사용할 수 있다는 점은 언급할 가치가 있습니다. 이번에는 엔터프라이즈 데이터 스토리지 환경입니다. 대부분의 클라이언트가 업로드한 콘텐츠는 신뢰할 수 없기 때문에 웹사이트에 업로드된 오디오 파일을 자동으로 텍스트로 변환하면 상위 오디오 파일의 언어를 쉽게 조정하여 모든 청취자에게 안전한지 확인할 수 있습니다(예: 논란이 많은 언어, 증오심 표현 또는 혐오 표현이 포함되어 있는지 확인). 개인이나 집단에 대한 모든 형태의 괴롭힘). 이는 콘텐츠 검토자의 작업량을 크게 줄이고 효율성을 높입니다. 이러한 동일한 전사 파일을 사용하여 유용한 키워드를 생성할 수도 있으므로 대규모 데이터베이스에서 오디오 파일을 더 쉽게 검색하고 검색할 수 있습니다.

데모: CloudMersive Speech to Text API

음성 인식을 서비스로 활용하는 한 가지 방법은 Cloudmersive Speech to Text API를 포함하는 것입니다. API는 현재 MP3 또는 WAV 형식을 지원하며 딥 러닝 인공 지능 모델을 사용하여 고정밀 오디오 전사를 제공합니다. API 매개변수는 매우 간단하여 오디오 파일과 Cloudmersive API 키만 필요합니다(API 키는 웹사이트에서 무료 계정에 가입하여 얻을 수 있으며, 월 최대 800개의 API 호출이 생성됩니다). 다음은 보완적인 Node.js 코드 조각을 사용하여 API 호출을 작성하는 방법을 보여줍니다.

첫 번째 단계는 Node.js SDK를 설치하는 것입니다. 다음 명령을 실행하면 됩니다:

<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>

또는 이 코드 조각을 패키지에 추가할 수도 있습니다.

<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>}

설치가 완료되면 다음 코드 블록을 사용하여 API 호출을 작성할 수 있습니다. 이 시점에서 다음 매개변수가 준비되어 있는지 확인해야 합니다.

(1) MP3 또는 WAV 오디오 파일.

(2) CloudMersive API 키.

<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>);

이렇게 하면 추가 코드 조각 없이 API 구성이 완료됩니다. 성공적인 API 호출은 API 전사 결과가 포함된 Textresult 문자열을 반환합니다. 입력 파일의 오디오 품질은 API의 정확한 텍스트 변환 기능에 큰 영향을 미치므로 이 작업을 구현하기 전에 오디오 품질을 최대한 사전 처리하고 최적화하는 것이 좋습니다.

원제: How to Leverage Speech-to-Text With Node.js, 작성자: Brian O'Neill

위 내용은 Node.js를 사용하여 음성을 텍스트로 변환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제