2022年 11月 5日

python超简单语音识别

                Python简单语音识别
  • 1

一:
1:安装pyaudio,speech库
2:直接上代码,首先简单的文本转语音

import speech  #调用speech库
speech.say('请选择:1.转换文字,2.转换文本,3.退出')
#speech.say是固用语法,它可以调用你的麦克风,并且说出括号内的内容
n=int(input('请选择:1.转换文字,2.转换文本,3.退出'))
#这里是一个输入,input获取你输入的内容,并将其转化为int类型,将它赋值给n(n没有任何意义)
while True:#循环
    if n==1:
        speech.say("请输入:")#同上
        str = input("请输入:")#同上
        speech.say("你输入的内容是: ")#同上
        speech.say(str)#调用麦克风说出你输入的内容
    if n==2:
        speech.say('请输入文本名')#同上
        n1=input('请输入文本名')#同上
        fd = open(n1, encoding="utf-8").read()#打开该文本,并读取
        speech.say(fd)#同上
    if n==3:
        speech.say('您已退出')#如你所见,break了
        break
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3:直接上代码,简单的语音转文本

import speech_recognition as sr   #不说了,也知道是啥意思吧
r = sr.Recognizer()    #调用识别器
test = sr.AudioFile("I:\\pycham\\PyCharm 2020.2.3\\语音识别\\程序文件\\Oldboy.wav")   #导入语音文件
with test as source:
    audio = r.record(source)
type(audio)   #看一下类型不用管
c=r.recognize_sphinx(audio, language='zh-cn')     
#识别输出,调用中文,这里需要下载中文包,speech_recognition里没有中文
print(c)
print(d)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4.代码代码,自己给自己录音

import wave
from pyaudio import PyAudio,paInt16

framerate=8000#看下面
NUM_SAMPLES=2000#看下面
channels=1#看下面
sampwidth=2#看下面
TIME=2#看下面
def save_wave_file(filename,data):#自定义函数
    '''save the date to the wavfile'''
    wf=wave.open(filename,'wb')#打开一个wav文件,没有则创建
    wf.setnchannels(channels)#声道数,不会吧,难道真的有人不知道声道数是什么意思
    wf.setsampwidth(sampwidth)#采样字节 1 or 2
    wf.setframerate(framerate) #采样频率 8000 or 16000
    wf.writeframes(b"".join(data))#写进去
    wf.close()#关了,不关就一直开着了

def my_record():
    pa=PyAudio()#调用,然后换个名字,嗯,虽然有点不一样,但差不多就是这个意思
    stream=pa.open(format = paInt16,
                   channels=1,
                   rate=framerate,
                   input=True,
                   frames_per_buffer=NUM_SAMPLES)#底层的缓存的块的大小,不写也可以,改成(frames_per_buffer=frames_per_buffer)就可以了
    my_buf=[]
    count=0
    while count<TIME*10:#控制录音时间(2*10,打印20个.差不多emmmm好几秒吧)
        string_audio_data = stream.read(NUM_SAMPLES)
        my_buf.append(string_audio_data)
        count+=1#别告诉我你看不懂
        print('.')
    save_wave_file('01.wav',my_buf)#调用,传参
    stream.close()#关了

chunk=2014
def play():
    wf=wave.open(r"01.wav",'rb')#读写
    p=PyAudio()
    stream=p.open(format=p.get_format_from_width(wf.getsampwidth()),#打开
                  channels=wf.getnchannels(),
                  rate=wf.getframerate(),
                  output=True)
    while True:
        data=wf.readframes(chunk)
        if data=="":
            break#不管,前面要是没问题,就不会用到这个
        stream.write(data)#写入
    stream.close()#关了
    p.terminate()#还记得前面的pyaudio吗,没错,调用这个库,然后播放01.wav,总要检查一下到底录没录下来嘛

if __name__ == '__main__':
    my_record()
    print('Over!')
    play()#调用自定义函数,运行顺序1.my_record 2.save_wave_file 3.play

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

5.终于,整合一下前面的代码,自己录音识别自己,其实很简单,直接from *** import ***,不过再此之前得把播放的那一段删了,也就是上面的自定义函数play()

from 程序文件.录音2 import my_record#是不是很方便,直接调用,下面不说了,之前都说过了
import speech_recognition as sr
my_record()
r = sr.Recognizer()    #调用识别器
test = sr.AudioFile("I:\\pycham\\PyCharm 2020.2.3\\语音识别\\程序文件\\01.wav")   #导入语音文件
with test as source:
    audio = r.record(source)
d=type(audio)
c=r.recognize_sphinx(audio, language='zh-cn')     #识别输出
print(c)
print(d)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11