2017-08-01 9 views
0

ボットを構築する必要があります。このようなタスクをどのように開始するかを質問したいと思います。ボットを開発する

私の理解は、テキストに音声を提供するフレームワークが必要です。

次に、テキストからインテントを生成する必要があります。次に、自分のアルゴリズムを使って、何をやるべきか、そして何をすべきかを理解する。

私が言及した2つの目的を探すためにどのフレームワークに指示することで私を助けてくれますか?

+0

をボットは音声認識で、そうですか?あなたはPythonでそれらをたくさん持っていますが、あなたはそれを行うためにGoogle APIを '不正行為'することもできます – sheplu

+0

こんにちは@heheplu、私はJavaとpythonで快適ですが、何かを具体的にお勧めできますか? GoogleのAPIは意図を提供しています。なぜそれは「カンニング」ですか? – user1002065

+0

私はPythonの中で最高の1つはhttps://pypi.python.org/pypi/SpeechRecognition/です。 – sheplu

答えて

0

音声認識は良いオプションですありがとうございます!私はあなたには

// Telegram bot 
// which converts given voice(speech) to text 
// using wit.ai HTTP API 
// 
// [email protected] 
// 
// last update: 2016.05.17. 
package main 

import (
    "fmt" 
    "io" 
    "io/ioutil" 
    "log" 
    "net/http" 
    "os" 
    "os/exec" 

    bot "github.com/meinside/telegram-bot-go" 
    witai "github.com/meinside/wit.ai-go" 
) 

const (
    TelegramApiToken = ":abcdefghijklmn_ABCDEFGHIJKLMNOPQRST" // XXX - Edit this value to yours 
    WitaiApiToken = "ABCDEFGHIJKLMNOPQRST"     // XXX - Edit this value to yours 

    MonitorIntervalSeconds = 1 
    Verbose    = false // XXX - set this to 'true' for verbose messages 

    TempDir  = "/tmp"     // XXX - Edit this value to yours 
    FfmpegBinPath = "/usr/local/bin/ffmpeg" // XXX - Edit this value to yours 
) 

// Download given url and return the downloaded path 
func downloadFile(url string) (filepath string, err error) { 
    log.Printf("> downloading voice file: %s\n", url) 

    var file *os.File 
    if file, err = ioutil.TempFile(TempDir, "downloaded_"); err == nil { 
     filepath = file.Name() 

     defer file.Close() 

     var response *http.Response 
     if response, err = http.Get(url); err == nil { 
      defer response.Body.Close() 

      if _, err = io.Copy(file, response.Body); err == nil { 
       log.Printf("> finished downloading voice file: %s\n", filepath) 
      } 
     } 
    } 

    return filepath, err 
} 

// Convert .ogg to .mp3 (using ffmpeg) 
// 
// NOTE: wit.ai doesn't support stereo sound for now 
// (https://wit.ai/docs/http/20160516#post--speech-link) 
func oggToMp3(oggFilepath string) (mp3Filepath string, err error) { 
    mp3Filepath = fmt.Sprintf("%s.mp3", oggFilepath) 

    // $ ffmpeg -i input.ogg -ac 1 output.mp3 
    params := []string{"-i", oggFilepath, "-ac", "1", mp3Filepath} 
    cmd := exec.Command("ffmpeg", params...) 

    if _, err = cmd.CombinedOutput(); err != nil { 
     mp3Filepath = "" 
    } 

    return mp3Filepath, err 
} 

// Download a file from given url and convert it to a text. 
// 
// Downloaded or converted files will be deleted automatically. 
func speechToText(w *witai.Client, fileUrl string) (text string, err error) { 
    var oggFilepath, mp3Filepath string 

    // download .ogg, 
    if oggFilepath, err = downloadFile(fileUrl); err == nil { 
     // .ogg => .mp3, 
     if mp3Filepath, err = oggToMp3(oggFilepath); err == nil { 
      // .mp3 => text 
      if result, err := w.QuerySpeechMp3(mp3Filepath, nil, "", "", 1); err == nil { 
       log.Printf("> analyzed speech result: %+v\n", result) 

       if result.Text != nil { 
        text = fmt.Sprintf("\"%s\"", *result.Text) 

        /* 
         // traverse for more info 
         sessionId := "abcdef" 
         if results, err := w.ConverseAll(sessionId, *result.Text, nil); err == nil { 
          for i, r := range results { 
           log.Printf("> converse[%d] result: %v\n", i, r) 
          } 
         } else { 
          log.Printf("failed to converse: %s\n", err) 
         } 
        */ 
       } 
      } 

      // delete converted file 
      if err = os.Remove(mp3Filepath); err != nil { 
       log.Printf("*** failed to delete converted file: %s\n", mp3Filepath) 
      } 
     } else { 
      log.Printf("*** failed to convert .ogg to .mp3: %s\n", err) 
     } 

     // delete downloaded file 
     if err = os.Remove(oggFilepath); err != nil { 
      log.Printf("*** failed to delete downloaded file: %s\n", oggFilepath) 
     } 
    } 

    return text, err 
} 

func main() { 
    b := bot.NewClient(TelegramApiToken) 
    b.Verbose = Verbose 

    w := witai.NewClient(WitaiApiToken) 
    w.Verbose = Verbose 

    if unhooked := b.DeleteWebhook(); unhooked.Ok { // delete webhook 
     // wait for new updates 
     b.StartMonitoringUpdates(0, MonitorIntervalSeconds, func(b *bot.Bot, u bot.Update, err error) { 
      if err == nil && u.HasMessage() { 
       b.SendChatAction(u.Message.Chat.Id, bot.ChatActionTyping) // typing... 

       if u.Message.HasVoice() { // when voice is received, 
        if sent := b.GetFile(u.Message.Voice.FileId); sent.Ok { 
         if message, err := speechToText(w, b.GetFileUrl(*sent.Result)); err == nil { 
          if len(message) <= 0 { 
           message = "Failed to analyze your voice." 
          } 
          if sent := b.SendMessage(u.Message.Chat.Id, &message, map[string]interface{}{}); !sent.Ok { 
           log.Printf("*** failed to send message: %s\n", *sent.Description) 
          } 
         } else { 

          message := fmt.Sprintf("Failed to analyze your voice: %s", err) 
          if sent := b.SendMessage(u.Message.Chat.Id, &message, map[string]interface{}{}); !sent.Ok { 
           log.Printf("*** failed to send message: %s\n", *sent.Description) 
          } 
         } 
        } 
       } else { // otherwise, 
        message := "Let me hear your voice." 
        if sent := b.SendMessage(u.Message.Chat.Id, &message, map[string]interface{}{}); !sent.Ok { 
         log.Printf("*** failed to send message: %s\n", *sent.Description) 
        } 
       } 
      } 
     }) 
    } else { 
     panic("failed to delete webhook") 
    } 
} 
電報ボット
あなた自身を実行することができますニッチなスクリプトを発見し、上記以外

import speech_recognition as sr 

# obtain audio from the microphone 
r = sr.Recognizer() 
with sr.Microphone() as source: 
    print("Please wait. Calibrating microphone...") 
    # listen for 5 seconds and create the ambient noise energy level 
    r.adjust_for_ambient_noise(source, duration=5) 
    print("Say something!") 
    audio = r.listen(source) 

# recognize speech using Sphinx 
try: 
    print("Sphinx thinks you said '" + r.recognize_sphinx(audio) + "'") 
except sr.UnknownValueError: 
    print("Sphinx could not understand audio") 
except sr.RequestError as e: 
    print("Sphinx error; {0}".format(e)) 

は、ここで作業コードです

$ wget https://gist.githubusercontent.com/meinside/56f2616c61f59768b4ce487bea4f9fd5/raw/e9984ec1ac46a47d1b7b5ccf1a178147588c3552/stt_bot_sample.go

編集したコードを実行します:あなたはあなたの言うことで関連リンク言語 の多くでは、あなたが構築することを行うためのフレームワークをたくさん見つけることができます

$ go run stt_bot_sample.go 

Bot in Action ! (image)

関連する問題