[PYTHON] J'ai essayé l'authentification vocale Watson (Speech to Text)

Chose que tu veux faire

Essayez le discours de Watson au texte. Essayez d'exécuter l'exemple à partir du site de démonstration ci-dessous (https://www.ibm.com/blogs/watson/2016/07/getting-robots-listen-using-watsons-speech-text-service/)

Contexte

Watson's Voice Authentication (Speech to Text) pour créer Raspberry Pi Robo qui peut convertir le son vidéo en texte en temps réel Essayer.

L'objectif final est l'authentification et la transcription vocales avec Raspberry Pi 3 x Julius x Watson (Speech to Text), comme indiqué dans la figure ci-dessous. (http://qiita.com/nanako_ut/items/1e044eb494623a3961a5)

Cette fois, nous rechercherons la méthode d'authentification vocale watson dans la partie (4) de la figure ci-dessous. img20170324_14192489.jpg

environnement

supposition

Ce qui suit est supposé être prêt.

procédure

  1. Connectez-vous avec curl (téléchargement de fichier audio)
  2. Connectez-vous avec python Partie 1 (Télécharger un fichier audio)
  3. Connexion avec python Partie 2 (analyse vocale en temps réel avec connexion WebSocket)

■ Connectez-vous avec curl (télécharger un fichier audio)

1.1 Télécharger un fichier audio

Spécifiez le fichier vocal (test.wat) et téléchargez-le sur watson via une connexion HTTP

curl -X POST -u username:passward --header "Content-Type: audio/wav" --header "Transfer-Encoding: chunked" --data-binary @test.wav "https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?model=ja-JP_BroadbandModel"

1.2 Résultat de l'exécution

Quelque chose est revenu. Mais ... les personnages sont déformés ... Raspeye est UTF-8, et les caractères sont déformés en raison du résultat de l'analyse japonaise (S-JIS?)? ?? 20170331.PNG

■ Connexion avec python Partie 1 (télécharger un fichier audio)

Implémenté en référence à cette source d'exemple Getting robots to listen: Using Watson’s Speech to Text service

2.1 Entretien environnemental

bibliothèque python pour l'installation de watson watson-developer-cloud-0.23.0

installation de pip

Non requis si pip est déjà installé. Ce n'était pas dans le Rasppie que j'utilise, probablement parce que j'ai mis RASPBIAN JESSIE LITE dans Rasppie 3. .. ..

$ python -m pip -V
/usr/bin/python: No module named pip

$ sudo apt-get install python-pip
Reading package lists... Done
Building dependency tree
~ À mi-chemin ~

$ python -m pip -V
pip 1.5.6 from /usr/lib/python2.7/dist-packages (python 2.7)

mise à jour

$ sudo pip install -U pip
  Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB): 1.3MB downloaded
Installing collected packages: pip
  Found existing installation: pip 1.5.6
    Not uninstalling pip at /usr/lib/python2.7/dist-packages, owned by OS
Successfully installed pip
Cleaning up...

$ python -m pip -V
pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)

installation de watson-developer-cloud

$ sudo pip install --upgrade watson-developer-cloud
Collecting watson-developer-cloud
  Downloading watson-developer-cloud-0.23.0.tar.gz (52kB)
~ À mi-chemin ~
Successfully installed pysolr-3.6.0 requests-2.12.5 watson-developer-cloud-0.23.0

2.2 Programme d'exécution

Copiez le site référencé

watson_test1.py


from watson_developer_cloud import SpeechToTextV1
import json

stt = SpeechToTextV1(username="username", password="password")
audio_file = open("test1.wav", "rb")
print json.dumps(stt.recognize(audio_file, content_type="audio/wav"), indent=2)

2.3 Exécution

Quelque chose est revenu. Il semble que le texte soit renvoyé. Cependant, cela aurait dû être une voix plus longue, mais le texte a été coupé au milieu! ?? ??

{
  "results": [
    {
      "alternatives": [
        {
          "confidence": 0.438,
          "transcript": "so we know it's coming Julio just say yeah lost me grow mandatory right here shone like a great kid fifth grader etan Allemand planning his fifth critics "
        }
      ],
      "final": true
    }
  ],
  "result_index": 0
}

■ Connexion avec python Partie 2 (analyse vocale en temps réel avec connexion WebSocket)

Il semble que vous puissiez analyser la voix en temps réel en utilisant quelque chose appelé webSocket.

3.1 Qu'est-ce que webSocket?

(https://www.html5rocks.com/ja/tutorials/websockets/basics/) La spécification WebSocket définit une API qui établit une connexion «socket» entre un navigateur Web et un serveur. En termes simples, il existe une connexion persistante entre le client et le serveur, et vous pouvez commencer à envoyer des données de chaque côté à tout moment.

Il semble.

(http://www.atmarkit.co.jp/ait/articles/1111/11/news135.html) En HTML5, un nouveau standard de communication appelé "WebSocket" a été ajouté. Fonctionnalité

Une fois qu'une connexion est établie entre le serveur et le client, les données peuvent être échangées via une communication socket sans avoir connaissance de la procédure de communication, sauf si elles sont explicitement déconnectées. Un serveur avec une connexion WebSocket et tous les clients peuvent partager les mêmes données et envoyer et recevoir en temps réel. Dans la technologie de communication conventionnelle, un en-tête HTTP est ajouté pour chaque communication, donc en plus d'envoyer et de recevoir des données en fonction du nombre de connexions, une petite quantité de trafic est générée et des ressources sont consommées. WebSocket envoie une demande d'établissement de liaison du côté client pour continuer à utiliser la connexion lors de la première connexion. Le côté serveur utilise une connexion en renvoyant une réponse de prise de contact et continue. Il semble.

Je vois. .. ..

3.2 Amélioration environnementale

Installer la bibliothèque ws4py pour webSocket

$ sudo pip install ws4py
Collecting ws4py
  Downloading ws4py-0.3.5-py2-none-any.whl (40kB)
    100% |????????????????????????????????| 40kB 661kB/s
Installing collected packages: ws4py
Successfully installed ws4py-0.3.5

3.2 Programme d'exécution

Copiez le site référencé

watson_test2.py


from ws4py.client.threadedclient import WebSocketClient
import base64, time

class SpeechToTextClient(WebSocketClient):
    def __init__(self):
        ws_url = "wss://stream.watsonplatform.net/speech-to-text/api/v1/recognize"

        username = "username"
        password = "password"
        auth_string = "%s:%s" % (username, password)
        base64string = base64.encodestring(auth_string).replace("\n", "")

        try:
            WebSocketClient.__init__(self, ws_url,
                headers=[("Authorization", "Basic %s" % base64string)])
            self.connect()
        except: print "Failed to open WebSocket."

    def opened(self):
        self.send('{"action": "start", "content-type": "audio/l16;rate=16000"}')

    def received_message(self, message):
        print message

stt_client = SpeechToTextClient()
time.sleep(3)
stt_client.close()

3.3 Exécution

Les données vocales sont renvoyées.

$ python watson_test2.py
opend
Message received: {u'state': u'listening'}
sleep audio
Recording raw data 'stdin' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
Message received: {u'results': [{u'alternatives': [{u'confidence': 0.713, u'transcript': u'over the entire course of the scalp was it was all the guys that one rings before imagine '}], u'final': True}], u'result_index': 0}

3.4 Défis

Hmmm, même si c'est en temps réel, quelle que soit la quantité de données vocales que vous envoyez, vous ne pouvez recevoir que le premier message. Je pense que nous devons en savoir un peu plus pour savoir s'il existe des options ou comment transmettre les données.

finalement

Il semble que l'interface utilisateur de bluemix change régulièrement et que l'URL Speech to text est différente de l'exemple, et elle est toujours en cours de développement. L'inconvénient est qu'il faut du temps pour enquêter. .. ..

Recommended Posts

J'ai essayé l'authentification vocale Watson (Speech to Text)
J'ai essayé d'utiliser Azure Speech to Text.
J'ai essayé les champignons Pepper x IBM Bluemix Text to Speech
J'ai essayé de classer le texte en utilisant TensorFlow
J'ai essayé de déboguer.
J'ai essayé d'apprendre PredNet
J'ai essayé d'organiser SVM.
J'ai essayé d'implémenter PCANet
J'ai essayé de réintroduire Linux
Parler avec Python [synthèse vocale]
J'ai essayé de présenter Pylint
J'ai essayé de résumer SparseMatrix
jupyter je l'ai touché
J'ai essayé d'implémenter StarGAN (1)
J'ai essayé d'implémenter Deep VQE
J'ai essayé de créer l'API Quip
J'ai essayé de toucher Python (installation)
J'ai essayé de mettre en place une validation contradictoire
J'ai essayé d'expliquer l'ensemble de données de Pytorch
J'ai touché l'API de Tesla
J'ai essayé de m'organiser à propos de MCMC.
J'ai essayé d'implémenter Realness GAN
J'ai essayé de déplacer le ballon
J'ai créé un éditeur de texte simple en utilisant PyQt
J'ai essayé d'estimer la section.
J'ai essayé de créer un linebot (implémentation)
J'ai essayé de résumer la gestion des exceptions Python
J'ai essayé d'implémenter PLSA en Python
Reconnaissance vocale en anglais avec python [speech to text]
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé de résumer la commande umask
J'ai essayé d'implémenter la permutation en Python
J'ai essayé de visualiser AutoEncoder avec TensorFlow
J'ai essayé de reconnaître le mot de réveil
Entrée standard Python3 que j'ai essayé de résumer
J'ai essayé de résumer la modélisation graphique.
J'ai essayé d'ajouter un post-incrément à l'implémentation CPython
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé de laisser optuna résoudre le nombre
J'ai essayé d'estimer le rapport de circonférence π de manière probabiliste
J'ai essayé de toucher l'API COTOHA
J'ai essayé d'implémenter PPO en Python
J'ai essayé d'implémenter CVAE avec PyTorch
J'ai créé une API Web
J'ai essayé de résoudre TSP avec QAOA
[Python] J'ai essayé de calculer TF-IDF régulièrement
J'ai essayé de toucher Python (syntaxe de base)
J'ai fait de mon mieux pour retourner au Lasso
J'ai essayé de résumer les modules d'Ansible - l'édition Linux
Authentification vocale et transcription avec Raspberry Pi 3 x Julius x Watson (Speech to Text)
J'ai essayé de gratter
J'ai essayé PyQ
J'ai essayé AutoKeras
J'ai essayé le moulin à papier
J'ai essayé de visualiser le texte du roman "Weather Child" avec Word Cloud
J'ai essayé django-slack
J'ai essayé Django