python音频转文字调用baidu

python音频转文字调用的是百度智能云的接口,因业务需求会涉及比较多数字,所以这里做了数字的处理,可根据自己的需求修改。

python 复制代码
from flask import Flask, request, jsonify
import requests

from flask_limiter import Limiter

app = Flask(__name__)
limiter = Limiter(app)  # 初始化限流扩展

API_KEY = ""    #百度智能云上获取
SECRET_KEY = ""

import re
from cn2an import an2cn, transform

def replace_chinese_numbers(text):
    # 使用正则表达式匹配句子中的中文数字
    chinese_numbers = re.findall(r'[零一二三四五六七八九十百千万]+', text)
    
    # 遍历匹配到的中文数字,逐一替换为阿拉伯数字
    for chinese_number in chinese_numbers:
        arabic_number = transform(chinese_number, 'cn2an')
        text = text.replace(chinese_number, arabic_number)

    return text


@app.route('/transcribe', methods=['POST'])
@limiter.limit("5 per second")  # 设置限流规则为最多同时 5 个请求
def transcribe_audio():
    audio_data = request.data
    access_token = get_access_token()
    if not access_token:
        return jsonify({"error": "Error getting access token"}), 500

    url = "https://vop.baidu.com/server_api"

    headers = {
        'Content-Type': 'audio/pcm; rate=16000',  # 设置正确的 Content-Type
        'Accept': 'application/json',
    }

    params = {
        "cuid": "your_unique_id",  # 替换为你的用户唯一标识,随便写
        "token": access_token,
    }

    response = requests.post(url, headers=headers, params=params, data=audio_data)
    if response.status_code == 200:
        try:
            result = response.json()
            if "result" in result:
                transcript = result["result"][0]
                cleaned_transcript = replace_chinese_numbers(transcript)
                print(cleaned_transcript)
                return jsonify({"transcript": cleaned_transcript})
            else:
                return jsonify({"error": "No transcription found in the response"}), 500
        except UserWarning as warning:
            # 如果出现 UserWarning 异常,返回未处理的 transcript
            warnings.warn(str(warning))
            return jsonify({"transcript": transcript})
    else:
        return jsonify({"error": "Error in transcription request"}), 500

        
def get_access_token():
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
    response = requests.post(url, params=params)

    if response.status_code == 200:
        access_token = response.json().get("access_token")
        return access_token
    else:
        print("Error getting access token:", response.text)
        return None

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=16258)
相关推荐
CoderCodingNo2 分钟前
【GESP】C++四级/五级练习题 luogu-P1223 排队接水
开发语言·c++·算法
小郎君。20 分钟前
【无标题】
python
sycmancia26 分钟前
C++进阶01——示例
开发语言·c++
CoderCodingNo29 分钟前
【GESP】C++五级/四级练习题 luogu-P1413 坚果保龄球
开发语言·c++·算法
眼眸流转32 分钟前
Java代码变更影响分析(一)
java·开发语言
Yvonne爱编码36 分钟前
JAVA数据结构 DAY4-ArrayList
java·开发语言·数据结构
喵手1 小时前
Python爬虫实战:数据治理实战 - 基于规则与模糊匹配的店铺/公司名实体消歧(附CSV导出 + SQLite持久化存储)!
爬虫·python·数据治理·爬虫实战·零基础python爬虫教学·规则与模糊匹配·店铺公司名实体消岐
喵手1 小时前
Python爬虫实战:国际电影节入围名单采集与智能分析系统:从数据抓取到获奖预测(附 CSV 导出)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集数据csv导出·采集国际电影节入围名单·从数据抓取到获奖预测
Next_Tech_AI1 小时前
别用 JS 惯坏了鸿蒙
开发语言·前端·javascript·个人开发·ai编程·harmonyos
chillxiaohan1 小时前
GO学习记录——多文件调用
开发语言·学习·golang