Qwen3-ASR-1.7B代码实例:Python调用API实现批量语音转写脚本

语音转写效率提升神器:本文将手把手教你用Python脚本批量调用Qwen3-ASR-1.7B的API接口,实现自动化语音转文字,让音频处理效率提升10倍!

1. 环境准备与快速部署

在开始编写批量转写脚本之前,我们需要先确保Qwen3-ASR-1.7B服务正常运行。这个语音识别模型支持52种语言和方言,包括30种通用语言和22种中文方言,识别精度相当不错。

1.1 检查服务状态

首先通过SSH连接到你的服务器,检查ASR服务是否正常运行:

# 查看服务状态
supervisorctl status qwen3-asR

# 如果服务未运行,启动服务
supervisorctl start qwen3-asr

# 检查7860端口是否监听
netstat -tlnp | grep 7860

1.2 安装Python依赖

我们的批量处理脚本需要以下几个Python库:

pip install requests tqdm pydub
  • requests:用于调用API接口
  • tqdm:显示处理进度条
  • pydub:音频文件格式处理和转换

2. 核心代码实现

现在我们来编写批量语音转写的Python脚本。这个脚本会自动遍历指定文件夹中的所有音频文件,逐个调用API进行转写,并保存结果。

2.1 基础API调用函数

首先实现最核心的API调用函数:

import requests
import json
import os
from tqdm import tqdm

class QwenASRClient:
    def __init__(self, base_url="http://localhost:7860"):
        self.base_url = base_url
        self.api_url = f"{base_url}/inference"
    
    def transcribe_audio(self, audio_path, language="auto"):
        """
        单文件语音转写
        :param audio_path: 音频文件路径
        :param language: 语言类型,默认auto自动检测
        :return: 转写结果
        """
        try:
            with open(audio_path, 'rb') as audio_file:
                files = {'audio': audio_file}
                data = {'language': language}
                
                response = requests.post(
                    self.api_url, 
                    files=files, 
                    data=data,
                    timeout=300  # 设置5分钟超时
                )
                
                if response.status_code == 200:
                    result = response.json()
                    return result.get('text', ''), result.get('language', '')
                else:
                    print(f"转写失败: {response.status_code} - {response.text}")
                    return None, None
                    
        except Exception as e:
            print(f"处理文件 {audio_path} 时出错: {str(e)}")
            return None, None

2.2 批量处理功能

接下来实现批量处理功能,支持多种音频格式:

def batch_transcribe(input_folder, output_file="transcription_results.txt", language="auto"):
    """
    批量转写文件夹中的所有音频文件
    :param input_folder: 输入文件夹路径
    :param output_file: 输出结果文件
    :param language: 语言类型
    """
    # 支持的文件格式
    supported_formats = ['.wav', '.mp3', '.flac', '.ogg', '.m4a']
    
    # 收集所有音频文件
    audio_files = []
    for file in os.listdir(input_folder):
        if any(file.lower().endswith(fmt) for fmt in supported_formats):
            audio_files.append(os.path.join(input_folder, file))
    
    if not audio_files:
        print("未找到支持的音频文件")
        return
    
    print(f"找到 {len(audio_files)} 个音频文件")
    
    # 初始化客户端
    client = QwenASRClient()
    
    # 开始批量处理
    results = []
    for audio_file in tqdm(audio_files, desc="处理进度"):
        text, detected_language = client.transcribe_audio(audio_file, language)
        
        if text:
            results.append({
                'file': os.path.basename(audio_file),
                'language': detected_language,
                'text': text
            })
    
    # 保存结果
    save_results(results, output_file)
    print(f"处理完成!结果已保存到 {output_file}")

def save_results(results, output_file):
    """保存转写结果到文件"""
    with open(output_file, 'w', encoding='utf-8') as f:
        for result in results:
            f.write(f"文件: {result['file']}\n")
            f.write(f"检测语言: {result['language']}\n")
            f.write(f"转写内容: {result['text']}\n")
            f.write("-" * 50 + "\n\n")

3. 高级功能扩展

基础的批量转写已经实现了,但我们还可以添加一些实用功能来提升脚本的实用性。

3.1 支持大文件分片处理

对于长时间的音频文件,我们可以实现自动分片处理:

from pydub import AudioSegment
import math

def split_large_audio(audio_path, chunk_length_ms=300000):
    """
    将长音频分割为5分钟一段的片段
    :param audio_path: 音频文件路径
    :param chunk_length_ms: 分片长度(毫秒)
    :return: 分片文件路径列表
    """
    audio = AudioSegment.from_file(audio_path)
    duration_ms = len(audio)
    chunks = math.ceil(duration_ms / chunk_length_ms)
    
    output_files = []
    for i in range(chunks):
        start_ms = i * chunk_length_ms
        end_ms = min((i + 1) * chunk_length_ms, duration_ms)
        
        chunk = audio[start_ms:end_ms]
        output_path = f"{audio_path}_chunk_{i+1}.wav"
        chunk.export(output_path, format="wav")
        output_files.append(output_path)
    
    return output_files

def transcribe_large_audio(audio_path, language="auto"):
    """处理大音频文件"""
    chunks = split_large_audio(audio_path)
    full_text = ""
    
    for chunk_file in chunks:
        text, _ = QwenASRClient().transcribe_audio(chunk_file, language)
        if text:
            full_text += text + " "
        
        # 清理临时文件
        os.remove(chunk_file)
    
    return full_text.strip()

3.2 结果导出多种格式

除了文本格式,我们还可以支持导出为CSV和JSON格式:

import csv
import json

def export_to_csv(results, output_file):
    """导出结果为CSV格式"""
    with open(output_file, 'w', encoding='utf-8', newline='') as f:
        writer = csv.writer(f)
        writer.writerow(['文件名', '检测语言', '转写内容'])
        
        for result in results:
            writer.writerow([
                result['file'],
                result['language'],
                result['text']
            ])

def export_to_json(results, output_file):
    """导出结果为JSON格式"""
    with open(output_file, 'w', encoding='utf-8') as f:
        json.dump(results, f, ensure_ascii=False, indent=2)

4. 完整使用示例

现在让我们看看如何实际使用这个批量转写脚本:

4.1 基本用法示例

# 最简单用法 - 自动检测语言
batch_transcribe(
    input_folder="/path/to/your/audio/files",
    output_file="transcription_results.txt"
)

# 指定语言类型(中文)
batch_transcribe(
    input_folder="/path/to/your/audio/files",
    output_file="chinese_results.txt",
    language="zh"
)

# 指定语言类型(英语)
batch_transcribe(
    input_folder="/path/to/your/audio/files", 
    output_file="english_results.txt",
    language="en"
)

4.2 处理特定方言

Qwen3-ASR-1.7B支持多种中文方言,你可以这样指定:

# 处理粤语音频
batch_transcribe(
    input_folder="/path/to/cantonese/audio",
    output_file="cantonese_results.txt",
    language="yue"  # 粤语代码
)

# 处理四川话音频  
batch_transcribe(
    input_folder="/path/to/sichuan/audio",
    output_file="sichuan_results.txt",
    language=" Sichuan"  # 四川话
)

5. 实用技巧与建议

在实际使用过程中,这里有一些实用建议可以帮助你获得更好的转写效果:

5.1 音频预处理建议

def optimize_audio_for_asr(audio_path, output_path):
    """
    优化音频质量以提升识别准确率
    """
    audio = AudioSegment.from_file(audio_path)
    
    # 标准化音量(-20dBFS)
    audio = audio.apply_gain(-20 - audio.dBFS)
    
    # 降噪(简单版本)
    audio = audio.low_pass_filter(3000)
    
    # 导出为WAV格式(ASR模型处理效果最好)
    audio.export(output_path, format="wav", parameters=["-ac", "1", "-ar", "16000"])
    
    return output_path

5.2 错误处理和重试机制

def transcribe_with_retry(audio_path, language="auto", max_retries=3):
    """带重试机制的转写函数"""
    for attempt in range(max_retries):
        try:
            text, detected_language = QwenASRClient().transcribe_audio(audio_path, language)
            if text:
                return text, detected_language
        except Exception as e:
            print(f"第{attempt+1}次尝试失败: {str(e)}")
            time.sleep(2)  # 等待2秒后重试
    
    print(f"文件 {audio_path} 转写失败,已达最大重试次数")
    return None, None

6. 总结

通过本文的Python脚本,你现在可以轻松实现批量语音转写功能了。这个脚本不仅支持基本的单文件转写,还提供了批量处理、大文件分片、多格式导出等实用功能。

主要收获

  • 学会了如何调用Qwen3-ASR-1.7B的API接口
  • 掌握了批量处理音频文件的完整流程
  • 了解了如何优化音频质量提升识别准确率
  • 获得了处理大文件和错误重试的实用技巧

下一步建议

  1. 尝试处理不同语言和方言的音频,体验模型的多语言能力
  2. 根据自己的需求调整批处理参数,比如并发数、超时时间等
  3. 将脚本集成到你的工作流程中,自动化处理日常的语音转写任务

这个批量转写脚本可以大大提升你的工作效率,特别是当你需要处理大量音频材料时。无论是会议录音、访谈内容还是语音笔记,现在都可以快速转换为文字了。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐