Sprache zu Text

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Guten Tag
    ich habe folgendes Problem weiß aber gar nicht wo ich ansetzen soll: Ich habe mir ein kleines Script geschrieben, welches Audio von der Webcam aufnimmt und dann zur Google Speech API Schnittstelle schnickt und dann dementsprechend den Text zurück bekommt. Nur das Problem ist ich bekomme nichts zurück. Die Datei "stt.txt" bleibt leer, und an sich tut sich nichts.

    Bash
    #!/bin/bash
    arecord -D "plughw:1,0" -q -f cd -t wav | ffmpeg -y -i - -ar 16000 -acodec flac file.flac
    wget -q -U "Mozilla/5.0" --post-file file.flac --header "Content-Type: audio/x-flac; rate=16000" -O - "http://www.google.com/speech-api/v1/recognize?lang=en-us&client=chromium" | cut -d\" -f12
    rm file.flac

    Ich kann ausschließen das es an der Webcam liegt da ich mit:

    Code
    arecord -f dat -d 20 -D plughw:1,0 test.wav

    eine sehr klare Datei bekomme. Auch mein Englisch ist nicht so schlecht, dass es nicht verstanden wird, da es mit der Spracherkennung von Android(selbe Schnittstelle) ohne Probleme funktioniert.

    Einmal editiert, zuletzt von audacity363 (15. September 2013 um 16:52)

  • Ich versteh nicht wieso du im Script

    Code
    arecord -D "plughw:1,0" -q -f cd -t wav

    benutzt aber die funktionierende Zeile ist

    Code
    arecord -f dat -d 20 -D plughw:1,0 test.wav


    :huh:

    Da fallen mir 3 Dinge auf die du im Script seltsamerweise anders machst:

    1) plughw:1,0 Vs. "plughw:1,0"
    2) -f cd Vs. -f dat
    3) -t wav

    Wieso machst du es im Script anders als es über die Commandline funktioniert?


    Das Problem dabei ist auch das man dafür eine Internetverbindung benötigt..

  • Also:
    Das ganze muss als .flac verschickt werden. Durch Google bin ich dann auf ffmpeg gestoßen welches wav Dateien konvertiert.
    Mit:

    Code
    arecord -f dat -d 20 -D plughw:1,0 test.wav


    wird die Datei gespeichert und fertig ist. Mit:

    Code
    arecord -D "plughw:1,0" -q -f cd -t wav | ffmpeg -y -i - -ar 16000 -acodec flac file.flac


    wir die Datei wohl nur Temporär gespeichert und direkt in eine .flac Datei konvertiert.
    So sehe ich das zumindest.

  • Ja das sieht du soweit schon fast richtig, wenn man keine Datei am Ende angibt wird die standardausgabe genutzt, aber darum gehts nicht - der punkt ist wieso du zB im Script "plughw:1,0" benutzt? warum nicht ohne "


    Anyway, hab das ein bischen angepasst (arecord rausgenommen) aber musste selber feststellen das von 10 versuchen nur 2 erfolgreich waren, also das text zurück gegeben wurde...
    Allerdings stimmt die "übersetzung" nicht, aus eigentlich

    Zitat


    this coverage is live and uncensored so if you have any small children present you may wanna have them leave the room


    gibt mir die google API das zurück:

    Zitat


    who are Sean T from mu porn shop um

    Quelldatei die ich genutzt hab: http://5.231.51.22/07-dialog_clip-small_children.flac
    (umbenannt in: out.flac)


    Mein Aufruf sieht wie folgt aus:

    Manuell siehts halt so aus:

    Code
    root@raspberrypi:/tmp# API="http://www.google.com/speech-api/v1/recognize?lang=en"
    root@raspberrypi:/tmp# wget -q -O- --post-file out.flac --header="Content-Type: audio/x-flac; rate=16000" "$API"
    {"status":0,"id":"c60c76e8fbdb3d535c7c2c82aca51aa9-1","hypotheses":[{"utterance":"who are Sean T from mu porn shop um","confidence":0.8591047}]}
    root@raspberrypi:/tmp#
  • Jut jetzt funktioniert es auch. Die Fehlerquote liegt bei dir sehr wahrscheinlich an der Geschwindigkeit. Habe bei mir jetzt noch das Mic drinnen und den Link auf Deutsch geändert. Bei mir funktioniert es einwandfrei.

  • Also es w´mag zwar ziemlich dumm klingen aber die Wohnung/Zimmer damit zu steuern. Habe mehrere Arduinos die Temperatur/Helligkeit auslesen und den Status von Lichtschranken überprüfen. Das wird dann an den Raspberry Pi geschickt und der verarbeitet das ganze dann. Also Rolladen hoch runter, Ventilator an aus, morgends Kaffee , Licht an Aus, und und und. Das ganze läuft im Moment noch über eine Androidapp wo man dann dementsprechend Button drückt und fertig. Währe halt ein nettes Gimmick. Auch ist eine Sprachausgabe geplant, die Bescheid sagt wenn irgendwas ist. Diese läuftzwar auch schon aber nur ist noch nicht im Programm.
    Nur ist mir dank eines Defekten Relay die GPIO Sektion meines RPI durchgebrannt... 230V waren dann für den Ground zu viel. :) Na ja so läuft er noch und wird jetzt für die Sprachsteuerung benutzt.
    Geplant ist auch noch ein Touchscreen der alle Infos anzeigt und im Grunde die Hauptverwaltung ist.

    Einmal editiert, zuletzt von audacity363 (15. September 2013 um 19:01)

  • Aha sowas dachte ich mir schon, deine Scriptzeilen sehen nämlich genau so aus wie diese: http://blog.oscarliang.net/raspberry-pi-v…orks-like-siri/
    ;)

    Kennst du PiAUISuite? -> http://stevenhickson.blogspot.de/2013/06/voice-…spberry-pi.html
    Das ist quasi auch sowas nur wesendlich umfangreicher - zB kannst du wie bei StarTrek rufen "Computer" und der RaspberryPI antwortet mit "Yes Sir?" und dann gibst du ihm Befehle wie zB "schalte Licht ein" und der RPI führt dann eine entsprechenden Befehl aus :D
    Das kann auch offline genutzt werden und nutzt auch die google API.. Man kann unheimlich viel einstellen usw und es ist quasi ein fertiges Programm :)

  • Also du führst über ein python Script ein bash Script aus?

    Kannst du mal bitte beide Scripts posten damit ich das testen kann? (weiss nicht ob trap den gewünschten effekt bewirken würde)


    EDIT:

    Habs getestet und hier funktionierts.. Und zwar sah mein Test wie folgt aus

    bash Script: /tmp/1

    python Script: /tmp/2

    Code
    #!/usr/bin/env python
    
    
    import os
    
    
    os.system("bash /tmp/1")
    
    
    print "yeah"

    Test:

    Code
    root@raspberrypi:~# python /tmp/2
    ...^C
    ** Trapped CTRL-C
    ** exiting bash script!
    yeah
    root@raspberrypi:~#

    Erklärung:

    Das python Script führt das bash Script aus.
    Im bash Script fängt "trap" das drücken von STRG+C (bzw im englischen CTRL+C) ab und führt dann die function ctrl_c aus. In der Function wiederum steht dann eben der exit 0 drin der das bash Script beenden lässt..
    Anschliesend läuft das python Script aber noch und wirft die print Zeile aus

    Du benötigst nur die trap Zeile sowie die function mit dem exit 0, den Rest kannst du weg lassen..

    Ich hoffe das hilft dir ;)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!