ボットを構築する必要があります。このようなタスクをどのように開始するかを質問したいと思います。ボットを開発する
私の理解は、テキストに音声を提供するフレームワークが必要です。
次に、テキストからインテントを生成する必要があります。次に、自分のアルゴリズムを使って、何をやるべきか、そして何をすべきかを理解する。
私が言及した2つの目的を探すためにどのフレームワークに指示することで私を助けてくれますか?
は
ボットを構築する必要があります。このようなタスクをどのように開始するかを質問したいと思います。ボットを開発する
私の理解は、テキストに音声を提供するフレームワークが必要です。
次に、テキストからインテントを生成する必要があります。次に、自分のアルゴリズムを使って、何をやるべきか、そして何をすべきかを理解する。
私が言及した2つの目的を探すためにどのフレームワークに指示することで私を助けてくれますか?
は
音声認識は良いオプションですありがとうございます!私はあなたには
// 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))
:
は、ここで作業コードです
編集したコードを実行します:あなたはあなたの言うことで関連リンク言語 の多くでは、あなたが構築することを行うためのフレームワークをたくさん見つけることができます
$ go run stt_bot_sample.go
をボットは音声認識で、そうですか?あなたはPythonでそれらをたくさん持っていますが、あなたはそれを行うためにGoogle APIを '不正行為'することもできます – sheplu
こんにちは@heheplu、私はJavaとpythonで快適ですが、何かを具体的にお勧めできますか? GoogleのAPIは意図を提供しています。なぜそれは「カンニング」ですか? – user1002065
私はPythonの中で最高の1つはhttps://pypi.python.org/pypi/SpeechRecognition/です。 – sheplu