TwilioとPythonによる音声認識


あなたの声の呼び出しを転写する能力を想像してください.我々がTheilioをDeepgramと結合することによってこの記事でそれをする方法を学ぶので、それ以上、見てください.
twilioでは、私たちは受信電話を受信し、着信コールを記録し、深いグラムの音声認識APIを使用してトランスクリプトを取得することができます.この例ではディープグラムPython SDKを使用します.
ここでは、電話をして、テキストにDeepgram声を使った後に、我々がブラウザーで見るもののスナップショットです.

始める


始める前に、プロジェクトで使用するDeepgram APIキーを生成することが不可欠です.我々は、我々に行くことができますDeepgram console . あなたが再びそれを取得することができなくなり、新しいものを作成する必要がありますので、それをコピーし、安全な場所に保管してください.このチュートリアルでは、Python 3.10を使用しますが、Deepgramは以前のPythonのバージョンをサポートしています.
必ず行きなさいTwilio そして、アカウントのサインアップ.我々は、音声機能で電話番号を購入する必要があります.
我々はまた、発信電話をかけるために2台の電話を必要とします、そして、もう一つは呼び出しを受けます.
我々のプロジェクトでは、我々のアプリケーションのwebhookとして機能する一時的なURLを提供するngrokを使用します.Ngrokは、ローカルに実行されているアプリケーションへの要求を転送します.ダウンロードできますhere .
次に、どこでも好きなディレクトリを作りましょう.
mkdir deepgram-twilio
それから、私たちがそれにものを加えることを始めることができるように、そのディレクトリに変えてください.
cd deepgram-twilio
また、プロジェクトとその依存関係を保持するための仮想環境を設定する必要があります.私たちはそれらについてもっと読むことができますhere つの方法を作成します.
重要ノート
Pythonでは仮想環境を使用するように勧められていますので、システムをインストールするのではなくコンテナ内にインストールすることができます.
依存関係をインストールするので、仮想環境がアクティブになることを確認してください.我々の仮想環境が命名されるならばvenv , その後、アクティブにします.
source venv/bin/activate
プロジェクトを実行することで依存関係をインストールしましょうpip 仮想環境内の端末からインストールします.
 pip install deepgram-sdk
 pip install twilio
 pip install python-dotenv
 pip install Flask 
 pip install 'flask[async]'  
 pip install pysondb 
今私たちのお気に入りのエディタを開くことができますと呼ばれるファイルを作成するdeepgram-twilio-call.py . コマンドラインから作成したい場合は、次のようにします.
touch deepgram-twilio-call.py

暗号


今すぐ楽しい部分に!スクリプトを開くdeepgram-twilio-call.py 次のコードを追加して、フラスコアプリケーションがエラーなしで実行されるようにします.
from flask import Flask

app = Flask(__name__)

@app.get("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()
端末にこれを入力してフラスコアプリケーションを実行しますpython deepgram-twilio-call.py .
次に、行くことによって、ブラウザのウィンドウをプルhttp://127.0.0.1:5000/ そして、我々はテキストを見るべきですHello World .
同時に、我々のアプリケーションを実行している新しいターミナルウィンドウとタイプを開きます :
ngrok http 127.0.0.1:5000
NGRKのURLをコピーして、電話番号に移動することによってtwilioに追加します.

'音声'セクションにスクロールして、Webhook、録音エンドポイントと私たちのngrok URLを追加し、保存します.このようにhttps://6d71-104-6-9-133.ngrok.io/recordings

私たちは/recordings いくつかのエンドポイント.
私たちのアプリケーションを実行し、電話を受けるためにこれらを必要とするように両方の端末を実行しておきます.
環境変数を保存しましょう.env 以下のファイルを指定します.
DEEPGRAM_API_KEY=[‘YOUR_API_KEY’]
RECEIVER_NUMBER=[‘PHONE_NUMBER_TO_RECEIVE_CALL’]
我々は置き換えることができますYOUR_API_KEY APIキーで、我々はDeepgramコンソールでサインアップすることから受け取りました、そしてPHONE_NUMBER_TO_RECEIVE_CALL 電話番号は電話番号です.
コードを置き換えましょうdeepgram-twilio-call.py 次のようにします.
import asyncio
import json
import os


from flask import Flask, request, render_template
from deepgram import Deepgram
from twilio.twiml.voice_response import Dial, VoiceResponse
from twilio.rest import Client
from pysondb import db
from dotenv import load_dotenv


app = Flask(__name__)

calls_db=db.getDb('calls')

load_dotenv()

@app.post("/inbound")
def inbound_call():
  response = VoiceResponse()
  dial = Dial(
      record='record-from-answer-dual',
      recording_status_callback='https://6d71-104-6-9-133.ngrok.io/recordings'
      )

  dial.number(os.getenv("RECEIVER_NUMBER"))
  response.append(dial)

  return str(response)
ここでは、ライブラリをインポートし、フラスコアプリケーションの新しいインスタンスを作成します.次に、新しいデータベースを作成しますcalls . 私たちは軽量JSONデータベースを使用しています.
私たちは/inbound エンドポイントは、我々は音声通話を行うことができます.パラメータrecord='record-from-answer-dual' 私たちはデュアルコールまたは別の電話をかけることができる電話をするのに役立ちます.
次に、我々/recordings 下記のルートは、我々は我々の呼び出しの録音を取得し、音声を転写する音声認識を使用してテキスト機能にディープグラムのスピーチにタップします.もしresults を返します.utterances . 次に、utterancescalls データベース.
@app.route("/recordings", methods=['GET', 'POST'])
async def get_recordings():
   deepgram = Deepgram(os.getenv("DEEPGRAM_API_KEY"))

   recording_url = request.form['RecordingUrl']
   source = {'url': recording_url}
   transcript_data = await deepgram.transcription.prerecorded(source, {'punctuate': True,
                                                                       'utterances': True,
                                                                       'model': 'phonecall',
                                                                       'multichannel': True
                                                            })


   if 'results' in transcript_data:
       utterances = [
           {
               'channel': utterance['channel'],
               'transcript': utterance['transcript']
           } for utterance in transcript_data['results']['utterances']
       ]

       calls_db.addMany(utterances)

       return json.dumps(utterances, indent=4)

どのように発言がフォーマットされたかを見ることができます.
[{'channel': 0, 'transcript': 'Hello?', 'id': 288397603074461838}, 
{'channel': 1, 'transcript': 'Hello?', 'id': 109089630999017748}, 
{'channel': 0, 'transcript': "Hey. How's it going? It's good to hear from you.", 'id': 124620676610936565}, 
{'channel': 0, 'transcript': 'Thanks. You too.', 'id': 182036969834868158}, 
{'channel': 1, 'transcript': 'Thanks. You too.', 'id': 817052835121297399}]
最後に、追加しましょう/transcribe ルートとテンプレートフォルダindex.html テキストトランスクリプトに私たちの携帯電話の音声が表示されますファイル.
Pythonファイルで、次のコードを追加します.このコードは、データベースからテキストへのリンクを取得し、HTMLテンプレートでレンダリングします.
@app.route("/transcribe", methods=['GET', 'POST'])
def transcribe_call():
   context = calls_db.getAll()
   return render_template("index.html", context=context )


if __name__ == "__main__":
   app.run(debug=True)
プロジェクトディレクトリにフォルダを作成するtemplates を追加し、index.html ファイル.そのファイルで次のHTMLとJUMPコードを追加します.
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
</head>
<body>
   {% for c in context %}
       {{ c.transcript }} <br/>
   {% endfor %}
</body>
</html>
ここでは、すべての転写物をループし、画面上に表示されます.
最後に、電話をして、あなたの非twilio電話を使って、あなたが環境変数で提供される電話番号で電話会話を始めるようにしましょうRECEIVER_NUMBER . 我々は、呼び出しを受けて、会話に従事することができなければなりません.ハングアップした後、我々のブラウザに転写が表示されます.
トゥイリオとDeepgramでテキストパイソンプロジェクトへのスピーチを構築することにおめでとう!何か質問があれば、Twitterで私たちに手を伸ばす自由にしてください.