>  기사  >  백엔드 개발  >  Python을 사용하여 Linux에서 음성 인식 기능을 구현하는 방법

Python을 사용하여 Linux에서 음성 인식 기능을 구현하는 방법

WBOY
WBOY앞으로
2023-05-11 08:04:051487검색

음성 인식 작동 원리 소개

음성 인식은 1950년대 초 Bell Labs에서 수행된 연구에서 시작되었습니다. 초기 음성 인식 시스템은 화자 한 명과 약 12개 단어의 어휘만 인식할 수 있었습니다. 현대 음성 인식 시스템은 여러 화자를 인식하는 데 큰 발전을 이루었으며 여러 언어를 인식하는 대규모 어휘를 보유하고 있습니다.
음성 인식의 첫 번째 부분은 물론 음성입니다. 마이크를 통해 음성은 물리적인 소리를 전기 신호로 변환한 다음 아날로그-디지털 변환기를 통해 데이터로 변환합니다. 일단 디지털화되면 여러 모델을 적용하여 오디오를 텍스트로 변환할 수 있습니다.
대부분의 최신 음성 인식 시스템은 HMM(Hidden Markov Model)을 사용합니다. 작동 원리는 다음과 같습니다. 음성 신호는 매우 짧은 시간(예: 10밀리초)의 고정 프로세스, 즉 통계적 특성이 시간에 따라 변하지 않는 프로세스로 근사화될 수 있습니다.
많은 최신 음성 인식 시스템은 HMM 인식 전에 신경망을 사용하여 특징 변환 및 차원 축소 기술을 통해 음성 신호를 단순화합니다. 음성 활동 감지기(VAD)를 사용하여 오디오 신호를 음성만 포함할 수 있는 부분으로 줄일 수도 있습니다.
다행히 Python 사용자의 경우 일부 음성 인식 서비스는 API를 통해 온라인으로 제공되며 대부분 Python SDK도 제공합니다.

올바른 Python 음성 인식 패키지 선택

PyPI에는 기성 음성 인식 패키지가 몇 가지 있습니다. 여기에는 다음이 포함됩니다.
apiai
google-cloud-speech
pocketsphinx
SpeechRcognition
watson-developer-cloud
wit
wit 및 apiai와 같은 일부 소프트웨어 패키지는 화자의 의도 식별과 같은 기본 음성 인식 이상의 일부 내장 기능을 제공합니다. 자연 언어 처리 능력. Google Cloud Speech와 같은 다른 소프트웨어 패키지는 음성-텍스트 변환에 중점을 둡니다.
그 중에서도 SpeechRecognition은 사용 편의성이 돋보입니다.
음성을 인식하려면 오디오 입력이 필요하며 SpeechRecognition에서 오디오 입력을 검색하는 것은 매우 간단합니다. 마이크에 액세스하고 오디오 파일을 처음부터 처리하기 위한 스크립트를 작성할 필요가 없습니다. 자동으로 검색하고 실행하는 데 몇 분 밖에 걸리지 않습니다. .

SpeechRecognition 설치

SpeechRecognition은 Python2.6, 2.7 및 3.3+와 호환되지만 Python 2에서 사용하는 경우 몇 가지 추가 설치 단계가 필요합니다. pip 명령을 사용하여 터미널에서 SpeechRecognition을 설치할 수 있습니다. pip3 install SpeechRecognition

설치가 완료된 후 통역사 창을 열어 설치를 확인할 수 있습니다.

Python을 사용하여 Linux에서 음성 인식 기능을 구현하는 방법

참고: 이 세션을 닫지 마십시오. 다음 몇 단계에서 설명하겠습니다.
기존 오디오 파일을 처리하는 경우 특정 사용 사례에 대한 일부 종속성에 주의하면서 SpeechRecognition을 직접 호출하면 됩니다. 또한 마이크 입력

Recognizer 클래스

을 얻으려면 PyAudio 패키지를 설치하십시오. SpeechRecognition의 핵심은 인식기 클래스입니다.
Recognizer API의 주요 목적은 음성을 인식하는 것입니다. 각 API에는 오디오 소스의 음성을 인식하는 다양한 설정과 기능이 있습니다. 여기서는 recognition_sphinx()를 선택합니다. CMU Sphinx - PocketSphinx 설치 필요(오프라인 음성 인식 지원) )
그런 다음 pip 명령을 통해 PocketSphinx를 설치해야 합니다. 설치 과정에서 빨간색 글꼴 오류도 많이 발생하기 쉽습니다.

오디오 파일 사용

관련 오디오 파일을 다운로드하여 특정 디렉터리에 저장합니다(우분투 데스크탑에 직접 저장)
참고:
AudioFile 클래스는 오디오 파일의 경로로 초기화될 수 있으며 읽기 및 읽기 기능을 제공합니다. 파일 콘텐츠 컨텍스트 관리자 인터페이스를 처리합니다.
SpeechRecognition은 현재 다음 파일 형식을 지원합니다.

  • WAV: PCM/LPCM 형식이어야 합니다.

  • AIFF

  • AIFF-CFLAC: 초기 FLAC 형식이어야 합니다.

영어 음성 인식

위의 기본 작업을 완료한 후 영어 음성 인식을 수행할 수 있습니다.
(1) 터미널 열기
(2) 음성 테스트 파일이 있는 디렉토리 입력(블로거의 경우 데스크탑)
(3) Python 인터프리터 열기
(4) 아래와 같이 해당 명령 입력

Python을 사용하여 Linux에서 음성 인식 기능을 구현하는 방법

마지막으로 음성을 텍스트로 변환하는 콘텐츠(냄새가 날 것입니다...)를 보면 효과가 실제로 매우 좋습니다! 왜냐면 영어로 되어 있어서 잡음이 없거든요.

음성 인식에 대한 소음의 영향

소음은 현실 세계에 존재하며 모든 녹음에는 일정 수준의 소음이 있으며 처리되지 않은 소음은 음성 인식 애플리케이션의 정확성을 손상시킬 수 있습니다.
효과가 좋지 않은 경우 Recognizer 클래스의 adjust_for_ambient_noise() 명령을 호출해 볼 수 있습니다.

마이크 사용

SpeechRecognizer를 사용하여 마이크에 액세스하려면 PyAudio 패키지를 설치해야 합니다.
Debian 기반 Linux(예: Ubuntu)를 사용하는 경우 apt를 사용하여 PyAudio를 설치할 수 있습니다. sudo apt-get install python-pyaudio python3-pyaudio pip3 install pyaudio를 활성화해야 할 수도 있습니다. 특히 설치가 완료된 후 가상으로 실행하는 경우에는 더욱 그렇습니다. sudo apt-get install python-pyaudio python3-pyaudio安装完成后可能仍需要启用 pip3 install pyaudio ,尤其是在虚拟情况下运行。
在安装完pyaudio的情况下可以通过python实现语音录入生成相关文件。
pocketsphinx的使用注意:
支持文件格式:wav
音频文件的解码要求:16KHZ,单声道
利用python实现录音并生成相关文件程序代码如下:

from pyaudio import PyAudio, paInt16
import numpy as np
import wave
class recoder:
     NUM_SAMPLES = 2000   
     SAMPLING_RATE = 16000  
     LEVEL = 500     
     COUNT_NUM = 20   
     SAVE_LENGTH = 8     
     Voice_String = []
     def savewav(self,filename):
         wf = wave.open(filename, 'wb')
         wf.setnchannels(1)
         wf.setsampwidth(2)
         wf.setframerate(self.SAMPLING_RATE)
         wf.writeframes(np.array(self.Voice_String).tostring())
         wf.close()
     def recoder(self):
         pa = PyAudio()
         stream = pa.open(format=paInt16, channels=1, rate=self.SAMPLING_RATE, input=True,frames_per_buffer=self.NUM_SAMPLES)
         save_count = 0
         save_buffer = []
         while True:
            string_audio_data = stream.read(self.NUM_SAMPLES)
            audio_data = np.fromstring(string_audio_data, dtype=np.short)
            large_sample_count = np.sum(audio_data > self.LEVEL)
            print(np.max(audio_data))
            if large_sample_count > self.COUNT_NUM:
                save_count = self.SAVE_LENGTH
            else:
                save_count -= 1
            if save_count < 0:
                save_count = 0
            if save_count > 0:
                save_buffer.append(string_audio_data )
            else:
                if len(save_buffer) > 0:
                    self.Voice_String = save_buffer
                    save_buffer = []
                    print("Recode a piece of voice successfully!")
                    return True
		 else:
                    return False
if __name__ == "__main__":
    r = recoder()
    r.recoder()
    r.savewav("test.wav")

注意:在利用python解释器实现时一定要注意空格!!!
最后生成的文件就在Python解释器回话所在目录下,可以通过play来播放测试一下,如果没有安装play可以通过apt命令来安装。

中文的语音识别

在进行完以前的工作以后,我们对语音识别的流程大概有了一定的了解,但是作为一个中国人总得做一个中文的语音识别吧!

我们要在CMU Sphinx语音识别工具包里面下载对应的普通话升学和语言模型。

Python을 사용하여 Linux에서 음성 인식 기능을 구현하는 방법

图片中标记的就是普通话!下载相关的语音识别工具包。

但是我们要把zh_broadcastnews_64000_utf8.DMP转化成language-model.lm.bin,再解压zh_broadcastnews_16k_ptm256_8000.tar.bz2得到zh_broadcastnews_ptm256_8000文件夹。
借鉴刚才那位博主的方法,在Ubuntu下找到speech_recognition文件夹。可能会有很多小伙伴找不到相关的文件夹,其实是在隐藏文件下。大家可以点击文件夹右上角的三条杠。如下图所示:

Python을 사용하여 Linux에서 음성 인식 기능을 구현하는 방법

然后给显示隐藏文件打个勾,如下图所示:

Python을 사용하여 Linux에서 음성 인식 기능을 구현하는 방법

然后依次按照以下目录就可以找到啦:

Python을 사용하여 Linux에서 음성 인식 기능을 구현하는 방법

然后把原来的en-US改名成en-US-bak,新建一个文件夹en-US,把解压出来的zh_broadcastnews_ptm256_8000改成acoustic-model,把chinese.lm.bin改成language-model.lm.bin,把pronounciation-dictionary.dic改后缀成dictpyaudio를 설치한 후 Python을 사용하여 음성 녹음 및 관련 파일을 생성할 수 있습니다.
pocketsphinx 사용 시 참고 사항:

지원되는 파일 형식: wav

오디오 파일 디코딩 요구 사항: 16KHZ, 모노 Python을 사용하여 Linux에서 음성 인식 기능을 구현하는 방법파이썬을 사용하여 녹음을 구현하고 관련 파일을 생성하는 방법은 다음과 같습니다.

rrreee

참고: 반드시 Python 인터프리터를 사용하여 구현하세요. 공백에 주의하세요! ! !
최종 생성된 파일은 Python 인터프리터가 위치한 디렉토리에 있습니다. 플레이를 통해 플레이하여 테스트해볼 수 있습니다. 플레이가 설치되어 있지 않은 경우 apt 명령을 통해 설치할 수 있습니다.

중국어 음성인식

전작을 마친 후 음성인식 과정에 대해 어느 정도 이해가 되었지만, 중국인으로서 중국어 음성인식을 해야 합니다! Python을 사용하여 Linux에서 음성 인식 기능을 구현하는 방법

CMU Sphinx 음성 인식 툴킷에서 해당 중국어 모델과 언어 모델을 다운로드해야 합니다.


Linux에서 Python을 사용하여 음성 인식 기능을 구현하는 방법

사진에는 ​​중국어로 표시되어 있어요! 관련 음성 인식 툴킷을 다운로드하세요.

하지만 zh_broadcastnews_64000_utf8.DMP를 언어 모델.lm.bin으로 변환한 다음 zh_broadcastnews_16k_ptm256_8000.tar.bz2의 압축을 풀어 zh_broadcastnews_ptm256_8000 폴더를 가져와야 합니다.
방금 블로거의 방법을 배우고 우분투에서 speech_recognition 폴더를 찾으세요. 해당 폴더를 찾지 못하는 친구들이 많겠지만 실제로는 숨김 파일 아래에 있습니다. 폴더의 오른쪽 상단에 있는 세 개의 막대를 클릭할 수 있습니다. 아래 그림과 같이:

파이썬을 사용하여 음성 인식 기능을 구현하는 방법 Linux에서Python을 사용하여 Linux에서 음성 인식 기능을 구현하는 방법

그런 다음 아래와 같이 숨김 파일 표시를 선택하세요.


Python을 사용하여 Linux에서 음성 인식 기능을 구현하는 방법

그런 다음 다음 디렉터리를 따라가서 찾으세요.

Linux에서 Python을 사용하여 음성 인식 기능을 구현하는 방법Python을 사용하여 Linux에서 음성 인식 기능을 구현하는 방법

그런 다음 원래 en-US의 이름을 en-US-bak, 새 폴더 en-US를 만들고 추출된 <code>zh_broadcastnews_ptm256_8000acoustic-model로 변경하고 chinese.lm.bin을 다음으로 변경합니다. 언어-모델.lm.bin, pronounciation-dictionary.dic의 접미사를 dict로 변경하고 이 세 파일을 en-US에 복사합니다. . 동시에 원래 en-US 파일 디렉터리에 있는 LICENSE.txt를 현재 폴더에 복사합니다.

마지막으로 폴더에 다음 파일이 있습니다.

🎜🎜🎜🎜 그러면 마이크를 통해 음성 파일("test.wav")을 녹음할 수 있습니다. 🎜파일 디렉터리에서 Python 인터프리터를 열고 다음 내용을 입력하세요. 🎜🎜 🎜 🎜🎜 출력 내용을 봤는데 중국 두 개 얘기하고 있었는데 다른 것들도 테스트해 봤는데 인식 효과가 너무 안좋더라구요! ! ! 🎜🎜🎜소규모 중국어 인식🎜🎜정식 버전에서 제공하는 효과가 너무 형편없어 거의 사용할 수 없을 정도에요! 그러다가 많은 글을 읽고 최적화 방법을 생각했는데 소규모 인식에만 적합하네요! 일부 명령 등은 괜찮지만 채팅 등은 잘 작동하지 않을 수 있습니다. 🎜방금 복사한 폴더 4개를 찾아보세요. pronounciation-dictionary.dict라는 폴더가 있습니다. 열어보면 다음과 같은 내용이 있습니다. 🎜🎜🎜🎜🎜이 내용은 단어가 많고 사전과 비슷한 느낌입니다. 일상적인 의사소통을 위한 단어의 격차가 상대적으로 큽니다. 그런 다음 우리가 익숙한 단어로 바꾸면 됩니다! 한번 해보자는 생각으로 결과는 정말 좋습니다. 인식 효과가 정말 좋아요! 🎜내 접근 방식은 다음과 같습니다. 🎜(1) 그림에서 빨간색 표시 위의 내용을 유지하고 빨간색 표시 아래의 내용을 삭제합니다. 물론, 보험상의 이유로 이 파일을 백업해 두는 것을 권장합니다! 🎜(2) 빨간색 선 아래에 식별하고 싶은 내용을 입력하세요! (규칙대로 입력하세요, 병음이 다릅니다!!!) 최근 신종폐렴 상황이 많이 좋아지고 있습니다.가장 많이 듣는 문장이 "Come on China" 입니다. 텍스트로! 개학이 빨리 시작됐으면 좋겠어요, 하하하하. 🎜🎜🎜🎜🎜3) 다음을 입력하세요. 🎜

Python을 사용하여 Linux에서 음성 인식 기능을 구현하는 방법

음성 합성

음성 합성에 대한 개인적인 이해는 텍스트 음성 변환입니다. 하지만 이 문장에서는 볼륨, 톤, 속도, 남성/여성/로리/자유를 설정할 수 있습니다. client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) result = client.synthesis('你好百度', 'zh', 1, { 'vol': 5,'spd': 3,'pit':9,'per': 3})

위 내용은 Python을 사용하여 Linux에서 음성 인식 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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