Code Monkey home page Code Monkey logo

fastapi-paddlespeech-audio-to-text's Introduction

FastAPI PaddleSpeech 语音转文字

目的

最近尽调项目较多, 而且因为疫情原因而转至腾讯电话会议进行访谈,为了节省会议记录的时间,我将会议内容进行了录音(合法的情况下)并转换为文字的形式方便整理笔记。 我试过不同的现成产品,要么是收费贼贵,要么转换质量慎忧,于是乎,还是自己弄一个比较直接。

功能

  • 文件上传,分割(由于PaddleSpeech的限制,文件将分割至数个59秒的音频文件)
  • 转换进度显示
  • 音频自动转换至合适格式
  • 后台更新任务
  • 以csv格式输出

技术

  • FastAPI 用于前端网页
  • FFmpeg 用于转换、分割音频
  • PaddleSpeech 用于音频转换
  • Celery 用于后台任务

运行

终端下直接输入以下命令即可

docker-compose up -d --build

demo

注意:首次运行需要初始化,可能会转换失败。

过程&思路

  1. 先从网页的具体功能入手, 想要实现哪些功能(例如首页显示音频文件的基本信息、上传区域、文件过滤功能)
  2. 基于上述的功能,开始建立数据库(锁定使用sqlalchemy,sqlite3);
    • 既然使用到数据库,首先创建database.py用于初始化sqlalchemy,sqlite3
    • 新建models.py用于数据字段的创建,我最开始是先创建了Audio数据表用于记录上传文件的信息,Data数据表是后来要实现paddlespeech的转换功能才添加进去的,然后以audio_id作为两个数据表的关联字段。 schemas.py里面是用到了pydantic的, 这里主要是数据的输入、输出都希望遵循到pydantic的格式,这是fastapi独有的
    • 数据表之后就是新建crud.py用于数据库的写入和读取(最开始是不清楚需要什么写入和读取function的,后续慢慢地添加进去)
  3. 大的框架有了之后,就开始设计html展示页面,这里用到了jinja2而不是vue.js等前后端分离哦技术(主要考虑到学习成本)
  4. 通过dropzone.js 实现了drag&drop上传文件的功能,然后后端利用FastAPI post响应,这里后端是通过FastAPI BackgroundTasks来实现后台FFmpeg分割音频文件的功能。 但音频转文字的功能非常好耗时,所以不能用BackgroundTasks来实现,所以后续引入了Celery来解决。 (Celery这里有个大坑,就是传递的任务参数中不能有object类型的,我试传递了sqlalchemy SessionPath路径都是失败)
  5. 最后就是弄dockkerfile 和 docker-compose.yml文件

参考

fastapi-paddlespeech-audio-to-text's People

Contributors

chinobing avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.