[PYTHON] Sprachsynthese und Spracherkennung durch Microsoft Project Oxford

Seit dem 1. Mai 2015 hat Microsoft im Rahmen eines Projekts namens Project Oxford eine API für maschinelles Lernen veröffentlicht.

[Gesichts-, Bild- und Spracherkennungs-API von Microsoft Project Oxford erhältlich](http://jp.techcrunch.com/2015/05/01/20150430microsofts-project-oxford-gives-developers-access-to- Gesichtsbild-und-Spracherkennung-apis /)

Dieses Mal werden wir die Sprach-API verwenden, die die Sprachsynthese und Spracherkennung durchführt.

Dies liegt daran, dass es einige Dienste gibt, die Sprachsynthese durchführen, aber wenn es um Spracherkennung geht, sind diejenigen, die als APIs verwendet werden können, ziemlich begrenzt. Meistens sind Android / iOS-SDKs, obwohl sie im Web verwendet werden können, browserabhängig. Google hat auch eine Sprach-API, aber ich kann keine offizielle Dokumentation finden, und das Limit von 50 Mal pro Tag ist ziemlich streng (Stand Juli 2015. Es scheint sich nicht zu erhöhen, wenn Sie bezahlen).

google_speech_api_quote.PNG

Das Projekt Oxford ist ab Juli 2015 eine öffentliche Beta-Version. Derzeit ist es kostenlos und kann ohne Einschränkungen verwendet werden (Japanisch wird ebenfalls unterstützt). Es gibt andere APIs wie die Gesichtserkennung als die Sprachsynthese. Versuchen Sie es also unter hier.

Umweltvorbereitung

Bereiten Sie zunächst die Umgebung für die Verwendung der Sprach-API vor. Für die Verwendung ist ein Microsoft Azure-Konto erforderlich. Registrieren Sie es daher.

Microsoft Azure

Es gibt eine Beschreibung, die für einen Monat gilt, aber da die diesmal verwendete Sprach-API kostenlos ist, denke ich, dass sie wahrscheinlich auch nach einem Monat in Ordnung ist.

Sobald Sie ein Konto erstellt haben, greifen Sie auf das Portal zu.

image

Wählen Sie hier die Sprach-API aus. Sie können auch die Face-API sehen, daher können Sie die Project Oxford-API mit derselben Methode erwerben (* derzeit KOSTENLOS).

image

Nach dem Kauf können Sie auf den Schlüssel zugreifen, der für den Zugriff auf die API erforderlich ist, indem Sie unten auf die Schaltfläche "Verwalten" klicken.

image

Zu diesem Zeitpunkt ist die Umgebungsvorbereitung abgeschlossen.

Verwendung der API

Natürlich gibt es ein SDK für API sowie andere Spracherkennungen, aber es kann auch im Web-API-Format verwendet werden. Sie können das SDK, das zu Ihrer Umgebung / Verwendung passt, wie folgt herunterladen.

Software Development Kit (SDK)

Die offizielle Dokumentation finden Sie weiter unten.

Ich möchte es schnell benutzen, weil es irgendwie nervig ist! Für diejenigen unter Ihnen, die unten eine einfache Bibliothek erstellt haben, versuchen Sie es bitte hier.

icoxfog417/pyoxford

Authentifizierung

Authentifizieren Sie sich zunächst mit dem Schlüssel, der für den API-Zugriff erforderlich ist, den Sie zuvor in der Umgebungsvorbereitung erhalten haben. Es gibt zwei Schlüssel, aber primär ist client_id und sekundär ist client_secret (geheimes Token). Unten finden Sie einen Beispielcode für die Authentifizierung (Auszug aus dem obigen Repository mit geringfügigen Änderungen).

    def authorize(self, client_id, client_secret):
        url = "https://oxford-speech.cloudapp.net//token/issueToken"

        headers = {
            "Content-type": "application/x-www-form-urlencoded"
        }

        params = urllib.parse.urlencode(
            {"grant_type": "client_credentials",
             "client_id": client_id,
             "client_secret": client_secret,
             "scope": "https://speech.platform.bing.com"}
        )

        response = requests.post(url, data=params, headers=headers)
        if response.ok:
            _body = response.json()
            return _body["access_token"]
        else:
            response.raise_for_status()

Das hier erhaltene Authentifizierungstoken (_body [" access_token "]) wird für die zukünftige Synthese / Erkennung verwendet.

Sprachsynthese

Versuchen wir nun die Sprachsynthese. Im Folgenden ist das Argument "Text" die zu sprachsynthetisierende Zeichenkette, und "Token" ist das zuvor erhaltene Authentifizierungstoken.

    def text_to_speech(self, text, token, lang="en-US", female=True):
        template = """
        <speak version='1.0' xml:lang='{0}'>
            <voice xml:lang='{0}' xml:gender='{1}' name='{2}'>
                {3}
            </voice>
        </speak>
        """

        url = "https://speech.platform.bing.com/synthesize"
        headers = {
            "Content-type": "application/ssml+xml",
            "X-Microsoft-OutputFormat": "riff-16khz-16bit-mono-pcm",
            "Authorization": "Bearer " + token,
            "X-Search-AppId": "07D3234E49CE426DAA29772419F436CA",
            "X-Search-ClientID": "1ECFAE91408841A480F00935DC390960",
            "User-Agent": "OXFORD_TEST"
        }
        name = "Microsoft Server Speech Text to Speech Voice (en-US, ZiraRUS)"
        data = template.format(lang, "Female" if female else "Male", name, text)

        response = requests.post(url, data=data, headers=headers)

        if response.ok:
            return response.content
        else:
            raise response.raise_for_status()

Wie Sie in der obigen Vorlage sehen können, wird die Anfrage in einem XML-Format für Sprache mit dem Namen SSML gesendet. Informationen hierzu finden Sie unter [Docomo-Site] [https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=text_to_speech&p_name=api_1). Die Grenze für Audio, das synthetisiert werden kann, beträgt 15 Sekunden. Das Ergebnis wird im Binärformat zurückgegeben. Wenn Sie dies also als Audiodatei (.wav usw.) speichern, können Sie das synthetisierte Audio hören.

Andere detaillierte Parameter sind wie folgt.

Spracherkennung

Als nächstes führen wir eine Spracherkennung durch. Lassen Sie es uns anhand des Inhalts (binär) erkennen, der von der Sprache so wie sie ist synthetisiert wurde. Es scheint, dass es verwendet werden soll, um kontinuierlich Text zu erstellen, während es erkannt wird, und es scheint, dass das Limit jeweils 10 Sekunden und insgesamt 14 Sekunden beträgt (angeforderte Einheit?).

   def speech_to_text(self, binary, token, lang="en-US", samplerate=8000, scenarios="ulm"):
        data = binary
        params = {
            "version": "3.0",
            "appID": "D4D52672-91D7-4C74-8AD8-42B1D98141A5",
            "instanceid": "1ECFAE91408841A480F00935DC390960",
            "requestid": "b2c95ede-97eb-4c88-81e4-80f32d6aee54",
            "format": "json",
            "locale": lang,
            "device.os": "Windows7",
            "scenarios": scenarios,
        }

        url = "https://speech.platform.bing.com/recognize/query?" + urllib.parse.urlencode(params)
        headers = {"Content-type": "audio/wav; samplerate={0}".format(samplerate),
                   "Authorization": "Bearer " + token,
                   "X-Search-AppId": "07D3234E49CE426DAA29772419F436CA",
                   "X-Search-ClientID": "1ECFAE91408841A480F00935DC390960",
                   "User-Agent": "OXFORD_TEST"}

        response = requests.post(url, data=data, headers=headers)

        if response.ok:
            result = response.json()["results"][0]
            return result["lexical"]
        else:
            raise response.raise_for_status()

Dies ist eine Anfrage mit einem leicht akrobatischen Gefühl, als ob sowohl GET / POST, dh die Informationen über die Datei im Abfrageparameter, als auch der Dateikörper im Körper, kombiniert werden.

Optional können Sie auch Folgendes angeben:

Der Rückgabewert gibt einige der erkannten Zeichenfolgen in absteigender Reihenfolge der Wahrscheinlichkeit zurück. Es ist als Array in "results" enthalten, wobei "lexical" die Zeichenfolge und "trust" die Genauigkeit ist.

Das ist alles für die Erklärung. Sie können die Stimme leicht synthetisieren / erkennen. Probieren Sie es also aus.

Recommended Posts

Sprachsynthese und Spracherkennung durch Microsoft Project Oxford
Spracherkennung durch Python MFCC
Verwenden Sie raspberryPi und julius (Spracherkennung). ① Mike
Verwenden Sie raspberryPi und Julius (Spracherkennung). ④ L Chika
Verwenden Sie raspberryPi und Julius (Spracherkennung). ⑤i2c Character Display Edition
Sprachdateierkennung durch Google Speech API v2 mit Python
Verwenden Sie raspberryPi und Julius (Spracherkennung). ③ Wörterbucherstellung