Rumah >pembangunan bahagian belakang >Tutorial Python >Mencipta Program transkripsi suara-ke-teks AI Percuma menggunakan Whisper

Mencipta Program transkripsi suara-ke-teks AI Percuma menggunakan Whisper

Patricia Arquette
Patricia Arquetteasal
2024-10-24 08:13:021006semak imbas

Dalam Meta Connect baru-baru ini, Mark Zuckerberg menyebut

Saya rasa suara itu akan menjadi cara yang lebih semula jadi untuk berinteraksi dengan AI berbanding teks.

Saya benar-benar bersetuju dengan ini dan ia juga lebih pantas daripada menaip soalan anda, terutamanya apabila kebanyakan penyelesaian AI hari ini mempunyai beberapa jenis sembang yang dimasukkan ke dalam mereka.

Dalam blog ini, kami akan mencipta API dan tapak web ringkas yang menyalin rakaman anda ke dalam teks menggunakan model Whisper OpenAI.

Jom mulakan!


Pelan Tindakan API

Pertama, kita perlu mencipta API. Ia akan mengandungi hanya satu kaedah yang akan kami panggil transcribe_audio

Mari pasang modul berikut

pip install fastapi uvicorn python-multipart

Kod untuk pelan tindakan akan kelihatan seperti ini:

from fastapi import FastAPI, File, UploadFile
from fastapi.responses import JSONResponse

app = FastAPI()

@app.post("/transcribe-audio/")
async def transcribe_audio(file: UploadFile = File(...)):
    try:
        transcribed_text = "Call Whisper here"

        return JSONResponse(content={"lang": "en", "transcribed_text": transcribed_text})

    except Exception as e:
        return JSONResponse(content={"error": str(e)}, status_code=500)
  • Satu titik akhir yang dipanggil transcribe-audio akan mengembalikan bahasa dan teks yang ditranskripsikan
  • Jika terdapat pengecualian, ralat dikembalikan.

Bahagian AI

Sediakan Whisper

Saya telah memilih untuk memuat turun versi PyTorch khusus CUDA bersama-sama dengan torchaudio

pip install torch==1.11.0+cu113 torchaudio===0.11.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html

Perkara lain yang perlu diambil perhatian ialah jika anda mempunyai GPU Nvidia, anda perlu memasang pemacu CUDA untuk aplikasi ini menggunakan GPU anda. Jika tidak, ia akan menyasarkan CPU untuk pelaksanaan dan anda akan mendapat hasil yang lebih perlahan.

Seterusnya, kami memasang FASTAPI serta transformer, memecut dan numpy<2; Sebab kami ingin menggunakan versi numpy yang lebih rendah adalah untuk mengelakkan amaran semasa berjalan dengan obor.

pip install transformers accelerate "numpy<2"

Akhir sekali, kami memuat turun Whisper dari git. Saya dapati ini adalah kaedah yang lebih mudah untuk memasang model:

pip install git+https://github.com/openai/whisper.git

Dengan semua yang dipasang, kami kini menyediakan model bisikan

  • Import modul yang diperlukan
  • Tetapkan direktori temp untuk memuat naik fail audio ke
  • Semak sama ada peranti semasa ialah peranti CUDA
  • Muatkan model bisikan "sederhana". Untuk senarai penuh model anda boleh semak di sini
from fastapi import FastAPI, File, UploadFile
from fastapi.responses import JSONResponse

import torch

import whisper

from pathlib import Path
import os

# Directory to save uploaded files
UPLOAD_DIR = Path("./uploaded_audios")
UPLOAD_DIR.mkdir(parents=True, exist_ok=True)

# check if the device is a cuda device, else use CPU
device = "cuda:0" if torch.cuda.is_available() else "cpu"
print(f"Using Device: {device}")

# for a full list of models see https://github.com/openai/whisper?tab=readme-ov-file#available-models-and-languages
model = whisper.load_model("medium", device=device)

app = FastAPI()

Kini jika anda menjalankan aplikasi menggunakan uvicorn main:app --reload, anda akan melihat model berjaya dimuatkan (ia mungkin mengambil sedikit masa bergantung pada model yang dipilih). Selain itu, jika anda telah memasang pemacu CUDA, anda akan melihat Menggunakan Peranti: cuda:0 dalam log

Transkripsi

Kami akan mengedit kaedah transcribe_audio untuk melaksanakan transkripsi menggunakan model

  • Simpan fail yang dimuat naik ke direktori muat naik yang dibuat di atas
  • Panggil kaedah transkripsi pada model
  • Ekstrak teks dan bahasa daripada hasil carian dan kembalikannya dalam respons
  • Akhir sekali, padamkan fail yang dimuat naik
@app.post("/transcribe-audio/")
async def transcribe_audio(file: UploadFile = File(...)):
    try:
       # Path to save the file
        file_path = f"{UPLOAD_DIR}/{file.filename}"

        # Save the uploaded audio file to the specified path
        with open(file_path, "wb") as f:
            f.write(await file.read())

        # transcribe the audio using whisper model
        result = model.transcribe(file_path)

        # Extract the transcription text from the result
        transcribed_text = result['text']

        return JSONResponse(content={"lang": result["language"], "transcribed_text": transcribed_text})

    except Exception as e:
        print(e.__cause__)
        return JSONResponse(content={"error": str(e)}, status_code=500)

    finally:
        # Optionally, remove the saved file after transcription
        os.remove(file_path)

Hasilnya

Kini jika anda menjalankan API dan melakukan permintaan POST ke /transcribe-audio dengan fail audio dalam data borang, anda akan mendapat perkara berikut:

pip install fastapi uvicorn python-multipart

Sebab saya memilih "sederhana" ialah ia berfungsi dengan baik dalam tanda baca. Dalam contoh berikut, ia menambahkan koma

from fastapi import FastAPI, File, UploadFile
from fastapi.responses import JSONResponse

app = FastAPI()

@app.post("/transcribe-audio/")
async def transcribe_audio(file: UploadFile = File(...)):
    try:
        transcribed_text = "Call Whisper here"

        return JSONResponse(content={"lang": "en", "transcribed_text": transcribed_text})

    except Exception as e:
        return JSONResponse(content={"error": str(e)}, status_code=500)

Ia juga boleh memahami bahasa yang berbeza

pip install torch==1.11.0+cu113 torchaudio===0.11.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html

Menambah Integrasi Frontend Mudah

AI sangat bagus. Saya hanya memintanya untuk membuat tapak web mudah untuk saya menguji API ini dan ia memuntahkan banyak kod untuk membantu saya. Terima kasih ChatGPT.

Anda boleh mencari kod dalam GitHub saya, tetapi beginilah rupa produk akhir:

GIF teks panjang yang ditinggalkan:

Creating a Free AI voice-to-text transcription Program using Whisper

Saya mencuba bahasa Sepanyol:

Creating a Free AI voice-to-text transcription Program using Whisper


Kesimpulan dan Pembelajaran

Menggunakan model pra-latihan adalah sangat mudah untuk dilaksanakan jika anda mempunyai perkakasan untuk menyokongnya. Bagi saya, saya mempunyai CPU Intel 14700K dan GPU GTX 1080ti. Walaupun GPU agak lama, saya masih mendapat hasil yang mengagumkan. Ia jauh lebih pantas daripada yang saya jangkakan; menyalin 30 saat audio dalam kira-kira 4-5 saat.

Dalam acara Meta Connect, Mark Zuckerberg menunjukkan cermin mata pintar berkuasa AI baharunya dengan mengadakan perbualan dengan penutur bahasa Sepanyol, dan cermin mata itu memaparkan sari kata untuk setiap orang dalam bahasa masing-masing. cukup keren! Ini boleh dilakukan menggunakan Whisper, namun ia hanya boleh dilakukan dengan model besar. Sebagai alternatif, kami boleh menggunakan perpustakaan luaran seperti DeepL untuk melaksanakan terjemahan untuk kami selepas kami menyalin.

Sekarang, bagaimanakah kita menyesuaikan cermin mata dalam ini? ?

Projek yang bagus untuk menambah ini ialah perkhidmatan yang dipasang pada OS anda yang akan mendengar penekanan kekunci makro atau sesuatu yang serupa untuk mengisi medan teks dengan rakaman audio atas permintaan. Ini boleh menjadi projek sampingan yang bagus? Sederhana Whisper tidak begitu besar tetapi anda juga boleh menggantikannya dengan Whisper "turbo" atau "tiny". Saya bayangkan ini boleh dijalankan walaupun pada peranti mudah alih. Hah, projek sampingan lain ?

Jika anda menyukai blog ini, pastikan anda menyukai dan mengulas. Saya akan lebih mendalami menjalankan model AI secara tempatan untuk melihat kemungkinannya.

Katakan Hai ? kepada saya di LinkedIn!

Atas ialah kandungan terperinci Mencipta Program transkripsi suara-ke-teks AI Percuma menggunakan Whisper. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn