1

Windows Phone 8 の音声認識を使用して、単語のカスタム発音を認識しようとしています。MSDN で提供されているサンプルを使用しようとしていますが、不足しています。まず、インライン発音用の「sapi」名前空間が (prondisplay属性の両方で) 失敗しているため、レキシコン ファイル (.pls) を使用していますが、別の質問のためにそれを保存します。とにかく、ここに私が持っているものがあります:

<?xml version="1.0" encoding="utf-8" ?>
<grammar version="1.0" xml:lang="en-US"  tag-format="semantics/1.0" root="thecolor"
         xmlns="http://www.w3.org/2001/06/grammar" >
  <lexicon uri="ms-appx:///SRGSLexicon.pls" />
  <rule id="thecolor">
    <item>blue</item>
  </rule>
</grammar>

それが私の SRGS 文法です。私は次のようにロードします:

    Dim SRGSGrammar As Uri = New Uri("ms-appx:///SRGSGrammar.xml", UriKind.Absolute)
    _myRecognizer.Grammars.AddGrammarFromUri("SRGSGrammar", SRGSGrammar)

私も要素に追加しようとしましtype="application/pls+xml"lexiconが、それはフォーマットの例外を与えます.

うまく機能しているようです。<lexicon/>ただし、タグに注意してください。これが私のPLSファイルです:

<?xml version="1.0" encoding="utf-8" ?>
<lexicon version="1.0"
      xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
      alphabet="x-microsoft-ups" xml:lang="en-US">
  <lexeme>
    <grapheme> blue </grapheme>
    <phoneme> W S1 AX T CH AX M AX K S2 AA L IH T </phoneme>
  </lexeme>
</lexicon>

(注: これらのファイルはどちらもアプリのルートにあり、新しい場合はコンテンツとコピーに設定されています)。

次に、「話す」というボタンを押しますDim recoResult = Await _myRecognizer.RecognizeAsync()。次に、whatchamacallitと言うと、信頼度が非常に低くなり、使用されるルールは「thecolor」で、テキストは「blue」であると表示されます。私が見る限り、PLSも使用していません。これをもう一度行い、今度はblueと言うと、100% の信頼度に近づきます。

SRGS 文法の青ではなく、PLS のwhatchamacallitが認識されるようにしたいのですが、非常に高い信頼を得られるのは「青」(99%) だけであり、それが結果テキストでもあります。

PLSロードされているように見えます (100% 確実ではありませんが、上記以外の URI ではFileNotFound例外が発生するため、ロードされていると思います)。

注 - SpeechSynthesizer でレキシコンを使用するにはどうすればよいですか? は、この質問の内容ではありませんが、PLS でwhatchamacallitの例を使用しています。また、Windows Phone 8 での高度なテキスト読み上げに SSML を使用すると、私が見た PLS の唯一の実装であるため、いくつかの希望が得られましたが、残念ながらそれは別のテクノロジ用であり、私の例では機能しません。

PLSファイルを介して(またはインラインで)WP8で動作するようにカスタム発音を取得した人はいます<Token/>sapi?もしそうなら、あなたは助けることができますか?

4

1 に答える 1

2

トッド、私はあなたの問題を再現しようとしました.uri-schemeと関係があるという強い疑いがあったからです. 完全なコードはありませんでしたが、アプリのローカル ストレージのルート フォルダーに文法ファイルと語彙ファイルを配置するだけで複製できました。

C# で type="application/pls+xml" を使用すると、80045003 エラーが発生しませんでした。むしろ、私はこれを取得し続けました:

WinRT 情報: 文法エラーが見つかりました: C:\Data\Users\DefApps\AppData{A7C75BFD-F873-4DA9-834C-C4CA3D97AA6B}\Local\SRGSGrammar.xml、4 行目: レキシコン ファイル「ms-appdata:///」をコンパイルできませんlocal/SRGSLexicon.xml": 0x80004003

ファイルポインタが見つからないというエラーだと思います。そして、エラーメッセージに注意を払うと、パーサーが文法ファイルとレキシコンファイルに対して持っていると考えるファイルパスが異なることに気付きました.両方を参照するために「ms-appdata:///」を使用していましたファイル。

文法パーサーはおそらく、特別な uri-schemes をどれも受け入れることができないことが判明しました。PLSファイルのuri属性のエラーメッセージからファイルパスのフルパスを使用しましたが、うまくいきました。type="application/pls+xml" をまだ使用していることに気付くでしょう。

したがって、この回避策が受け入れられる解決策であるかどうかはわかりません...しかし、これが問題の根本につながると思います。

これは、これを機能させるコード (C#) です。

SRGSLexicon.pls (変更なし)

SRGSGrammar.xml (uri-scheme ではなくファイル パスを使用)

<?xml version="1.0" encoding="utf-8" ?>
<grammar version="1.0" xml:lang="en-US"  tag-format="semantics/1.0" root="thecolor"
         xmlns="http://www.w3.org/2001/06/grammar" >
  <lexicon uri="C:\Data\Users\DefApps\AppData\{A7C75BFD-F873-4DA9-834C-C4CA3D97AA6B}\Local\SRGSLexicon.pls" type="application/pls+xml" />
  <rule id="thecolor">
    <item>blue</item>
  </rule>
</grammar>

私のアプリコード (C#)

    public MainPage()
    {
        InitializeComponent();
        var srgsGrammar = new Uri("ms-appx:////SRGSGrammar.xml", UriKind.Absolute);
        _recognizerUi.Recognizer.Grammars.AddGrammarFromUri("SRGSGrammar", srgsGrammar);
    }

    readonly SpeechRecognizerUI _recognizerUi = new SpeechRecognizerUI();

    private async void Test_OnClick(object sender, RoutedEventArgs e)
    {
        //I used these next 2 lines to show the FilePath of the SRGSGrammar.xml file, and I used the same folder
        //structure for the lexicon pls file uri (just changed the file name)
        //var fileName = (await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///local/SRGSGrammar.xml"))).Path;
        //MessageBox.Show(fileName);

        var recoResult = await _recognizerUi.RecognizeWithUIAsync();
        var x = recoResult.RecognitionResult.TextConfidence;
        MessageBox.Show(((int)x).ToString()); //show confidence
    }

これが少しでも役立つことを願っています。文法パーサーは、uri-scheme をどうするかを知らないだけだと思います。

于 2013-04-13T05:10:58.167 に答える