语音识别(利用python将语音转化为文字)(升级版)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、申请讯飞语音端口
    • 1.点击链接进入讯飞平台主页面
    • 2.在页面注册自己的个人账户
    • 3.申请语音端口
    • 4.查看自己的端口编码
    • 二、python代码讲解
      • 1.代码如下(实例)
      • 2.代码需要修改的部分
      • 3.包的导入
      • 4.结果演示
      • 总结

        前言

        基于语音识别(1)进行的完善,修改了60秒断触的问题,另外可以更加方便的调用,语音识别1的链接如下:

        https://blog.csdn.net/m0_46657126/article/details/124531081


        一、申请讯飞语音端口

        1.点击链接进入讯飞平台主页面

        https://www.xfyun.cn/

        2.在页面注册自己的个人账户

        ps:注册账户是完全免费的,因为我之前已经注册过一个了,这里就不重复介绍了,注册之后看个人情况进行个人认证,这个不影响之后的操作。

        3.申请语音端口

        ps:申请内容大概像我这样写就行,名字重复的话换一个

        4.查看自己的端口编码

        二、python代码讲解

        1.代码如下(实例)

        代码如下(示例):

        # -*- encoding:utf-8 -*-
        import hashlib
        import hmac
        import base64
        from socket import *
        import json, time, threading
        from websocket import create_connection
        import websocket
        from urllib.parse import quote
        import logging
        import pyaudio
        import re
        # reload(sys)
        # sys.setdefaultencoding("utf8")
        class Client():
            def __init__(self):
                logging.basicConfig()
                self.app_id = ""
                self.api_key = ""
                base_url = "ws://rtasr.xfyun.cn/v1/ws"
                ts = str(int(time.time()))
                tt = (self.app_id + ts).encode('utf-8')
                md5 = hashlib.md5()
                md5.update(tt)
                baseString = md5.hexdigest()
                baseString = bytes(baseString, encoding='utf-8')
                apiKey = self.api_key.encode('utf-8')
                signa = hmac.new(apiKey, baseString, hashlib.sha1).digest()
                signa = base64.b64encode(signa)
                signa = str(signa, 'utf-8')
                self.end_tag = "{\"end\": true}"
                self.ws = create_connection(base_url + "?appid=" + self.app_id + "&ts=" + ts + "&signa=" + quote(signa))
                self.trecv = threading.Thread(target=self.recv)
                self.trecv.start()
            def send(self):
                CHUNK = 300  # 定义数据流块
                FORMAT = pyaudio.paInt16  # 16bit编码格式
                CHANNELS = 1  # 单声道
                RATE = 16000  # 16000采样频率
                p = pyaudio.PyAudio()
                # 创建音频流
                stream = p.open(format=FORMAT,  # 音频流wav格式
                                channels=CHANNELS,  # 单声道
                                rate=RATE,  # 采样率16000
                                input=True,
                                frames_per_buffer=CHUNK)
                print("- - - - - - - Start Recording ...- - - - - - - ")
                while True:
                    # file_object = stream.read(CHUNK)
                    index = 1
                    while True:
                        chunk = stream.read(1280)
                        if not chunk:
                            break
                        self.ws.send(chunk)
                        index += 1
                        time.sleep(0.04)
                # self.ws.send(bytes(self.end_tag.encode('utf-8')))
                # print("send end tag success")
            def recv(self):
                try:
                    while self.ws.connected:
                        result = str(self.ws.recv())
                        if len(result) == 0:
                            print("receive result end")
                            break
                        result_dict = json.loads(result)
                        # 解析结果
                        if result_dict["action"] == "started":
                            print("handshake success, result: " + result)
                        if result_dict["action"] == "result":
                            result = ''
                            result_1 = re.findall('"w":"(.*?)"', str(result_dict["data"]))
                            for i in result_1:
                                if i == '。' or i == '.。' or i == ' .。' or i == ' 。':
                                    pass
                                else:
                                    result += i
                            print("翻译结果:" + result)
                            # 写入文本文件
                            tep = open('tep.txt', 'w', encoding='utf-8')
                            tep.write(result)
                            tep.close()
                            # print("rtasr result: " + result_1)
                        if result_dict["action"] == "error":
                            print("rtasr error: " + result)
                            self.ws.close()
                            return
                except websocket.WebSocketConnectionClosedException:
                    print("receive result end")
            def close(self):
                self.ws.close()
                print("connection closed")
        def runc():
            client = Client()
            client.send()
        if __name__ == '__main__':
            logging.basicConfig()
            client = Client()
            client.send()
        

        2.代码需要修改的部分

        3.包的导入

        Ps:因为没有新的Project Interpreter,所以不记得有什么包需要重新引入,唯一有印象的只有pyaudio了,所以这里就只提供了pyaudio的引入方法,其他的好像直接导入就可以了。

        1)首先:下载安装 pyaudio 的 whl 文件

        下载网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/

        2)该界面上输入ctrl+f,搜索pyaudio

        3)下载

        重点:一定要根据自己的版本进行下载!!!,每个人不一定是一样的。

        4)记录下载文件的安装路径,如果换位置,则记住新的位置

        5)安装

        键盘输入win+r,输入cmd打开终端模式

        假设我的下载位置为D盘的杂项文件夹,那么可以先利用cd转到D盘

        再转到杂项

        进行安装

        然后输入pip install 文件名称即可

        回车,安装结束

        4.结果演示


        总结

        以上主要是对第一篇语音识别的更新,因为很多小伙伴提出了出现的问题,依次对其进行了改进。