Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
deep-learning @ f4fc8cf
docs
iOS @ 0949e56
server @ 80d455c
.gitmodules
LICENSE
README.md
image.png

README.md

パクパくん

Product Name

製品概要

読唇術 × Tech

背景(製品開発のきっかけ、課題等)

音声入力は便利だが、電車内や図書館など使うのが難しい場所もある。また、街中やイベント会場、テレビの近くなどの騒がしい場所では、他人の声がノイズとなってうまく認識できなくなってしまう。

声を用いた文字入力は、人と話すのに近い直感的な操作ができ、認識精度が向上すれば仮想キーボードにより高速に入力できると考えられる。したがって、いまフリック入力等の仮想キーボードを使っていて文字入力に不自由を感じていないユーザにとっても有用性のある手段であると言えるだろう。

そこで我々は、音声情報が全くなくとも、唇の動きをカメラで捉え、発声している語を推定し文字に起こせないかと考えた。

製品説明(具体的な製品の説明)

このアプリはスマートフォン上で動作し、唇の動きによる文字入力を可能とする。

特長

1. 声を出せない場所、周囲が騒がしい場所でも使用可能

唇の動きをカメラで捉え、これを用いて発声している語を推定するため、いわゆる口パクで操作できる。周囲が騒がしくても、声を出せない環境であっても使用できる。

2. 深層学習による発声音推定

様々な領域でルールベースの手法を超えてきた深層学習を用いたアルゴリズムにより、高い精度で画像から読唇を行う。

3. コーパスを用いた発声語推定

深層学習により推定した発声音を元に、ユーザーが発話した文章を推定し、入力候補を提示する。

解決出来ること

電車の中や図書館といった周囲に配慮しなければならない場所では、音声入力を使用するのが憚られる。また、混み合う大通りやクラブハウスなど過度に騒がしい場所では、声がかき消されて音声入力が利用できない。かといって、キーボードやフリック入力は口を動かして入力するのに比べ遅いので、そこを改善したいと考えた。 パクパくんを利用することで、ユーザは声を出すことなく、唇の動きで入力したい内容をスマートフォンに認識させれる。これにより、静かな場所や騒がしい場所でも自然に話すような動作で声を出すことなく文字を認識させる事ができる。より自然体でテキスト入力を行うを新たに提案したことにより、ユーザのテキスト入力体験をより豊かにすることがこのアプリの解決することである。

今後の展望

深層学習

認識率にはまだまだ改善の余地がある。2日間で実装する必要があったため、限られたデータセットを使わざるを得なかった。データセットを拡充すれば精度を向上させられると考えている。また、方言や性別、年齢などにより発声音推定モデルを作り分け、使い分けることで更なる精度向上が期待できる。

自然言語処理

Python3で実装したが、C++やRustを用いることで約10〜100倍程度の高速化が見込める。 また、用いたコーパスが頻度1000以上の単語と文章のリストなので、さらに頻度が小さい単語と文章を頻度が低いコーパスを用いることで、文章の推定精度が上がる。 さらに、今回コーパスで頻度1000以上の単語数をnとしたときに、時間計算量がO(n^2)であり、今回の実装では1秒未満で終わるので十分高速ではある。しかし、ある文章に繋げられるあり得る単語の数をkを用いて、O(kn)に改善できる(一般的にk<<nと言える)。他にも高速化手法がいくつも考えられる。 また、今回行えなかった発生語推定モデルでの実験を行えれば、文の発話に対する音素列の確率モデルを作ることができ、音声認識に近い精度を出すことも可能であると思われる。

開発内容・開発技術

活用した技術

フレームワーク・ライブラリ・モジュール

デバイス

  • iPhone

独自開発技術(Hack Dayで開発したもの)

フロント

発声語推定に必要なデータの収集及び成形と処理サーバとの通信を行うiPhoneアプリを開発した。 IPhoneのインカメで捉えたユーザの顔を認識し、唇周辺を切り抜き、処理サーバへ送信する。処理サーバから返った推定語群を画面に表示し、ユーザの意図に反していた場合には手動で選択できるようにした。

バックエンド

フロントエンドクライアントから唇周辺の画像を受け取り、学習済みの深層学習モデルを用いて読唇を行う。 読唇の結果から入力候補を自然言語処理によって算出する。 Socket.ioを用いることでリアルタイムな画像処理を実現し、遅延を感じさせずにクライアントサイドのユーザに推定結果を返すことを実現した。

深層学習

  • https://github.com/qqhann/LipNet-JP

  • 唇の動きを対象とした日本語データセットは存在しなかったため、モデルを生成するためのデータセットの生成から独自で行った。

  • 動画から音声と唇の動きを画像認識により識別し、それらを教師データとして深層学習を行いった。

  • 研究用途のプロジェクトは過去に存在したが、実環境の利用を想定した物ではなかった。実環境の可変長データを扱うため、過去の研究を参考にモデルの拡張を行った。

  • 日本語を対象とした同種の取り組みは見つけられなかったので、限られた時間で認識精度を高められるよう、深層学習による推定は音節の区切りから母音+「ん」の6値分類を行うという独自の工夫を行った。これにより探索範囲を絞り込み、研究用のデータセットだけではなく、実環境のデータにも対応可能なモデルを構築した。

  • 出力は「母音(aiueo) + n」で表された単語列である。例えば話者が「今日は良い天気ですね」と口パクで発言すると、["oo", "a", "ii", "eni", "eu", "e"]がモデルから出力される。

自然言語処理

  • https://github.com/minaminao/jphacks
  • 入力は読唇術アプリから単語単位で分割された母音列が渡される。発声音推定モデルではNgramを用いた言語モデルを用いて、母音列が与えられたときに最も尤度が高くなるような単語列を求める。
  • 発声音推定モデルから得られた出力から最も有り得る文章を復元するアルゴリズムの構築・開発を行った
You can’t perform that action at this time.