Maison > développement back-end > Tutoriel Python > Création d'un programme gratuit de transcription voix-texte d'IA à l'aide de Whisper

Création d'un programme gratuit de transcription voix-texte d'IA à l'aide de Whisper

Patricia Arquette
Libérer: 2024-10-24 08:13:02
original
1009 Les gens l'ont consulté

Dans le récent Meta Connect, Mark Zuckerberg a mentionné

Je pense que la voix sera un moyen beaucoup plus naturel d'interagir avec l'IA que le texte.

Je suis entièrement d'accord avec cela et c'est également beaucoup plus rapide que de taper votre question, surtout lorsque la plupart des solutions d'IA actuelles intègrent une sorte de chat.

Dans ce blog, nous allons créer une API et un site Web simple qui transcrit votre enregistrement en texte à l'aide du modèle Whisper d'OpenAI.

Commençons !


Plan d'API

Tout d’abord, nous devons créer l’API. Il ne contiendra qu'une seule méthode que nous appellerons transcribe_audio

Installons les modules suivants

pip install fastapi uvicorn python-multipart
Copier après la connexion
Copier après la connexion

Le code du plan ressemblera à ceci :

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)
Copier après la connexion
Copier après la connexion
  • Un seul point de terminaison appelé transcribe-audio renverra la langue et le texte transcrit
  • S'il y a une exception, une erreur est renvoyée.

La partie IA

Configuration du murmure

J'ai choisi de télécharger la version spécifique à CUDA de PyTorch avec torchaudio

pip install torch==1.11.0+cu113 torchaudio===0.11.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html
Copier après la connexion
Copier après la connexion

Une autre chose à noter est que si vous disposez d'un GPU Nvidia, vous devrez installer les pilotes CUDA pour que cette application puisse utiliser votre GPU. Sinon, il ciblera le processeur pour l'exécution et vous obtiendrez des résultats plus lents.

Ensuite, nous installons FASTAPI ainsi que les transformateurs, accélérons et numpy<2; La raison pour laquelle nous souhaitons utiliser une version inférieure de numpy est d'éviter les avertissements lors de l'exécution avec torch.

pip install transformers accelerate "numpy<2"
Copier après la connexion

Enfin, nous téléchargeons Whisper depuis git. J'ai trouvé que c'était la méthode la plus simple pour installer le modèle :

pip install git+https://github.com/openai/whisper.git
Copier après la connexion

Une fois tout installé, nous avons maintenant configuré le modèle Whisper

  • Importer les modules nécessaires
  • Définissez un répertoire temporaire dans lequel télécharger les fichiers audio
  • Vérifiez si l'appareil actuel est un appareil CUDA
  • Chargez le modèle de murmure « moyen ». Pour une liste complète des modèles, vous pouvez consulter ici
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()
Copier après la connexion

Maintenant, si vous exécutez l'application en utilisant uvicorn main:app --reload, vous verrez le modèle chargé avec succès (cela peut prendre un certain temps selon le modèle choisi). De plus, si vous avez installé les pilotes CUDA, vous verrez Using Device : cuda:0 dans les journaux

Transcription

Nous allons éditer la méthode transcribe_audio pour effectuer la transcription à l'aide du modèle

  • Enregistrez le fichier téléchargé dans le répertoire de téléchargement créé ci-dessus
  • Appelez la méthode de transcription sur le modèle
  • Extrayez le texte et la langue du résultat et renvoyez-les dans la réponse
  • Enfin, supprimez le fichier téléchargé
@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)
Copier après la connexion

Résultat

Maintenant, si vous exécutez l'API et effectuez une requête POST vers /transcribe-audio avec un fichier audio dans le formulaire data, vous obtiendrez ce qui suit :

pip install fastapi uvicorn python-multipart
Copier après la connexion
Copier après la connexion

La raison pour laquelle j'ai choisi « moyen » est qu'il fait un bon travail de ponctuation. Dans l'exemple suivant, il ajoute une virgule

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)
Copier après la connexion
Copier après la connexion

Il peut également comprendre différentes langues

pip install torch==1.11.0+cu113 torchaudio===0.11.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html
Copier après la connexion
Copier après la connexion

Ajout d'une intégration frontend simple

L'IA est merveilleuse. Je lui ai juste demandé de créer un site web simple pour tester cette API et il a régurgité beaucoup de code pour m'aider. Merci ChatGPT.

Vous pouvez trouver le code sur mon GitHub, mais voici à quoi ressemblera le produit final :

GIF omis d'un long texte :

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

Moi j'essaie l'espagnol :

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


Conclusion et enseignements

L'utilisation de modèles pré-entraînés est très facile à mettre en œuvre si vous disposez du matériel pour le prendre en charge. Pour moi, j'avais un processeur Intel 14700K et un GPU GTX 1080ti. Même si le GPU est un peu vieux, j'ai quand même obtenu des résultats impressionnants. C'était beaucoup plus rapide que prévu ; transcrire 30 secondes d'audio en 4 à 5 secondes environ.

Lors de l'événement Meta Connect, Mark Zuckerberg a fait une démonstration de ses nouvelles lunettes intelligentes alimentées par l'IA en ayant une conversation avec un hispanophone, et les lunettes ont affiché des sous-titres pour chaque personne dans leur langue respective. Plutôt cool ! Ceci est possible avec Whisper, mais ce n'est possible qu'avec le grand modèle. Alternativement, nous pouvons utiliser des bibliothèques externes comme DeepL pour effectuer la traduction pour nous après la transcription.

Maintenant, comment pouvons-nous insérer cela dans les lunettes ? ?

Un bon projet auquel ajouter ceci serait un service installé sur votre système d'exploitation qui écouterait une pression sur une touche macro ou quelque chose de similaire pour remplir un champ de texte avec un enregistrement audio à la demande. Cela pourrait être un joli projet parallèle ? Whisper medium n'est pas très grand mais vous pouvez également le remplacer par Whisper « turbo » ou « tiny ». J'imagine que ceux-ci peuvent fonctionner même sur des appareils mobiles. Hah, un autre projet parallèle ?

Si vous avez aimé ce blog, assurez-vous de l'aimer et de le commenter. Je vais m'intéresser davantage à l'exécution de modèles d'IA localement pour voir quelles sont les possibilités.

Dites bonjour ? à moi sur LinkedIn !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal