Python 识别录音并转为文字的实现

目录

程式功能: 用 UI 界面,点击界面上的“开始识别”来录音(调用百度云语音接口),并自动将结果显示在界面的文本框中

Time: 2022/03/06

Author: Xiaohong

功能:Python 更改目录下 目录及文件的 顺序命名

项目的文件结构方式:
1. PyQt5 UI 文件:  My_Audio_Record_cloud.ui
2. PyQt5 UI 文件转换生成的 PY 文件:  My_Audio_Record_cloud_Ui.py
3. PyQt5 UI 文件对应的 Class 文件:  My_Audio_Record_cloud_class.py
4. 通用的消息显示 文件(在My_Audio_Record_cloud_class.py 中被调用):  FangMessage.py

本例为实验室产品,不具备直接使用,支持的语音录入长度也较短

主程序界面如下:

主程序 My_Audio_Record_cloud_class.py:

# -*- coding: utf-8 -*-
'''
程式功能: 用 UI 界面,点击界面上的“开始识别”来录音,并自动将结果显示在界面的文本框中
Time: 2022/03/06
Author: Xiaohong
'''
import wave  # pip3 install  wave
import My_Audio_Record_cloud_Ui as my_audio_record_cloud
from pyaudio import PyAudio, paInt16  # 直接用pip安装的pyaudio不支持3.7

# 若安装失败的话,下载对应的whl 文件  https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio

from PyQt5 import QtGui, QtCore, QtWidgets

from PyQt5.QtWidgets import (
    QApplication,
    QMainWindow,
    QDialog,
    QSplashScreen,
    QToolButton,
    QToolTip,
    QWidget,
    QMessageBox,
    QAction,
    QFileDialog,
)

# from PyQt5.QtWidgets import (
#     QApplication,
#     QWidget,
# )

import sys, os, json, pycurl, urllib
import urllib.request
from FangMessage import FangMessage

class Audio_record_cloud_class(QMainWindow, my_audio_record_cloud.Ui_MainWindow):
    def __init__(self, parent=None):
        super().__init__()
        self.child = my_audio_record_cloud.Ui_MainWindow()
        self.child.setupUi(self)
        self.file_name = ""
        self.child.pushButton.clicked.connect(self.my_start)
        # self.child.pb_play.clicked.connect(self.play_audio)
        # 录音文件参数
        self.framerate = 8000
        self.NUM_SAMPLES = 2000
        self.channels = 1
        self.sampwidth = 2
        # 录音时长参数
        self.TIME = 5
        # 播放文件参数
        self.chunk = 1024

    # 设置默认的录音文件名
    # 当前目录+test+当前的时间ID+'.wav'
    def init_file_name(self):
        file_path = os.getcwd()
        file_name = 'test' + self.get_timeseq() + '.wav'
        file_wav = os.path.join(file_path, file_name)
        self.file_name = file_wav
        # self.child.lineEdit.setText(self.file_name)
        # print(file_wav)
        return file_wav

    # 获取当前的时间ID
    def get_timeseq(self):
        import time

        now = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time()))
        return now

    # 开始录音
    def Start_record(self):
        self.init_file_name()
        pa = PyAudio()
        stream = pa.open(
            format=paInt16,
            channels=1,
            rate=self.framerate,
            input=True,
            frames_per_buffer=self.NUM_SAMPLES,
        )
        my_buf = []
        count = 0
        while count <= self.TIME * 4:
            string_audio_data = stream.read(self.NUM_SAMPLES)
            my_buf.append(string_audio_data)
            count += 1
            print("..")

        # print('begin:')
        # print(my_buf)
        self.save_wave_file(self.file_name, my_buf)
        stream.close()
        FangMessage1 = FangMessage()
        FangMessage1.runY('完成', '已完成录音', 'OK')

    # 保存声音文件
    def save_wave_file(self, filename, data):
        wf = wave.open(filename, 'wb')
        wf.setnchannels(self.channels)
        wf.setsampwidth(self.sampwidth)
        wf.setframerate(self.framerate)
        for i in data:
            wf.writeframes(i)
        wf.close()

    # 获取 百度返回结果,并 Print
    def dump_res(self, buf):
        print(buf)
        my_temp = json.loads(buf)
        my_list = my_temp['result']
        self.child.textBrowser.setText(my_list[0])
        print(my_list[0])

    # 访问 百度云语音 网站,根据自己申请的应用Key 获取本次访问的 Token
    def get_token(self):
        apiKey = "XXXXXXXXXXXXXXXXXXXXXXX"
        secretKey = "YYYYYYYYYYYYYYYYYYYYYYYYY"

        auth_url = (
            "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id="
            + apiKey
            + "&client_secret="
            + secretKey
        )

        # print(auth_url)

        res = urllib.request.urlopen(auth_url)
        json_data = res.read()
        # print(json_data)
        # print('.....')
        # print(json.loads(json_data))
        return json.loads(json_data)['access_token']

    # 访问 百度云语音 网站,根据 Token,上传 wav 文件
    def use_cloud(self, token):
        fp = wave.open(self.file_name, 'rb')
        nf = fp.getnframes()
        print('sampwidth:', fp.getsampwidth())
        print('framerate:', fp.getframerate())
        print('channels:', fp.getnchannels())
        f_len = nf * 2
        audio_data = fp.readframes(nf)

        cuid = "4d36e972-e325-11ce-bfc1-08002be10318"
        print('token:')
        print(token)
        srv_url = (
            'http://vop.baidu.com/server_api' + '?cuid=' + cuid + '&token=' + token
        )
        http_header = ['Content-Type:audio/pcm;rate=8000', 'Content-Length:%d' % f_len]
        c = pycurl.Curl()
        c.setopt(pycurl.URL, str(srv_url))
        c.setopt(c.HTTPHEADER, http_header)
        c.setopt(c.POST, 1)
        c.setopt(c.CONNECTTIMEOUT, 80)
        c.setopt(c.TIMEOUT, 80)
        c.setopt(c.WRITEFUNCTION, self.dump_res)
        c.setopt(c.POSTFIELDS, audio_data)
        c.setopt(c.POSTFIELDSIZE, f_len)
        c.perform()

    def my_start(self):
        print('OK')
        self.Start_record()
        self.use_cloud(self.get_token())

if __name__ == "__main__":
    app = QApplication(sys.argv)
    myWin = Audio_record_cloud_class()
    myWin.show()
    sys.exit(app.exec_())

Ui 转化py文件如下:My_Audio_Record_cloud_Ui.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'd:\vscode_2020\My_Audio\My_Audio\My_Audio_Record_cloud.ui'
#
# Created by: PyQt5 UI code generator 5.15.0
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(558, 525)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
        self.textBrowser.setGeometry(QtCore.QRect(30, 50, 501, 351))
        self.textBrowser.setObjectName("textBrowser")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(40, 420, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(40, 460, 491, 16))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(30, 30, 161, 16))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(180, 10, 111, 31))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(18)
        font.setBold(True)
        font.setWeight(75)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(480, 20, 54, 12))
        self.label_4.setObjectName("label_4")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(450, 420, 75, 23))
        self.pushButton_2.setObjectName("pushButton_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 558, 23))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        self.pushButton_2.clicked.connect(MainWindow.close)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "开始识别"))
        self.label.setText(_translate("MainWindow", "说明:点击“开始识别”按钮来录音,并通过百度语音的功能,自动将结果显示在文本框中"))
        self.label_2.setText(_translate("MainWindow", "语音识别的结果:"))
        self.label_3.setText(_translate("MainWindow", "语音识别"))
        self.label_4.setText(_translate("MainWindow", "v20220306"))
        self.pushButton_2.setText(_translate("MainWindow", "结束"))

到此这篇关于Python 识别录音并转为文字的实现的文章就介绍到这了,更多相关Python 识别录音转为文字内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python录音并调用百度语音识别接口的示例

    #!/usr/bin/env python import requests import json import base64 import pyaudio import wave import os import psutil #首先配置必要的信息 def bat(voice_path): baidu_server = 'https://aip.baidubce.com/oauth/2.0/token?' grant_type = 'client_credentials' client_id

  • Python 识别录音并转为文字的实现

    目录 程式功能: 用 UI 界面,点击界面上的“开始识别”来录音(调用百度云语音接口),并自动将结果显示在界面的文本框中 Time: 2022/03/06 Author: Xiaohong 功能:Python 更改目录下 目录及文件的 顺序命名 项目的文件结构方式:1. PyQt5 UI 文件:  My_Audio_Record_cloud.ui2. PyQt5 UI 文件转换生成的 PY 文件:  My_Audio_Record_cloud_Ui.py3. PyQt5 UI 文件对应的 Cla

  • python识别图像并提取文字的实现方法

    前言 python图像识别一般基础到的就是tesseract了,在爬虫中处理验证码广泛使用. 安装 安装教程网上大都差不多,Windows下确实比较麻烦,涉及到各种路径.环境变量甚至与linux不同的路径分隔符,所以这里的安装是基于Centos7. 1. 依赖安装 yum install -y automake autoconf libtool gcc gcc-c++ 2. 安装leptonica Leptonica主要用于图像处理和图像分析 原则上所有的库文件都是可以直接用yum安装的,如果想

  • Python图像处理之识别图像中的文字(实例讲解)

    ①安装PIL:pip install Pillow(之前的博客中有写过) ②安装pytesser3:pip install pytesser3 ③安装pytesseract:pip install pytesseract ④安装autopy3: 先安装wheel:pip install wheel 下载autopy3-0.51.1-cp36-cp36m-win_amd64.whl[点击打开链接] 执行命令:pip install E:\360安全浏览器下载\autopy3-0.51.1-cp36

  • python 识别图片中的文字信息方法

    最近朋友需要一个可以识别图片中的文字的程序,以前做过java验证码识别的程序: 刚好最近在做一个python项目,所以顺便用Python练练手 1.需要的环境: 2.7或者3.4版本的python 2.需要安装pytesseract库 依赖PIL和tesseract-ocr库 本地环境是ubuntu,下面说一下 具体步骤: 2.7 1.安装PIL: 直接使用pip 安装: pip install Pillow 2.安装tesseract-ocr: apt-get install tesserac

  • python识别文字(基于tesseract)代码实例

    这篇文章主要介绍了python识别文字(基于tesseract)代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Ubuntu版本: 1.tesseract-ocr安装 sudo apt-get install tesseract-ocr 2.pytesseract安装 sudo pip install pytesseract 3.Pillow 安装 sudo pip install pillow 开始写代码: from PIL impo

  • python批量识别图片指定区域文字内容

    Python批量识别图片指定区域文字内容,供大家参考,具体内容如下 简介 对于一张图片,需求识别指定区域的内容 1.截取原始图上的指定图片当做模板 2.根据模板相似度去再原始图片上识别准确坐标 3.根据坐标剪切出指定位置图片,也就是所需的内容区域 4.对指定位置图片进行ocr识别 环境 Ubuntu18.04 Python2.7 所需Python模块 1.aircv 用于识别模板再原始图的位置坐标 pip install aircv 2.Pillow 用于剪裁图片 pip install Pil

  • 如何利用Python识别图片中的文字

    一.前言 不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制.或者像百度文档一样,只能复制一部分,这个时候我们就会选择截图保存.但是当我们想用到里面的文字时,还是要一个字一个字打出来.那么我们能不能直接识别图片中的文字呢?答案是肯定的. 二.Tesseract 文字识别是ORC的一部分内容,ORC的意思是光学字符识别,通俗讲就是文字识别.Tesseract是一个用于文字识别的工具,我们结合Python使用可以很快的实现文字识别.但是在此之前我们需

  • 如何利用Python识别图片中的文字详解

    一.Tesseract 文字识别是ORC的一部分内容,ORC的意思是光学字符识别,通俗讲就是文字识别.Tesseract是一个用于文字识别的工具,我们结合Python使用可以很快的实现文字识别.但是在此之前我们需要完成一个繁琐的工作. (1)Tesseract的安装及配置 Tesseract的安装我们可以移步到该网址 https://digi.bib.uni-mannheim.de/tesseract/,我们可以看到如下界面: 有很多版本供大家选择,大家可以根据自己的需求选择.其中w32表示32

  • Python基于百度API识别并提取图片中文字

    利用百度 AI 开发平台的 OCR 文字识别 API 识别并提取图片中的文字.首先需注册获取 API 调用的 ID 和 key,步骤如下: 打开百度AI开放平台,进入控制台中的文字识别应用(需要有百度账号). 创建一个应用,并进入管理应用,记下 AppID, API Key, Secrect Key,调用 API需用到. 最后安装 python 的百度ai接口的的库 pip install baidu-aip 以下是代码实现,需将所有识别的图片放进名为 picture 的文件夹. #!/usr/

  • Python实现繁體转为简体的方法示例

    本文实例讲述了Python实现繁體转为简体的方法.分享给大家供大家参考,具体如下: 这里需要用到两个文件,可以点击此处本站下载源文件:zh_wiki.py  和 langconv.py 或者从github下载: https://github.com/csdz/nstools/tree/master/zhtools 转换函数: from langconv import * def tradition2simple(line): # 将繁体转换成简体 line = Converter('zh-han

随机推荐