真快!几分钟就把视频语音识别为文本了,不到10行代码

虽然已经很简单了,但是对于程序员来说还是不够简洁,毕竟程序员都很“懒”,Whisper 虽说安装和调用已经很简单了,但还是需要独立安装 PyTorch 、ffmpeg 甚至 Rust。

将音视频文件中的音频转为文字内容,这个需求放到两年前还不大好实现,但是放到今天,几分钟就解决了。

听说有的公司为了抓取训练数据,已经把抖音、快手这些短视频平台上的视频扒了个遍,然后将其中的音频提取成文本,用作大数据模型的训练语料。

如果你有将视频或音频文件转文字的需要,不妨试一试今天提供的这个开源方案。比如搜索影视台词出现的时间点。

话不多说,进入正题。

Whisper

这个方案就是 OpenAI 开源的 Whisper,当然是用 Python 写的了,只需要简单安装几个包,然后几行代码一写,稍等片刻(根据你的机器性能和音视频长度不一),最终的文本内容就出来了,就是这么简单。

GitHub 仓库地址:https://github.com/openai/whisper

Fast-Whisper

虽然已经很简单了,但是对于程序员来说还是不够简洁,毕竟程序员都很“懒”,Whisper 虽说安装和调用已经很简单了,但还是需要独立安装 PyTorch 、ffmpeg 甚至 Rust。

于是,就有了更快、更简洁的 Fast-Whisper。Fast-Whisper 并不是简单封装了一下 Whisper,而是是使用 CTranslate2 重新实现 OpenAI 的 Whisper 模型,CTranslate2 是 Transformer 模型的快速推理引擎。

总结一下,也就是比 Whisper 更快,官方的说法是比 Whisper 快了 4-8 倍。不仅能支持 GPU ,还能支持 CPU,连我这台破 Mac 也能用。

GitHub 仓库地址:https://github.com/SYSTRAN/faster-whisper

使用起来就两步。

  1. 安装依赖包
pip install faster-whisper
  1. 写代码
from faster_whisper import WhisperModel

model_size = "large-v3"

# Run on GPU with FP16
model = WhisperModel(model_size, device="cuda", compute_type="float16")

# or run on GPU with INT8
# model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")
# or run on CPU with INT8
# model = WhisperModel(model_size, device="cpu", compute_type="int8")

segments, info = model.transcribe("audio.mp3", beam_size=5)

print("Detected language '%s' with probability %f" % (info.language, info.language_probability))

for segment in segments:
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))

没错,就是这么简单。

能做什么呢

正好有个朋友想做短视频,发一些鸡汤文学的视频,鸡汤就来自于一些名家访谈的视频。但是,他又不想把完整的视频看一遍,就想用最快的方式把文本内容弄下来,然后读文字,因为读文字要比看一篇视频快的多,而且还可以搜索。

我就说,连完整的看一篇视频的虔诚之心都没有,能经营好账号吗。

于是我给他做了一个,就是用的 Fast-Whisper。

客户端

客户端用 Swift ,只支持 Mac 端。

  1. 选则一个视频;
  2. 然后点击「提取文本」,这时会调用 Python 接口,需要等待一段时间;
  3. 加载解析出的文本以及出现的开始、截止时间;
  4. 选了一个开始时间和一个结束事件;
  5. 点击「导出」按钮,视频片段就导出了;

,时长00:10

服务端

服务端当然就是 Python ,然后用 Flask 包装一下,对外放开接口。

from flask import Flask, request, jsonify
from faster_whisper import WhisperModel

app = Flask(__name__)

model_size = "large-v2"
model = WhisperModel(model_size, device="cpu", compute_type="int8")


@app.route('/transcribe', methods=['POST'])
def transcribe():
    # Get the file path from the request
    file_path = request.json.get('filePath')

    # Transcribe the file
    segments, info = model.transcribe(file_path, beam_size=5, initial_prompt="简体")
    segments_copy = []
    with open('segments.txt', 'w') as file:
        for segment in segments:
            line = "%.2fs|%.2fs|[%.2fs -> %.2fs]|%s" % (
                segment.start, segment.end, segment.start, segment.end, segment.text)
            segments_copy.append(line)
            file.write(line + '\n')

    # Prepare the response
    response_data = {
        "language": info.language,
        "language_probability": info.language_probability,
        "segments": []
    }

    for segment in segments_copy:
        response_data["segments"].append(segment)

    return jsonify(response_data)


if __name__ == '__main__':
    app.run(debug=False)

以上就是个抛砖引玉的小工具,留着自己用用也足够了。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在微信的视频通话中将语音文字并显示在通话界面中可以通过以下步骤实现: 1. 使用微信的语音识别 API 识别语音并将其换为文本 2. 使用编程技巧将文本显示在通话界面中 3. 在手机上使用相应的编程语言(如Java或Kotlin)编写代码实现以上步骤 然而,微信并没有提供公开的语音识别 API,所以这样实现是不可的。建议使用第三方语音识别平台,如百度AI,腾讯AI等. ### 回答2: 要在微信的视频通话中将语音文字并显示在通话界面中,可以使用以下方法实现: 1. 首先,需要使用语音识别技术将语音换成文本。这可以通过调用移动设备上的语音识别API来实现。例如,可以使用iOS的Speech Framework或Android的SpeechRecognizer类来处理语音识别。 2. 在视频通话界面中,可以添加一个文本区域,用于显示识别到的文本。可以使用图形界面框架,如iOS的UIKit或Android的Android UI框架,在通话界面中创建一个文本视图或文本控件。 3. 使用编程技巧,将语音识别得到的文本实时更新到通话界面的文本区域。可以在语音识别回调函数中获取识别到的文本,然后将该文本设置为文本区域的内容。 以下是使用iOS的示例代码,实现在视频通话界面中将语音文字并显示在通话界面中: ```swift import UIKit import Speech class VideoCallViewController: UIViewController, SFSpeechRecognizerDelegate { @IBOutlet weak var transcriptTextView: UITextView! private var speechRecognizer: SFSpeechRecognizer? private var recognitionRequest: SFSpeechAudioBufferRecognitionRequest? private var recognitionTask: SFSpeechRecognitionTask? private let audioEngine = AVAudioEngine() override func viewDidLoad() { super.viewDidLoad() speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "zh-CN")) speechRecognizer?.delegate = self SFSpeechRecognizer.requestAuthorization { authStatus in OperationQueue.main.addOperation { if authStatus == .authorized { // 用户已授权使用语音识别 // 在需要进语音识别视频通话界面中,启动语音识别 self.startSpeechRecognition() } } } } func startSpeechRecognition() { // 设置语音识别的请求 recognitionRequest = SFSpeechAudioBufferRecognitionRequest() let inputNode = audioEngine.inputNode guard let recognitionRequest = recognitionRequest else { fatalError("Unable to create a SFSpeechAudioBufferRecognitionRequest object") } // 启动语音识别的回调任务 recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest) { result, error in guard let result = result else { return } // 将识别到的文本实时更新到文本区域 self.transcriptTextView.text = result.bestTranscription.formattedString } // 开始音频输入 let recordingFormat = inputNode.outputFormat(forBus: 0) inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, _) in self.recognitionRequest?.append(buffer) } audioEngine.prepare() try? audioEngine.start() } } ``` 以上是一个基本的实现方法,可以根据具体需求进适当的修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗者才子酒中仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值