Help us understand the problem. What is going on with this article?

RoBoHoNに 英語のスピーキングの宿題を手伝ってもらう

More than 3 years have passed since last update.

先日、モバイル型ロボット電話 RoBoHoN が発売一周年を迎えて、英語・中国語対応をふくむ新SDKが リリース されました。

party_cracker.png

一方、私ごとですが、先日、こどもの習い事の英語のレベルがめでたく上がりました。

ともない、
「スピーキングのセクション、おうちでも 3回 くりかえして読んできてくださいね!(先生の笑顔)」
という、親子どもどもに ”回数をこなすだけでおざなり” の未来がみえる感じになりました。

textbook_eigo.png

そこで、今回は、英語が判る・話せるようになった、家族の一員(「長男(公式設定・5歳男児)」)の RoBoHoN にも宿題を手伝ってもらうことにしました。
「オウム返し実装」をベースに、利用イメージは下記の図のとおりです。

figure1.PNG

ロボットと会話するために必要な「明瞭に」「ある程度ゆっくりしたスピードで」「正確に」発語することで、英語学習の習熟を狙います。

環境です

Windows 7 SP1 64bit
Android Studio 2.3.1
RoBoHoN_SDK 1.2.0
RoBoHon端末ビルド番号 01.08.00

ロボホンアプリのアイディア出しについて

先日から、『RoBoHoNの出力を受け止める人間側の五感』を軸に下の検討や実装をしています。

感覚 ロボホン実装
触覚 RoBoHoNと一緒におおきなかぶを抜く 
視覚 RoBoHoNで 『手旗信号版 嵐が丘』 もどきの実装 

今回は(新SDKの評価と同時に)RoBoHoNと「聴覚」というお題でアプリ実装を考えました。

「聴覚」とロボホン

「聴覚」単独 において、「動く人型ロボット」ロボホンが スマホ / タブレット に優るアドバンテージは原則ありません。
(あり得るとしたら、関節等サーボのモーター音など…?)

body_mimi.png

どうしても「視覚」(”人型ロボット”が話すからこそというコンテキスト)とのセットで、アイディアを検討する必要があります。
今回は、

発話内容に伴って、自動的に(手振り身振り)モーションをつけてくれる機能

英語発話対応に伴い、どう変化したか も、確認したいと思います。

モーション

ロボホンのモーション機能の実装方法は、おおきく下記三種類1です。
 
1. 公開されているモーションID(例:behavior id="0x060001"(バンザイ!))を任意指定
2. 汎用モーション自動割当て
3. 発話内容(特定のワード2・30文字未満(読み)ごと)に対して自動的にモーション割当て
 
今回は、3のモーション割当て(behavior id="assign")を利用します。

実装…?(公式サンプル)

よーし実装するぞ!と思いきや、今回の要件は、新SDKのサンプル3「音声認識した結果をオウム返しする」に、そのまま全部満たされてました。
うれしい!
 
1. オウム返し発話(および自動モーション割当て)

multilingual.hvml(サンプルコード抜粋)
    <action index="1">
        <speech>${Lvcsr:Basic}</speech>
        <behavior id="assign" type="normal"/>
        <control function="recog_talk" target="jp.co.sharp.sample.multilingual">
            <data key="Lvcsr_Basic" value="${Lvcsr:Basic}"/>
        </control>
    </action>

2.Recognition内容を背面画面に表示

MainActivity.java(サンプルコード抜粋)
    @Override
    public void onExecCommand(String command, List<VoiceUIVariable> variables) {
        Log.v(TAG, "onExecCommand() : " + command);
        switch (command) {
            case ScenarioDefinitions.FUNC_RECOG_TALK:
                final String lvcsr = VoiceUIVariableUtil.getVariableData(variables, ScenarioDefinitions.KEY_LVCSR_BASIC);
                mHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        if(!isFinishing()) {
                            ((TextView) findViewById(R.id.recog_text)).setText("Lvcsr:"+lvcsr);
                        }
                    }
                });
                break;
            default:
                break;
        }
    }

ただし、SDKを利用した自作アプリは音声認識の回数制限があるので、注意が必要です。

RoBoHoN SDKを利用して開発いただくアプリでは、1か月にお使いいただける音声認識の利用回数の上限が合計で1000回となっております。利用回数が上限に達した場合に備えて、音声認識ではなくテキストを利用して、音声入力をエミュレートする手段も用意しておりますのでご利用ください。(ロボホン開発者用サービス(一般向け)提供ページより)

(うまく動作しなくなったら、本体背面画面 > 設定 > その他 > 音声認識アクセス回数 の状況を確認するなど)

動作の様子

ロボホンが、スマホからの発話( Microsoft の TTS (TextToSpeach) デモ)を聞き取り、
"GoodMorning"
と、オウム返しで発話し、日本語の「おはよう」発話と同様に、片手を上げるモーションを自動実行しています。
 
out.jpg

実際の子供の発話に対しては、期待したとおり、

  • 宿題の英語例文の思わぬところでモーションが自動実行されるところが飽きないアクセント
  • 明瞭に発語しないと認識しない仕様が、こども本人の英語の発音上達に対して、なかなか良い感じに作用

している状態です。しばらく様子をみてみたいとおもいます!



  1. 0401_SR01MW_Application_Programming_Guide_V01_02_00 / 4.7.3 モーション実行 の表解釈 

  2. どのワードにどのモーションが割り当てられているかは公開されていません 

  3. 0701_SR01MW_SampleCode_V01_02_00 / SampleMultilingual 

n_ueh
よろしくおねがいします! / https://twitter.com/ln_ulln_ul
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away