Bonjour à tous, je suis Kite
Il y a deux ans, le besoin de convertir des fichiers audio et vidéo en contenu texte était difficile à réaliser, mais maintenant il peut être facilement résolu en quelques minutes seulement.
On dit que afin d'obtenir des données de formation, certaines entreprises ont entièrement exploré des vidéos sur des plateformes de vidéos courtes telles que Douyin et Kuaishou, puis ont extrait l'audio des vidéos et les ont converties sous forme de texte pour être utilisées comme corpus de formation pour modèles de mégadonnées.
Si vous avez besoin de convertir des fichiers vidéo ou audio en texte, vous pouvez essayer cette solution open source disponible aujourd'hui. Par exemple, vous pouvez rechercher les moments précis où apparaissent les dialogues dans les programmes de cinéma et de télévision.
Sans plus attendre, entrons dans le vif du sujet.
Cette solution est le Whisper open source d'OpenAI. Bien sûr, il est écrit en Python. Il vous suffit d'installer quelques packages, puis d'écrire quelques lignes de code et d'attendre un moment (en fonction des performances de votre machine). et la longueur audio et vidéo (différente), le contenu textuel final sort, c'est aussi simple que cela.
Adresse de l'entrepôt GitHub : https://github.com/openai/whisper
Bien qu'il soit assez simplifié, il n'est toujours pas suffisamment rationalisé pour les programmeurs. Après tout, les programmeurs ont tendance à préférer la simplicité et l’efficacité. Bien qu'il soit relativement facile à installer et à appeler Whisper, vous devez toujours installer PyTorch, ffmpeg et même Rust séparément.
C'est ainsi qu'est né Fast-Whisper, qui est plus rapide et plus simple que Whisper. Fast-Whisper n'est pas seulement une simple encapsulation de Whisper, mais une reconstruction du modèle Whisper d'OpenAI à l'aide de CTranslate2. CTranslate2 est un moteur d'inférence efficace pour le modèle Transformer.
Pour résumer, il est plus rapide que Whisper. Le communiqué officiel est qu'il est 4 à 8 fois plus rapide que Whisper. Non seulement il prend en charge le GPU, mais il prend également en charge le CPU, et même mon Mac cassé peut être utilisé.
Adresse de l'entrepôt GitHub : https://github.com/SYSTRAN/faster-whisper
L'utilisation ne prend que deux étapes.
pip install faster-whisper
from faster_whisper import WhisperModelmodel_size = "large-v3"# Run on GPU with FP16model = WhisperModel(model_size, device="cuda", compute_type="float16")# or run on GPU with INT8# model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")# or run on CPU with INT8# model = WhisperModel(model_size, device="cpu", compute_type="int8")segments, info = model.transcribe("audio.mp3", beam_size=5)print("Detected language '%s' with probability %f" % (info.language, info.language_probability))for segment in segments:print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
Oui, c'est aussi simple que cela.
Il se trouve qu'il y a un ami qui veut faire de courtes vidéos et publier des vidéos de littérature sur la soupe au poulet qui proviennent d'entretiens avec des personnes célèbres. Cependant, il ne voulait pas revoir la vidéo en entier, il voulait juste utiliser le moyen le plus rapide pour obtenir le contenu du texte, puis lire le texte, car lire du texte est beaucoup plus rapide que regarder une vidéo, et cela peut aussi être cherché.
Laissez-moi juste vous dire, si vous n'avez même pas la piété de regarder une vidéo complète, comment bien gérer un compte ?
Alors j'en ai fait un pour lui, en utilisant Fast-Whisper.
Le client utilise Swift et ne prend en charge que Mac.
Côté serveur
from flask import Flask, request, jsonifyfrom faster_whisper import WhisperModelapp = Flask(__name__)model_size = "large-v2"model = WhisperModel(model_size, device="cpu", compute_type="int8")@app.route('/transcribe', methods=['POST'])def transcribe():# Get the file path from the requestfile_path = request.json.get('filePath')# Transcribe the filesegments, info = model.transcribe(file_path, beam_size=5, initial_prompt="简体")segments_copy = []with open('segments.txt', 'w') as file:for segment in segments:line = "%.2fs|%.2fs|[%.2fs -> %.2fs]|%s" % (segment.start, segment.end, segment.start, segment.end, segment.text)segments_copy.append(line)file.write(line + '\n')# Prepare the responseresponse_data = {"language": info.language,"language_probability": info.language_probability,"segments": []}for segment in segments_copy:response_data["segments"].append(segment)return jsonify(response_data)if __name__ == '__main__':app.run(debug=False)
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!