[PYTHON] Erstellen einer Web-App für die Sprachtranskription

Umwandlung

Ich wollte die mit dem iPhone aufgenommene Tonquelle transkribieren, also habe ich die m4a-Datei in eine WAV-Datei konvertiert. Zuerst,

!pip install pydub

Als ich pydub installiert und versucht habe, es auszuführen,

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

Ich habe einen Fehler wie

Ich habe ffmpeg.exe von der folgenden Seite heruntergeladen Download FFmpeg Es war eine komprimierte Datei namens ffmpeg-97026-gea46b45e9c.7z.

Problems with AudioSegment.from_mp3

Ich habe die Datei auch an einen Ort in meinem Pfad verschoben.

$printenv
Oder
echo $PATH

Ich habe den Pfad mit überprüft.

Wenn Sie ffmpeg haben, müssen Sie wahrscheinlich nicht pydub verwenden.

pip install ffmpeg-python

Installieren Sie ffmpeg-python mit. Ich konnte erfolgreich wie folgt konvertieren.

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

Web-App

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):
    # .Überprüfen Sie, ob dies der Fall ist, und überprüfen Sie die Erweiterung
    #1 wenn OK, 0 wenn nicht
    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():
    
    #Feststellen, ob es sich bei der Anfrage um einen Beitrag handelt
    if request.method == 'POST':
        #Was tun, wenn die Datei nicht vorhanden ist?
        if 'file' not in request.files:
            make_response(jsonify({'result':'uploadFile is required.'}))
           
        #Datenabruf
        file = request.files['file']
        
        #Verarbeitung, wenn kein Dateiname vorhanden ist
        if file.filename == '':
            make_response(jsonify({'result':'filename must not empty.'}))
            
            
        #Dateiprüfung
        if file and allwed_file(file.filename):
            
            filename = file.filename


            #Datei speichern
            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>Audiodatei hochladen</div>
      <label>
      
      <div class="inputindex">Dateien auswählen</div>
      <input type="file" name="file" size="30" class="index">
      </label>
     <div>
      <button type="submit" formmethod="POST" class="index">Senden</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]"

↑ Fügen Sie den PATH der JSON-Datei zur Authentifizierung in PATH ein

Referenzseite

Cloud Speech-to-Text Erstellen wir einen Original-Sprachassistenten (3) - Cloud Speech API Aktive Ingenieure erklären, wie man mit Python eine Stimme erkennt [für Anfänger]

↓ Dieser Artikel wird empfohlen. [Untersuchen Sie verschiedene Google Cloud Speech-to-Text-APIs](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] Ich habe zwei Arten von Bibliotheken der Google Cloud Speech-to-Text-API verglichen

Websites mit zum Testen geeignetem Audio

Recommended Posts

Erstellen einer Web-App für die Sprachtranskription
Erstellen einer Webanwendung mit Flask ①
Erstellen einer Webanwendung mit Flask ③
Erstellen einer Webanwendung mit Flask ④
Erstellen Sie eine Webanwendung mit Django
Anzeigen von Matplotlib-Diagrammen in einer Webanwendung
[Python] Eine schnelle Webanwendung mit Bottle!
Erstellen einer Datenanalyseanwendung mit Streamlit
Führen Sie eine Python-Webanwendung mit Docker aus
Ich habe versucht, das Webanwendungs-Framework zu vergleichen
Ich habe eine WEB-Bewerbung bei Django gemacht
[GCP] Verfahren zum Erstellen einer Webanwendung mit Cloud-Funktionen (Python + Flask)
Erstellen einer interaktiven Anwendung mithilfe eines Themenmodells
Schritte zum Entwickeln einer Webanwendung in Python
Wovon ich beim Erstellen von Webanwendungen in einer Windows-Umgebung abhängig war
Versuchen Sie, eine Webanwendung mit Vue.js und Django (Mac Edition) zu erstellen - (1) Umgebungskonstruktion, Anwendungserstellung
4. Erstellen eines strukturierten Programms
Rückblick auf die Erstellung eines Webdienstes mit Django 1
Starten Sie mit Docker eine Python-Webanwendung auf Nginx + Gunicorn
Erstellung von Schabewerkzeugen
Rückblick auf die Erstellung eines Webdienstes mit Django 2
Webanwendung mit Flasche (1)
Erstellen eines Dataset Loader
Erstellen Sie eine Web-App, die Zahlen mit einem neuronalen Netzwerk erkennt
Der erste Schritt beim Erstellen einer serverlosen Anwendung mit Zappa
(Für Anfänger) Versuchen Sie, mit Django eine einfache Web-API zu erstellen
WEB-Anwendungsentwicklung mit Django-Entwicklung Teil 1-
Entwicklung von Webanwendungen mit Flask
Erstellen Sie eine Webanwendung mit Django
Webanwendung mit Python + Flask ② ③
Webanwendung mit Python + Flask ④
Lassen Sie uns die Analysesoftware von Wiire in eine WEB-Anwendung verwandeln! Erster Schritt!
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 1 erstellen
Erstellen Sie mit Chalice eine flaschen- / flaschenähnliche Webanwendung auf AWS Lambda
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 2 erstellen
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 3 erstellen
So stellen Sie eine Webanwendung in der Alibaba Cloud als Freiberufler bereit
Python, eine beliebte Web-Trinkparty, erkennt einen stillen Zustand und spielt eine Stimme.
Die Entwicklung einer Webanwendung ist noch weit entfernt
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 4 erstellen
Startete eine Webanwendung auf AWS mit Django und wechselte Jobs