2013-04-30 3 views
2

C++에서 "음성 인식"및 "텍스트 음성 변환"에 적합한 API가 있는지 알고 싶습니다. 나는 Festival을 보았습니다. 컴퓨터가 말하고 있는지 여부도 말할 수 없습니다. 왜냐하면 그 컴퓨터는 실제로 진짜이기 때문에 voce이기도합니다."Text To Speech"및 "Voice to Text"에 대한 C++ API

불행히도 Festival은 음성 인식 (음성 : 텍스트)을 지원하지 않으며 voce은 Java로 만들어져 JNI로 인해 C++의 엉망입니다.

API는 "텍스트 음성"과 "음성 텍스트"를 모두 지원해야하며, 최소한 소유자 웹 사이트 외부에는 좋은 예제가 있어야합니다. 주어진 목소리 집합을 식별 할 수있는 기능이 있다면 완벽하지만 선택 사항이므로 걱정할 필요가 없습니다.

API와 관련하여 주어진 음성 명령이 설정되면 로봇 장치를 왼쪽, 오른쪽 등으로 돌리십시오. 또한 "굿모닝 (Good Morning)", "굿 나잇 (Good Night)"과 같은 말을하십시오. 이 단어들은 프로그램에서 코딩됩니다.

이 목적으로 좋은 C++ 음성 API를 찾도록 도와주세요. 자습서/설치 자습서에 액세스 할 수 있으면 나와 함께 공유 할 수있을 정도로 친절하십시오.

+0

http://msdn.microsoft.com/en-us/library/ms720151 (v = vs.85) .aspx –

답변

1

Windows에서 개발하는 경우 ASR (음성 인식) 및 TTS (텍스트 음성 변환)를 수행 할 수있는 MS Speech API을 사용할 수 있습니다.
this page에서 몇 가지 예를 찾을 수 있으며 음성 인식의 가장 기본적인 예는 this post입니다.

4
나는이 오디오 녹음을하면 발견

를 사용하여 아두 이노 기반의 로봇을 구축하고 제어하는 ​​방법을 설명하는이 블로그를 체크 아웃, 라이브러리 및 예제 다른 언어의 무리 및 플랫폼 또한

http://www.twilio.com/docs/libraries이 (나는 이것에 대한 qtmultimedia을 사용)을 FLAC 수있다 Read more here

그때 구글과 다음 날 다시 보내도록하기 위해 업로드 할 수 있습니다

일부 JSON
이는 QML 플러그인 으로 실시하기 위해서 나는 다음 몇 가지 C++/QT를 썼다 여기에 (알파) 코드가 있습니다. 참고 사항 :
< FLAC FILE.flac> 을 실제 flac 파일로 바꾸십시오.

speechrecognition.cpp

#include <QNetworkReply> 
#include <QNetworkRequest> 
#include <QSslSocket> 
#include <QUrl> 
#include <QJsonDocument> 
#include <QJsonArray> 
#include <QJsonObject> 
#include "speechrecognition.h" 
#include <QFile> 
#include <QDebug> 
const char* SpeechRecognition::kContentType = "audio/x-flac; rate=8000"; 
const char* SpeechRecognition::kUrl = "http://www.google.com/speech-api/v1/recognize?xjerr=1&client=directions&lang=en"; 

SpeechRecognition::SpeechRecognition(QObject* parent) 
    : QObject(parent) 
{ 
    network_ = new QNetworkAccessManager(this); 
    connect(network_, SIGNAL(finished(QNetworkReply*)), 
      this, SLOT(replyFinished(QNetworkReply*))); 
} 

void SpeechRecognition::start(){ 
    const QUrl url(kUrl); 
    QNetworkRequest req(url); 
    req.setHeader(QNetworkRequest::ContentTypeHeader, kContentType); 
    req.setAttribute(QNetworkRequest::DoNotBufferUploadDataAttribute, false); 
    req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, 
        QNetworkRequest::AlwaysNetwork); 
    QFile *compressedFile = new QFile("<YOUR FLAC FILE.flac>"); 
    compressedFile->open(QIODevice::ReadOnly); 
    reply_ = network_->post(req, compressedFile); 
} 

void SpeechRecognition::replyFinished(QNetworkReply* reply) { 

    Result result = Result_ErrorNetwork; 
    Hypotheses hypotheses; 

    if (reply->error() != QNetworkReply::NoError) { 
    qDebug() << "ERROR \n" << reply->errorString(); 
    } else { 
     qDebug() << "Running ParserResponse for \n" << reply << result; 
     ParseResponse(reply, &result, &hypotheses); 
    } 
    emit Finished(result, hypotheses); 
    reply_->deleteLater(); 
    reply_ = NULL; 
} 

void SpeechRecognition::ParseResponse(QIODevice* reply, Result* result, 
             Hypotheses* hypotheses) 
{ 
QString getReplay ; 
getReplay = reply->readAll(); 
qDebug() << "The Replay " << getReplay; 
QJsonDocument jsonDoc = QJsonDocument::fromJson(getReplay.toUtf8()); 
    QVariantMap data = jsonDoc.toVariant().toMap(); 

    const int status = data.value("status", Result_ErrorNetwork).toInt(); 
    *result = static_cast<Result>(status); 

    if (status != Result_Success) 
    return; 

    QVariantList list = data.value("hypotheses", QVariantList()).toList(); 
    foreach (const QVariant& variant, list) { 
    QVariantMap map = variant.toMap(); 

    if (!map.contains("utterance") || !map.contains("confidence")) 
     continue; 

    Hypothesis hypothesis; 
    hypothesis.utterance = map.value("utterance", QString()).toString(); 
    hypothesis.confidence = map.value("confidence", 0.0).toReal(); 
    *hypotheses << hypothesis; 
    qDebug() << "confidence = " << hypothesis.confidence << "\n Your Results = "<< hypothesis.utterance; 
    setResults(hypothesis.utterance); 
} 
} 

    void SpeechRecognition::setResults(const QString &results) 
{ 
    if(m_results == results) 
    return; 
     m_results = results; 
    emit resultsChanged(); 
} 

QString SpeechRecognition::results()const 
{ 
    return m_results; 
} 

speechrecognition.h

마이크로 소프트의 API가
#ifndef SPEECHRECOGNITION_H 
#define SPEECHRECOGNITION_H 

#include <QObject> 
#include <QList> 

class QIODevice; 
class QNetworkAccessManager; 
class QNetworkReply; 
class SpeechRecognition : public QObject { 
    Q_OBJECT 
    Q_PROPERTY(QString results READ results NOTIFY resultsChanged) 

public: 
    SpeechRecognition(QObject* parent = 0); 
    static const char* kUrl; 
    static const char* kContentType; 

    struct Hypothesis { 
    QString utterance; 
    qreal confidence; 
    }; 
    typedef QList<Hypothesis> Hypotheses; 

    // This enumeration follows the values described here: 
    // http://www.w3.org/2005/Incubator/htmlspeech/2010/10/google-api-draft.html#speech-input-error 
    enum Result { 
    Result_Success = 0, 
    Result_ErrorAborted, 
    Result_ErrorAudio, 
    Result_ErrorNetwork, 
    Result_NoSpeech, 
    Result_NoMatch, 
    Result_BadGrammar 
    }; 
    Q_INVOKABLE void start(); 
    void Cancel(); 
    QString results()const; 
    void setResults(const QString &results); 

signals: 
    void Finished(Result result, const Hypotheses& hypotheses); 
    void resultsChanged(); 

private slots: 
    void replyFinished(QNetworkReply* reply); 

private: 
    void ParseResponse(QIODevice* reply, Result* result, Hypotheses* hypotheses); 

private: 
    QNetworkAccessManager* network_; 
    QNetworkReply* reply_; 
    QByteArray buffered_raw_data_; 
    int num_samples_recorded_; 
    QString m_results; 
}; 

#endif // SPEECHRECOGNITION_H