音频文字转写

发布时间 2023-09-20 15:31:51作者: HaruSuzumiya

领导提了一个需求,有没有办法把3-5分钟音频转成文字,用来判断这个音频包含的预期关键词覆盖率,我一寻思这不简单,很多公司提供相关的服务,花钱就行了。领导又说,开源的有吗,有的话能做到什么程度呢。那还是调研一番吧。

1.科大讯飞:

使用语音转写api进行测试,一段五分钟的纯中文音频转写大概要30秒左右完成,准确率98%左右,收费是按照音频时长累计,大概是20小时以内约5元/小时,100小时约3.5元/小时,1000小时以上约2.4元/小时。接着测试了一段中英文夹杂的歌曲,很遗憾没有办法识别歌中的英文部分(测试结果附在最下方,根据测试日期不一样结果可能有所不同,仅供参考)

2.百度ai:

百度ai也有相关的接口,同样进行测试,一段五分钟的纯中文音频转写大概要30秒左右完成,准确率98%左右,收费价格也是音频时长累计,价格1000小时以内2元每小时,1000小时以上1.2元每小时,差不多是科大讯飞的一半,同样没有办法识别中英文夹杂的歌曲。

看到这样的测试结果有点懵,收费不便宜,关键没有办法覆盖使用场景,看看有什么开源的方案吧。

3.speech_recognition:

speech_recognition是google提供的一个开源语音识别库。目前支持的文件类型有:

WAV: 必须是 PCM/LPCM 格式

AIFF

AIFF-C

FLAC: 必须是初始 FLAC 格式;OGG-FLAC 格式不可用,

如果要转写mp3格式的文件需要先进行格式转换。

安装语音类型转换库:pip install pydub;

安装SpeechRecognition : pip install SpeechRecognition -i https://pypi.tuna.tsinghua.edu.cn/simple;

 

import speech_recognition as sr
from pydub import AudioSegment
import urllib.request
import os
# 设置音频文件的位置
# Load the audio file
current_dir=current_dir = os.path.dirname(os.path.abspath(__file__));
file_path = os.path.join(current_dir, '', 'girl.mp3') 
# 下载远程文件到本地
#url = "https://yewen0112.oss-cn-shanghai.aliyuncs.com/video-mini/audio_20230417.mp3"
#res =urllib.request.urlretrieve(url, file_path)

# Convert to WAV format
audio_file = AudioSegment.from_mp3(file_path)
file_path_wav = os.path.join(current_dir, '', 'audio.wav')  
audio_file = audio_file.set_frame_rate(16000)
audio_file = audio_file.set_channels(1)
audio_file = audio_file.set_sample_width(2)
audio_file_wav = audio_file.export(file_path_wav, format="wav")

# 创建 SpeechRecognition 对象
r = sr.Recognizer()

# 读取音频文件
with sr.AudioFile(file_path_wav) as source:
    audio = r.record(source)

# 识别音频文件
try:
    record=r.recognize_google(audio, language='zh-CN')
    print(record)
    learning_quality_keywords = ['恭喜', '发财']
    # 匹配关键词
    learning_quality_count = sum(keyword in record for keyword in learning_quality_keywords)
    print(learning_quality_count)
except sr.UnknownValueError:
    raise 'Google Speech Recognition could not understand audio'
except sr.RequestError as e:
    print("Could not request results from Google Speech Recognition service" + format(e))

  

 4.whisper:

whisper是OpenAI发布的一个语音识别模型。与 DALLE-2 和 GPT-3 不同,Whisper 是一个免费的开源模型。whisper是一种自动语音识别模型,基于从网络上收集的 680,000 小时多语言数据进行训练。根据 OpenAI的介绍,该模型对口音、背景噪音和技术语言具有很好的鲁棒性。此外,它还支持 99 种不同语言的转录和从这些语言到英语的翻译。git地址:https://github.com/openai/whisper。

安装ffmpeg:推荐选择合适版本包解压安装。

 安装whisper :pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git。

whisper提供了五种不同大小的模型,越小的模型转写速度越快,但相对的精确度会降低。

import os
import whisper
import opencc 
# 设置音频文件的位置
current_dir=current_dir = os.path.dirname(os.path.abspath(__file__));
file_path = os.path.join(current_dir, '', 'girl.mp3')  

#选择模型medium
model = whisper.load_model("medium")

result = model.transcribe(file_path)
record=result["text"]
cc = opencc.OpenCC('t2s')
record=cc.convert(record)
print(record)
learning_quality_keywords = ['恭喜', '发财']
# 匹配关键词
learning_quality_count = sum(keyword in record for keyword in learning_quality_keywords)
print(learning_quality_count)

  

测试结果汇总如下,最后选取了whisper,很难想象开源的方案比收费的准确率高这么多,感叹下现在ai技术发展之迅猛。

测试平台 测试内容 测试结果
科大讯飞 挥着翅膀的女孩(容祖儿) 嗯,还行,一个懵懂的女孩遇到爱。不懂爱,从过去到现在直到他也离开留我在云海徘徊,明白没人能去的,他曾给我的信赖,西北风就出来了,好不能一直以来别人给我用的你,你没有见过我。嗯嗯,就算风雨覆盖,我也不怕重来,嗯,我已不是那个懵懂的女孩遇到爱。因为爱爱人心深爱风雨来不避开,谦虚把头低下来,像沙鸥来去钱,只为寻一个妻子。生命于静的看我有那种精彩病例没有地方,我心里面想李正卿归怎么说?从勇敢的女孩,我朋友去。之前和您申请交往,对这件事说世界之女主的命,美美的开我要每周竞赛,美美美美美美美美美美美美美美美对不是什么勇敢的?女生。我不会孤单一为你都在嗯嗯嗯嗯嗯嗯。
百度ai 挥着翅膀的女孩(容祖儿) 嗯,还行,一个懵懂的女孩遇到爱。不懂爱,从过去到现在直到他也离开留我在云海徘徊,明白没人能去的,他曾给我的信赖,西北风就出来了,好不能一直以来别人给我用的你,你没有见过我。嗯嗯,就算风雨覆盖,我也不怕重来,嗯,我已不是那个懵懂的女孩遇到爱。因为爱爱人心深爱风雨来不避开,谦虚把头低下来,像沙鸥来去钱,只为寻一个妻子。生命于静的看我有那种精彩病例没有地方,我心里面想李正卿归怎么说?从勇敢的女孩,我朋友去。之前和您申请交往,对这件事说世界之女主的命,美美的开我要每周竞赛,美美美美美美美美美美美美美美美对不是什么勇敢的?女生。我不会孤单一为你都在嗯嗯嗯嗯嗯嗯。
whisper-small 挥着翅膀的女孩(容祖儿) 当我还是一个懵懂的女孩遇到爱不懂爱冲过去到现在直到她也离开留我在云海徘徊明白没人能取代她曾给我的心来See me flyI'm proud to fly that high不能一直依赖别人给我拥挡You leave me I can flyI'm singing in the sky就算风雨覆盖我也不怕冲啊 我已不是那个懵懂的女孩遇到爱用力爱任性真爱风雨来不避开千许把头低下来向下偶来去添地只为寻一个奇迹See me flyI'm proud to fly that high生命已经打开我要你种精彩Believe me I can flyI'm singing in the sky曾经对我说所勇敢的女孩我盼留一天能和你相见骄傲地对着天空说是接着你的风Let me flyI'm proud to fly that high生命已经打开我要你种精彩Believe me I can flyI'm singing in the sky你曾经对我说所勇敢的女孩我不会孤单以为你独自
whisper-medium 挥着翅膀的女孩(容祖儿) 当我还是一个懵懂的女孩遇到爱 不懂爱从过去到现在直到她也离开留我在云海徘徊明白没人能取代她曾给我的心来See me flyI'm proud to fly up high不能一直依赖别人给我拥戴Believe me I can flyI'm singing in the sky就算风雨覆盖我怕重来我已不是那个懵懂的女孩遇到爱 用力爱任性 真爱 风雨来不避开 谦虚把头低下来像沙鸥来去天地只为寻一个奇迹See me flyI'm proud to fly up high生命已经打开我要你总精彩Believe me I can flyI'm singing in the sky你曾经对我说做勇敢的女孩我盼有一天能和你相见骄傲地对著天空说世界正你的风Let me flyI'm proud to fly up high生命已经打开我要你总精彩Believe me I can flyI'm singing in the sky你曾经对我说做勇敢的女孩我不会孤单以为你都在