当前位置:   article > 正文

Python 几分钟就把视频语音识别为文本了,不到10行代码_python whisper 实现视频语音转文本

python whisper 实现视频语音转文本

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. 写代码,
  1. from faster_whisper import WhisperModel
  2. model_size = "large-v3"
  3. # Run on GPU with FP16
  4. model = WhisperModel(model_size, device="cuda", compute_type="float16")
  5. # or run on GPU with INT8
  6. # model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")
  7. # or run on CPU with INT8
  8. # model = WhisperModel(model_size, device="cpu", compute_type="int8")
  9. segments, info = model.transcribe("audio.mp3", beam_size=5)
  10. print("Detected language '%s' with probability %f" % (info.language, info.language_probability))
  11. for segment in segments:
  12. print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))

没错,就是这么简单。

能做什么呢

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

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

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

客户端

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

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

,时长00:10

服务端

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

  1. from flask import Flask, request, jsonify
  2. from faster_whisper import WhisperModel
  3. app = Flask(__name__)
  4. model_size = "large-v2"
  5. model = WhisperModel(model_size, device="cpu", compute_type="int8")
  6. @app.route('/transcribe', methods=['POST'])
  7. def transcribe():
  8. # Get the file path from the request
  9. file_path = request.json.get('filePath')
  10. # Transcribe the file
  11. segments, info = model.transcribe(file_path, beam_size=5, initial_prompt="简体")
  12. segments_copy = []
  13. with open('segments.txt', 'w') as file:
  14. for segment in segments:
  15. line = "%.2fs|%.2fs|[%.2fs -> %.2fs]|%s" % (
  16. segment.start, segment.end, segment.start, segment.end, segment.text)
  17. segments_copy.append(line)
  18. file.write(line + '\n')
  19. # Prepare the response
  20. response_data = {
  21. "language": info.language,
  22. "language_probability": info.language_probability,
  23. "segments": []
  24. }
  25. for segment in segments_copy:
  26. response_data["segments"].append(segment)
  27. return jsonify(response_data)
  28. if __name__ == '__main__':
  29. app.run(debug=False)

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/620455
推荐阅读
相关标签
  

闽ICP备14008679号