NOT SO BADなブログ

ぼっちスタートアップが日々がんばっています

百人一首の詠み上げを音声認識していち早く下の句を教えてくれるクソアプリを作りました

この記事は「クソアプリアドベントカレンダー2018」19日目の記事です。

f:id:o_tomomichi:20181122175103p:plain

タイトルそのまんまですが、 百人一首の詠み上げを音声認識して、いち早く下の句を教えてくれるクソアプリ「百人一首チーター」を作りました。

cheetah.notsobad.jp


デモ動画

※音が出ます

画面上部に音声認識した結果をそのまま出力していて、それをもとに正解と思われる確率が高い百人一首の句を画面下部「判定結果」のところに上位3つまで表示しています。

映像だけ見ると認識開始までにタイムラグがあるように見えますが、読み上げが始まるまで間が空いただけです(動画作りがヘタ)。 実際に読み上げが始まってからはちょっと感動するくらいのスピードで正確に認識してくれてます。

なんで作ったの?

毎年正月は実家で親戚の集まりがあるのですが、数年前から小学生の甥っ子?も交えてみんなで百人一首をやるようになりました。

初年度こそ大人げなく勝利したものの、すっかりハマった甥っ子はそれから本格的に百人一首を覚えて(百人一首クラブに入ったらしい)、次の年からは大人が誰も勝てなくなってしまいましたw

こっちは毎年記憶も衰える一方なので、このままでは永遠に勝ち目がありません。また甥っ子に気を遣わせたり手加減を覚えさせるのも本意ではありません。

というわけで、大人の技術力を使ったこのチートツールで今年こそ甥っ子に社会の厳しさを教えてやりたいというのが開発の背景です(半分くらい本気)。

技術的な話

ペライチの静的なページをGithubPagesでホスティングしています。 メインの処理は素のJavascriptでわずか50行くらい。Githubで公開してますのでよければ見てみてください。(コードが汚いのは許して!)

一番コアの音声認識の部分は、HTML5のSpeech Recognition APIを使っています。

qiita.com

対応しているのは今のところPCとAndroidのChromeのみですが、これが異常に便利で精度が高い。

音声認識した文字列と百人一首データのマッチングでもっと手こずるかと思ってたんですが、音声認識が恐ろしい精度でほぼ完全な文字列を返してくるから、かなり適当な処理でも充分実用的なマッチング精度にできました。

実際にやってる処理は、認識した文字列を1文字ずつに分解して、100首の中でマッチする文字数が多い順に返す、という感じです(なんて適当な…)。

しかし試してみると思ったよりタイムラグも少ないし、マッチングの精度もなかなか高いしで完全に満足してしまいました。 まぁクソアプリですし🍣。

え、百人一首を持ってないから遊べない?

そんなときはスマホを取り札にして百人一首すればいいじゃないですか。

karta.notsobad.jp

なんとユーザー登録も不要、URLをシェアするだけで超お手軽にスマホが取り札になって百人一首が遊べるぞ〜。


まとめ:クソアプリはよいぞ

というわけで、実質開発2日くらいのちょうどいい感じでクソアプリを作ることができました。 (メインのロジック1日+もろもろ仕上げるのに1日くらい)

普段の開発で絶対使わない技術を使ったりできるのもクソアプリ開発のいいところですね。音声認識なんてやる予定全然なかったけど、ここまで簡単で精度が高いとは思いませんでした。

クソアプリは年末のお祭りみたいな感じで楽しいので、来年もぜひやってみたいと思います。気になった方もぜひどうぞ。

明日はいよいよクソアプリ界の重鎮、あんどさんです。お楽しみに! ampersand.qrunch.io