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 !
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
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)
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
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"
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
Une fois tout installé, nous avons maintenant configuré le modèle Whisper
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()
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
Nous allons éditer la méthode transcribe_audio pour effectuer la transcription à l'aide du modèle
@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)
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
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)
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
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 :
Moi j'essaie l'espagnol :
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!