[PYTHON] Créer une application Web pour la transcription vocale

conversion

Je voulais transcrire la source sonore enregistrée avec l'iphone, j'ai donc converti le fichier m4a en fichier wav. Premier,

!pip install pydub

Quand j'ai installé pydub et essayé de l'exécuter,

 [Errno 2] No such file or directory: 'ffprobe': 'ffprobe'

J'ai une erreur comme

J'ai téléchargé ffmpeg.exe à partir du site suivant Download FFmpeg Il s'agissait d'un fichier compressé appelé ffmpeg-97026-gea46b45e9c.7z.

Problems with AudioSegment.from_mp3

J'ai également déplacé le fichier vers un emplacement dans mon PATH.

$printenv
Ou
echo $PATH

J'ai vérifié le PATH avec.

Si vous avez ffmpeg, je ne pense pas que vous ayez besoin d'utiliser pydub,

pip install ffmpeg-python

Installez ffmpeg-python avec. J'ai pu convertir avec succès comme suit.

import ffmpeg
stream = ffmpeg.input("sample.m4a")
stream = ffmpeg.output(stream, 'output.wav')
ffmpeg.run(stream)

application web

server.py


from flask import Flask, render_template, request,send_file,after_this_request,make_response,jsonify,redirect, url_for, send_from_directory
import pandas as pd
import os
import ffmpeg
import wave

app = Flask(__name__)

UPLOAD_DIR = './uploads'
ALLOWED_EXTENSIONS = set(['m4a','mp3','wav',])
app.config['UPLOAD_FOLDER'] = UPLOAD_DIR


@app.route('/')
def hello():
    return render_template('index.html')


def allwed_file(filename):
    # .Vérifiez s'il y en a et vérifiez l'extension
    #1 si OK, 0 sinon
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS



def transcribe_file(speech_file,num):
    """Transcribe the given audio file."""
    from google.cloud import speech
    from google.cloud.speech import enums
    from google.cloud.speech import types
    client = speech.SpeechClient()

    with open(speech_file, 'rb') as audio_file:
        content = audio_file.read()

    if speech_file.encode == 'flac':
        encode = speech.enums.RecognitionConfig.AudioEncoding.FLAC
    elif speech_file.encode == 'wav':
        encode = speech.enums.RecognitionConfig.AudioEncoding.LINEAR16
    elif speech_file.encode == 'ogg':
        encode = speech.enums.RecognitionConfig.AudioEncoding.OGG_OPUS
    elif speech_file.encode == 'amr':
        encode = speech.enums.RecognitionConfig.AudioEncoding.AMR
    elif speech_file.encode == 'awb':
        encode = speech.enums.RecognitionConfig.AudioEncoding.AMR_WB
    else:
        encode = speech.enums.RecognitionConfig.AudioEncoding.LINEAR16



    audio = types.RecognitionAudio(content=content)
    config = types.RecognitionConfig(
        encoding=encode,
        
        sample_rate_hertz=num,
        language_code='ja-JP')
    

    response = client.recognize(config, audio)
    
    result_list=[]
    for result in response.results:
        
        result_list.append(result.alternatives[0].transcript)
        
    
    

    return result_list
    
@app.route('/result', methods=['POST'])
def uploads_file():
    
    #Déterminer si la demande est un message
    if request.method == 'POST':
        #Que faire si le fichier n'existe pas
        if 'file' not in request.files:
            make_response(jsonify({'result':'uploadFile is required.'}))
           
        #Récupération de données
        file = request.files['file']
        
        #Traitement lorsqu'il n'y a pas de nom de fichier
        if file.filename == '':
            make_response(jsonify({'result':'filename must not empty.'}))
            
            
        #Contrôle de fichier
        if file and allwed_file(file.filename):
            
            filename = file.filename


            #Enregistrer le fichier
            file.save(os.path.join(app.config['UPLOAD_FOLDER'],filename))
            
            
            stream = ffmpeg.input("uploads/" + filename)
            stream = ffmpeg.output(stream, 'output1.wav')
            ffmpeg.run(stream)

            wfile = wave.open('output1.wav', "r")
            frame_rate = wfile.getframerate()
            print(frame_rate)
            result_list = transcribe_file('output1.wav',frame_rate)
            
            
            os.remove('output1.wav')

            return render_template('result.html',result_list=result_list)

            
            
    return  



if __name__ == "__main__":
    app.run(debug=True)

index.html


<!DOCTYPE html>
<html lang="ja">
  <head>
    
  </head>
  <body>
  <div class="index">
    <form method="post" action="/result" enctype="multipart/form-data" class="index">
      <div>Télécharger un fichier audio</div>
      <label>
      
      <div class="inputindex">Sélectionnez les fichiers</div>
      <input type="file" name="file" size="30" class="index">
      </label>
     <div>
      <button type="submit" formmethod="POST" class="index">Envoyer</button>
      </div>
    </form>
    </div>
 </body>
</html>

result.html


<html lang="ja">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0">
    <link rel="stylesheet" href="{{url_for('static', filename='index.css')}}">
    
  </head>
  <body>
  
  {% for result in result_list %}
  <ul>{{result}}</ul>
  {% endfor %}
</body>
</html>
export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

↑ Mettez le PATH du fichier json pour l'authentification dans PATH

Site de référence

Cloud Speech-to-Text Faisons un assistant vocal original (3) - API Cloud Speech Les ingénieurs actifs expliquent comment reconnaître la voix avec Python [pour les débutants]

↓ Cet article est recommandé. [Étudiez diverses API Google Cloud Speech-to-Text](https://tech-blog.optim.co.jp/entry/2020/02/21/163000#%E5%AE%9F%E9% 9A% 9B% E3% 81% AB% E8% A9% A6% E3% 81% 97% E3% 81% A6% E3% 81% BF% E3% 82% 8B)

[Python] J'ai comparé l'utilisation de deux types de bibliothèques de l'API Google Cloud Speech-to-Text

Sites avec audio adaptés aux tests

Recommended Posts

Créer une application Web pour la transcription vocale
Créer une application Web avec Flask ①
Créer une application Web avec Flask ③
Créer une application Web avec Flask ④
Créer une application Web avec Django
Afficher les diagrammes matplotlib dans une application Web
[Python] Une application web rapide avec Bottle!
Création d'une application d'analyse de données à l'aide de Streamlit
Exécutez une application Web Python avec Docker
J'ai essayé de comparer le cadre d'application Web
J'ai fait une application WEB avec Django
[GCP] Procédure de création d'une application Web avec Cloud Functions (Python + Flask)
Création d'une application interactive à l'aide d'un modèle de rubrique
Étapes pour développer une application Web en Python
Ce à quoi j'étais accro lors de la création d'applications Web dans un environnement Windows
Essayez de créer une application Web avec Vue.js et Django (édition Mac) - (1) Construction d'environnement, création d'application
4. Création d'un programme structuré
Retour sur la création d'un service Web avec Django 1
Lancer une application Web Python sur Nginx + Gunicorn avec Docker
Création d'outils de grattage
Retour sur la création d'un service Web avec Django 2
Application Web utilisant Bottle (1)
Créer un chargeur de jeu de données
Créez une application Web qui reconnaît les nombres avec un réseau neuronal
La première étape de la création d'une application sans serveur avec Zappa
(Pour les débutants) Essayez de créer une API Web simple avec Django
Développement d'applications WEB à l'aide de django-development partie 1-
Développement d'applications Web avec Flask
Créer une application Web avec Django
Application Web avec Python + Flask ② ③
Application Web avec Python + Flask ④
Transformons le logiciel d'analyse de Wiire en une application WEB! Premier pas!
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 1
Créer une application Web de type Flask / Bottle sur AWS Lambda avec Chalice
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 2
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 3
Comment déployer une application Web sur Alibaba Cloud en tant que pigiste
Une fête populaire sur le Web, Python détecte un état silencieux et joue une voix.
Il y a un long chemin à parcourir pour développer une application web
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 4
Lancement d'une application Web sur AWS avec django et modification des tâches