语音识别心得(花朵分类程序)

写作目的

最近在做自己的毕业设计,打算做的是基于tensorflow利用CNN算法进行识别。于是查找资料之后,就做了花朵识别分类程序,在github上找到了一个可以用的程序,于是copy下来,自己进行改动来实现自己想要的功能。然后在指导老师的建议下,增加了语音识别指定的图片这个模块。在增加这个模块的过程中,遇到了很多问题,所以特此记录下来,方便日后查看改进,也希望能够给看到此文章的同学一些帮助。
github链接: [https://github.com/bayhax/FlowerRecognize]
我所用的编程环境: win7+spyder3.6+tensorflow1.13.1+百度AipSpeech

python语音模块

语音转文字处理模块

目前有很多语音处理模块,比如 PyPI中
apiai
google-cloud-speech
pocketsphinx
SpeechRecognition
waston-developer-cloud
完全可以自行去百度或者Google,或者去官网看文档,都是很不错的选择。
由于我使用的是SpeechRecognition,所以就记录一些它的使用过程。
安装
pip install SpeechRecognition
如果有在线网络下载慢等问题可以去官网下载whl文件,进入whl文件目录进行安装
官网链接[https://pypi.org/project/SpeechRecognition/#files]
安装完之后再python交互界面测试一下

import speech_recognition as sr     
sr.__version__

显示出版本信息之后就证明安装成功了。
使用
下面是我使用的时候的一段代码

import speech_recognition as sr
import logging
logging.basicConfig(level=logging.DEBUG)

while True:
    #speech_recognition的核心是识别器类
    r = sr.Recognizer()
    #麦克风
    mic = sr.Microphone()
    logging.info('录音中')
    with mic as source:
        #去噪声
        r.adjust_for_ambient_noise(source)
        audio = r.listen(source)
    
    logging.info('录音结束,识别中.....')
    test = r.recognize_google(audio,language='cmn-Hans-CN',show_all=True)
    #print(test[0])
    #这里注意这个recognize_google返回的test,如果是空文件,返回的是一个列表
    #如果不是空文件,返回的是一个包含列表的字典
    if isinstance(test,list):
        print("空")
    else:
        print(test['alternative'][0]['transcript'])
        print(type(test['alternative'][0]['transcript']))
    #print(type(test))
    logging.info('end')

文字转语音处理模块

文字转语音模块也有很多,比如Google,百度,讯飞等等,我个人使用的是百度的AipSpeech,所以说说它的使用方法,也蛮方便的。
安装
pip install AipSpeech
然后去百度AI开放平台,点击控制台,创建自己的应用,获取自己的ID,KEY等。
使用

# -*- coding: utf-8 -*-
#百度AI平台提供的语音库文件,playsound播放音频
from aip import AipSpeech
import shutil
#百度AI平台的ID秘钥等,APPID AK SK """
APP_ID = '你自己的ID'
API_KEY = '你自己的KEY'
SECRET_KEY = '你自己的秘钥'
#定义自己的初始化AipSpeech对象
myspeech = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
num = 0
#要转换的文字信息
result  = myspeech.synthesis('二营长,把老子的意大利炮拿来', 'zh', 1, {
    'spd':3,'pit':9,'vol': 6,'per':4
})
#如果识别正确,则返回语音的二进文件写入自己定义的audio文件中,错误则返回dict
#这里注意一下,with open打开写入文件用相对路劲有时候会出错,用绝对路径会相对好一些。
if not isinstance(result, dict):
    with open(r'.\test\audio'+str(num)+'.mp3', 'wb') as f:
        f.write(result)
 #复制文件
shutil.copy(r'.\test\audio'+str(num)+'.mp3', r'.\testcopy\audio'+str(num)+'.mp3')

播放音频文件模块

播放音频文件可以用pygame,mp3play,playsound等等,我用的是playsound,但是我的渣渣电脑可能有问题,也有可能是我什么地方做错了,我用哪种播放方式都无法关闭播放的文件,导致我无法删除或者重新写入文件,所以只好复制音频文件,播放副本,每次生成新的名字的音频文件。然后运行完再手动删除副本文件。如果是某一种格式的音频无法播放或者有问题,可以试着用ffmpeg将文件转换格式。同理去它的官网下载轮子或者pip安装适合自己的版本都是可以的。当然ffmpeg需要pydub。安装pydub等这些python的库,用pip,conda或者下载whl文件,都是还算好解决的。下面给大家一段mp3格式转到wav格式的代码。其他转换同理。

from pydub import AudioSegment
#要转换的文件的路径
filepath=".\\test\\audio0.mp3"
def trans_mp3_to_wav(filepath):
    song = AudioSegment.from_mp3(filepath)
    print("转换....")
    #转换完的文件存储路径及格式
    song.export(".\\testcopy\\test.wav", format="wav")

if __name__ == "__main__":
    trans_mp3_to_wav(filepath)

在github上查看playsound的文件,发现好像没有关闭音频的方式
下面是playsound的python文件

  def winCommand(*command):
        buf = c_buffer(255)
        command = ' '.join(command).encode(getfilesystemencoding())
        errorCode = int(windll.winmm.mciSendStringA(command, buf, 254, 0))
        if errorCode:
            errorBuffer = c_buffer(255)
            windll.winmm.mciGetErrorStringA(errorCode, errorBuffer, 254)
            exceptionMessage = ('\n    Error ' + str(errorCode) + ' for command:'
                                '\n        ' + command.decode() +
                                '\n    ' + errorBuffer.value.decode())
            raise PlaysoundException(exceptionMessage)
        return buf.value

    alias = 'playsound_' + str(random())
    winCommand('open "' + sound + '" alias', alias)
    winCommand('set', alias, 'time format milliseconds')
    durationInMS = winCommand('status', alias, 'length')
    winCommand('play', alias, 'from 0 to', durationInMS.decode())

    if block:
        sleep(float(durationInMS) / 1000.0)

回到正题
安装
pip install playsound
使用

from playsound import playsound
playsound("你自己的音频文件的路径")

总结

增加这个语音识别模块的这几天,当明明感觉程序没问题却就是报错,然后模块用起来不尽人意的时候,还是着实让人烦恼的,不过最后还是初成模型,实现了自己想要的功能还是不错滴,期待日后找出不能关闭音频文件的原因,然后改进。完整的花朵分类的程序(三个功能:选择本地图片进行识别,拍照识别,语音识别),见文章的最前面github链接。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值