deep learning -...

25
2015 年度 卒業論文 Deep learning による 読唇システム 指導教員 白井英俊 教授 中京大学 情報理工学部 機械情報工学科 学籍番号 H412092 氏名 パリアスカ ケンジ (2016 1 )

Upload: others

Post on 01-Sep-2019

1 views

Category:

Documents


0 download

TRANSCRIPT

2015 年度

卒業論文

Deep learning による

読唇システム

指導教員 白井英俊 教授

中京大学 情報理工学部 機械情報工学科

学籍番号 H412092

氏名 パリアスカ ケンジ

(2016 年 1 月)

i

要 旨

題目 Deep learningによる読唇システム

学籍番号 H412092 氏名 パリアスカ ケンジ 指導教員 白井 英俊

近年、Deep Learningは精度が高い機械学習として話題になっており、本研究

はこれを用いた読唇システムの構築を目的とした。ここで読唇とは、相手の唇の

動きなどを見て言葉を読み取る技術を意味する、読唇術のことを指す。しかし、

読唇術を行うとなると、すべての音素などに対応しなくてはいけない。つまり、

それ相応の膨大なデータを要するので、本研究では読唇する単語を限定し、その

限定された中での読唇を試みることにより、読唇システムの構築への可能性を

探るものとした。

我々は次のように研究を進めた。まず学習データの素材作成、次に学習モデル

(分類器)の作成、最後に検証、結果の比較という流れである。

素材作成は、単語を限定したため、それぞれのデータ用の画像を作成する段階か

ら始めた。作成では不特定多数の話者に対する読唇を想定しているため、ある特定の

単語を多数の人に発音してもらう。そしてその特定の単語を 3 つのグループに分け、

各グループの 1 つの単語を基準に、子音のみを変更した単語 1 つ、子音と母音を変

更した単語 1つ、よって各グループには計 3つの単語を用意した。最後に以上の単語

を発音している様子をスマートフォンなどで口周りだけを撮影し、OpenCV を用いて編

集を施したものを学習データとした。

次に学習モデル(分類器)の作成では Labellio を使用。Labellio については 4.1 節

で説明する。

最後にこれまで作成した学習データ、学習モデルを用いて検証を行った。その結果、

分類までは成功したのだが、各グループにおいて、子音のみの変更においては、全

てが一桁になり正解数にばらつきが発生する結果になった。それに対し、子音と母音

の変更の場合は正解数が二桁となり、比較的高くなる結果となった。以上のように、結

果に偏りが出てしまうなどの課題が明らかになった。考察として、これは人間の唇の動

きの母音の発音が大いに関係していると思われる。さらに、本研究での限られた条件

での、子音のみの変化と子音と母音の両方の変化の 2 者の間で比べた結果、後者の

正解数が高いのであって、これを精度が高いとはまだ言えないのではないかと考える。

これらの課題に対して、データ数、学習回数などの増加が有効ではないかと考える。

データ数で言えば、本研究では各単語 50枚準備したので、これらを 100枚、200枚と

ii

増やし、それに合わせて学習回数を増やすことにより学習の精度、分類の精度が上が

るのではないかと考える。

考察で述べる点、更には展望で述べる点を踏まえて、本研究のように限定された中

での分類ではなく、更に範囲を広げ、応用をきかせることでの読唇システムへの可能

性を考えていきたい。

i

目 次

第1章 はじめに ............................................................................................................ 1

第2章 本研究の構成 ..................................................................................................... 2

2.1 Deep Learningについて ...................................................................................... 2

2.2 Deep Learningによる画像認識 ........................................................................... 4

第3章 学習データ素材作成 .......................................................................................... 5

3.1 学習データ作成概要 .......................................................................................... 5

3.2 編集の内容 ......................................................................................................... 5

3.3 単語の内容 ......................................................................................................... 6

第4章 学習モデル(分類器)作成 ................................................................................... 7

4.1 Labellioについて ................................................................................................ 7

4.2 Caffeについて .................................................................................................... 8

第5章 検証 ..................................................................................................................... 9

5.1 テスト用画像入力 ............................................................................................... 9

5.2結果比較の概要 ............................................................................................... 10

第6章 考察と展望 ........................................................................................................ 12

6.1 考察 ................................................................................................................. 12

6.2 展望 ................................................................................................................. 12

参考文献 ......................................................................................................................... 14

参考資料 ......................................................................................................................... 14

謝辞 ................................................................................................................................. 15

付録 1 素材データ作成プログラム .................................................................. 16

付録 2 入力画像作成プログラム ...................................................................... 19

1

第 1 章 はじめに

近年、画像認識や音声認識の分野において「Deep Learning」が注目されている。

Deep Learningとは、ニューラルネットワークにおいて、中間(隠れ)層が 2層以上の精

度の高い機械学習を指す。特徴として、今まで人手で行う必要があった特徴量

を自動で発見出来ることが挙げられる。「Deep Learning」については第 2 章で詳

しく説明するが、以上の内容により画像認識、音声認識でのいろいろな事例で高い性

能を挙げたことで注目を集めている。

私は画像認識に関心があり、ゼミでは OpenCVを使った顔認識などについて学ん

だ。OpenCVでも画像分類はできるが、以上のような実績から Deep Learningを用いる

こととした。

本研究は始めに学習データの素材作成、次に学習モデル(分類器)の作成、最後に

検証、結果の比較という流れで行った。

素材作成では特定の単語の発音している唇の動きを対象とした画像分類を行うた

め、特定の単語の学習データを作成した。多数の人物の動画をスマートフォンなどで

撮影し、それらに OpenCV使って編集を施した。分類器の作成では「Labellio」という、

Alpaca社がリリースした Webプラットフォームを使い畳み込みニューラルネットワーク

(CNN)で学習、分類した。Labellioについては 4.1節、CNN については 2.2節で説明

する。最後に検証、結果の比較においては限られた単語の唇の動きを分類した結果、

入力に対する出力の正解数に着目した。

研究の結果、分類がうまくできる単語とできない単語に偏りが出てしまった。その際に

明らかになった問題点の検討と、それに対する解決策についても考察を行う。

本書の構成は以下の通りである。

第 2 章では前提の知識として、本研究に用いた Deep Learning、そしてこれを用いた

画像認識について説明する。

第 3 章では学習データの素材作成の内容について説明する。限定した単語の内容

を述べ、さらに施した編集の流れ、内容を述べる。

第 4 章では、第 3 章で作成した学習データを基に分類器を作成する概要を述べる。

Labellioと Caffeについての説明も含め、分類器作成の流れを説明する。

第 5 章では、第 4 章で作成した分類器を用いて、テスト用の画像を入力、そしてそこ

から出力された分類結果の比較について述べる。

第 6 章では、第 5 章で得られた結果についての考察、展望について述べる。

2

第 2 章 本研究の構成

画像分類によって読唇術への可能性を探るという研究目的のため、機械学習の一種

である Deep Learningを用いた。本章では Deep Learningと、画像認識における Deep

Learningについて麻生ほか(2015)を参考に説明する。

2.1 Deep Learning について

Deep Learningとは、ここ数年、機械学習(あるいは人工知能)の分野で大きな注

目を集めている技術である。第 1 章でも述べたが、Deep Learningとは、ニュー

ラルネットワークにおいて、中間(隠れ)層が 2層以上の精度の高い機械学習を指

し、中間層が増えることで各層の学習が深くなり、今まで人手で行う必要があっ

た特徴量を自動で発見出来るのが特徴である。機械学習の研究は 1950年代末期

から人工知能の一分野として発展してきた。主な目的として、明示的に表現する

ことが困難な人間の知識の、文字認識や顔認識などのパターン認識や、運動の学

習などを、具体的な事例などから計算機に帰納的に学習させることが始まりで

ある。ニューラルネットワークモデルにはいろいろな種類があるため、それに対

応して、Deep Learningの方式も様々なものが提案されている。「Deep Learning」

という言葉を有名にした最大のきっかけは、ニューラルネットワークの代表的

な研究者の一人である Hinton らの 2006年頃の研究であると思われる。そこで

は、ボルツマンマシンという、確率的に動作し、観測データの生成的な確率モデ

ルとして意味づけられるタイプのニューラルネットワークが Deep Learningの基

盤として用いられた。

その後、1980 年代にニューラルネットワーク研究のブームを引き起こした階層型ニュ

ーラルネットワーク誤差逆伝播学習アルゴリズムの組み合わせ、すなわち、確率的に

ではなく、確定的に動作するニューラルネットワークを基盤とする Deep Learningの研

究も盛んになってきている。また、回帰結合を持つニューラルネットワークも、Deep

Learningの一種と考えられており、最近では、long short-term memory法のような、より

複雑な構造を持つニューラルネットワークを用いた Deep Learningも提案されている。

2.2 Deep Learning による画像認識

画像認識においては、Deep Learningの内の畳み込みニューラルネットワーク

(convolutional neural network;CNN)が主要な役割を果たす。以下ではこれを CNN と

記す。CNN は、畳み込み層とプーリング層と呼ばれる 2 種類の層を、交互に積み重ね

た構造を持つフィードフォワード型のニューラルネットワークであり、たとえ多層でも基

本的に事前学習を要しないという性質がある。つまり初期状態から教師あり学習を問

3

題なく実行することができ、良い性能が達成される。実際 80年代末には既に LeCunら

が多層 CNN の学習に成功し、文字認識のタスクに適用して高い性能を挙げていた。

そして改めて注目されるようになった最近の CNN は 80 年代のものに比べると、文字

認識から画像認識全般へと適用ドメインが広がり、学習サンプル数およびネットワーク

の規模が大きくなっている。一般物体認識での大きな成功が契機となりその後これま

で多くの研究が 3 つの方向性でなされた。第一に適用範囲の拡大であるが、画像認

識と言っても、物体認識や古典的な文字認識の他に数多くのタスクがあり、最近まで

に、それらのほぼすべてに対し CNN が試されてきた。さらに、認識だけでなく、画像処

理の問題への適用も盛んである。そしてこれらの研究ではほぼ例外なく、CNN は少な

くとも従来方法を上回る性能を示すことが報告されてきている。第二に学習の大規模

化、すなわち CNN をより多層化、あるいは大量のデータを用いて CNN を学習しようと

する動きである。2014年の ILSVRC では、層数が 20 を超えるような CNN が登場し、

Krizhevskyの 2012年の CNN を大きく上回る性能を挙げて見せた。また Facebookや

Google などの企業は、自らのサービスを通じて得られる大量のデータを利用すること

で、顔画像認識やシーン中の文字認識といったタスクで大きな性能向上を果たせるこ

とをしめしたことで、CNNの認識性能は人の視覚に比肩し、時に上回るとさえ言われる

ようになった。第三に高性能の理由の探求であるが、それらは数学的な方法を用いる

ものと、実験的な方法を用いるものに分けられる。

CNN について

基本構造として、畳み込み層およびプーリング層とよぶ特殊な層を交互に接続した構

造を持つことが特徴である。ある層における j 番目のノードは、その直前の層の m個の

ノードからそれぞれ入力��(i=1,… . ,m)を受け取り、これらの重み付き和にバイアスを

加算した。

�� = �� +�������

���

を計算する。この��を活性化関数に入力した時の応答、

�� = �(��)

がこのノードの出力となり、次の層へと伝播する。活性化関数aには、収束性の良さや

学習速度の速さからa���� = max(�� , 0)という関数(ReLU 活性化関数)がよく使われる。

通常、CNN の出力層付近には隣接層間のノード全てを結合した層(全結合層)を 1 層

以上配置する。出力を与える最終層は、通常のニューラルネットワークと同様に設計さ

れる。クラス分類を目的とする場合、目的のクラス数と同数のノード n 個に配置し、活性

4

化関数にソフトマックス関数(softmax function)を用いる。具体的には、上のようにして

計算される同ノードへの入力��(j=1,…,n)をもとに、

�� =��

∑ ��"#$��

とする。認識時には、��が最大値をとるノードのインデック%̂ = argma����を推定クラス

とする。回帰を目的とする場合は、説明したい変数と同数のノードを並べ、変数の値域

に合わせ活性化関数を選ぶ。

5

第 3 章 学習データ素材作成

画像分類にはまず分類器を構成するための学習データが必要である。本章ではそ

の学習データの作成、編集の概要を述べる。

3.1 学習データ作成概要

本研究は不特定多数の話者に対する読唇を想定しているため、ある特定の単語を

多数の人に発音してもらう。そしてスマートフォンなどで口周りだけを撮影し、OpenCV

を用いて編集を施したものを学習データとした。

3.2 編集の内容

画像分類においては学習モデル内での学習、分類の段階で偏りをなくし、精度を

向上させるために学習データに使う画像データを、ある一定のサイズ、解像度で統一

する必要がある。編集の流れとしては以下の様になる。

1. 撮影した動画をグレースケールに変換。(24 ビットの RGB を持つカラー画像を、8

ビットのグレースケール画像することで計算処理を効率よく、高速に処理することが

できる)

2. 撮影した口周りの動画の上下左右不要な部分、背景などをクリッピング。(唇の変

化のみに着目するので、それ以外の部分の変化で、学習への影響を防ぐため。)

3. 1 枚(40×40)の 10枚画像シーケンスを作成(何回も試みたところ、この際集められた

データを 0.03 秒おきに静止画を撮ると唇の動きの変化がわかりやすく、10 枚撮っ

た。)(図 3.1)

4. 3 で作成した画像シーケンスを横に繋げた 1 枚(400×40)を作成。(この1枚を学習

用として使う。)(図 3.2)

図 3.1 1 枚(40×40)の 10フレーム画像シーケンス

図 3.2 10フレームを横に繋げた 1 枚(400×40)の画像

6

3.3 単語の内容

本研究は読唇システム開発の第一歩として、限られた単語の内での読唇を試みた。

そしてそれらを 3 つのグループに分け、各グループの 1 つの単語を基準に、子音のみ

を変更した単語 1 つ、子音と母音を変更した単語 1 つ、よって各グループには計 3 つ

の単語を用意する。具体的には以下の 3 つのグループ、計 9 個の単語を対象とした。

1. 安全(anzen)-万全(banzen)-簡単(kantan)

2. 変装(hensou)-変更(henkou)-観光(kankou)

3. 触る(sawaru)-変わる(kawaru)-終わる(owaru)

1 の単語群の場合、安全(anzen)を基準の単語としている。そして安全(anzen)-万全

(banzen)の関係は、語頭に b(両唇音破裂音の子音)が有るか無いかという関係である。

これらは主に聞き間違えやすい関係にある単語として取り上げた。また安全(anzen)-簡

単(kantan)の関係は、語頭に k(軟口蓋音破裂音の子音) が有るか無いかという差異に

加え、安全(anzen)における zenの箇所を簡単(kantan)における tanの箇所で置換して

いる、つまり子音 z-t と母音 e-aの置換が行われているという関係である。この単語の組

み合わせでは聞き間違いがほとんどないはずである。2 と 3 のグループにおいても 1

のグループと同様の関係にある単語を選んだ。

7

第 4 章 学習モデル(分類器)の作成

前章で作成した学習データを元に、学習モデルを作成する。

学習モデル作成に Labellio を使用した。本章では Labellio を使った学習モデル作成

概要について述べる。

4.1 Labellio について

Labellioとは、Alpaca社がリリースによる Deep learningの内、CNN を用いた画像分

類の web プラットフォームである。分類器作成におけるデータ整理が容易で基本的な

画像分類の手順は機械学習による画像分類と同じだが、分類する段階で設定が必要

となるネットワークモデルは caffenet を使用しており自分で設定しなくて良い。使用手

順としては以下の様になる。

1. ログイン(GoogleIDまたは GitHubID アカウントでログイン可能。)

2. 用意したテスト画像をアップロード(1つのフォルダに同ラベルの画像を置き、その

フォルダ名がラベル名となる。)

3. 学習開始(学習の経過はグラフを見てモニタ可能。)

4. 画像分類

今回は、データ画像を各ラベル 50 枚に統一。よって各グループ計 150枚のデータ

画像を用意した。最終的に得られた学習結果は Caffe 用のモデルとしてダウンロード

でき、ファインチューニング1という方法で Caffe に応用が可能である。ダウンロードした

モデルに対しネットワーク構造を自分で変更したり、学習回数などを変更したりすること

は可能である。以下の図 4.1が完成した分類器の例である。

図 4.1 分類器名が 1、精度が 47.0625%の分類器

1 ファインチューニングとは、大規模なデータセットで学習済みの状態から目的とする別

のデータセットへ学習し直すことである。

8

図 4.1において、上部の”1” が分類器名にあたり、自由につけることができる。図 4.1

では分類器名 1 となっている。下部にある Acc は Accuracyからきており、これは分類

器の精度を指す。図 4.1においては精度が 47%となっている。

ネットワーク構造としては入力か順番に、畳み込みとプーリングを交互に 5 層、全結

合が 2 層、ドロップアウトが 2 層、ソフトマックス関数を経て出力される。

4.2 Caffe について

Caffeとは、C++で実装された、Deep Learning用のフレームワークの一つである。

Googleに籍を置く Yangqing Jia氏が、カリフォルニア大学のバークレー校の博士課程

に在籍したころに開発がスタート。現在では、Berkeley Vision and Learning

Center(BVLC)を中心として、コミュニティのコミッターたちが GitHub上で開発、改良を

重ねている。代表的なフレームワークには以下が挙げられる。

・Caffe

・theano/Pylearn2

・Cuda-convnet2

・Torch7

多様なアーキテクチャによりイノベーションとアプリケーションが奨励される。モデルと

最適化はハードコーディングを必要としない構造によって定義され、GPU上での訓練

に単一のフラグを設定することにより、CPU、GPU間を切り替え、その後、コモディティ

クラスタまたはモバイル機器に展開する。そして拡張可能なコードにより有効な開発が

促進される。開発初年に、1,000人以上の開発者にフォークされ多くの重要なフィード

バックがされたことで、コードとモデルの両方で最先端を走っている。さらには研究実

験や業界の展開においては Caffeのスピードが最適であるとされ、その理由は 1 日に

60M 以上の画像を単一の NVIDIA K40 GPU により処理が可能だからである。具体的

には推測に 1ms/枚、学習に 4ms/枚の時間を要する。以上より Caffeが CNN の最速

の実装であると思われる。画像識別の高精度を報告する論文には、Caffeを利用した

ものが多く、学習済みのモデルを配布するフレームワークなどもあり、オープンソースコ

ミュニティが活発である。

画像分類の流れは、畳み込み層での「特徴抽出」と、プーリング層での「その特徴を

まとめ上げる処理」との繰り返しによって画像の特徴を抽出しき、最終的に得られる特

徴量に、ソフトマックス関数などを適応して判別モデルを作っていく。

9

第 5 章 検証

本章では、これまで作成した学習データ、学習モデルを用いて検証を行い、その結

果について述べる。

5.1 テスト用画像入力

テスト用画像には、学習モデルで用いた画像とは別の画像を用意する。テスト用画

像入力において、より実践的な場合を想定し、カメラ映像からの入力を直接 PCに学習

データと同様のサイズ、解像度のデータ画像が出力するような流れにする。テスト用画

像の準備には外付けのウェブカメラと OpenCVを使用。データ作成の主な流れは以下

のようになる。

1. カメラ映像をグレースケールで入力(図 5.1)

2. 入力映像を 0.3秒間隔で静止画にしたものを計 10枚作成(図 5.2)

3. サイズを 40×40に変換した画像を出力(図 5.2)

流れの詳細としては始めに PC にウェブカメラを接続。OpenCVを用いることで表示

されるカメラ映像を予めグレースケールに変換し(図 5.1)、背景または余分な箇所が映

らないような位置に唇、カメラを調整。

その後、スペースキーを押すことで、0.3 秒間隔、計 10 枚の静止画(図 5.2)を撮るよ

うなプログラムを走らせ、最後に 10 枚の静止画の各々を 40×40に変換した 10 枚を横

に繋げた横長の 400×40の 1 枚を作成(図 5.2)。以上のような流れでテスト用画像を入

力し、結果へと移る。

図 5.1 グレースケールでのカメラ入力

10

図 5.2始めが 0.3秒間隔の静止画 10枚、最後の 1 枚がテスト用画像

5.2 結果比較の概要

結果の比較では、学習データ内には含まれていない、新たに別の画像を 20枚入

力することで得られた結果を比べている。以下に各分類器での入力に対しての出力の

正解数の結果を 1(表 5.1),2(表 5.2),3(表 5.3)でそれぞれ混同行列で表す。行列の詳

細は縦軸が入力、横軸が出力を表している。つまり、縦軸と横軸の単語が一致した箇

所が正解数となる。

その結果 1、2、3 の各グループにおいて、子音のみの変更においては、全てが一

桁になり正解数にばらつきが発生する結果になった。それに対し、子音と母音の変更

の場合は正解数が二桁となり、比較的高くなる結果となった。

表 5.1

anzen banzen kantan

anzen 7 8 5

banzen 7 9 4

kantan 3 4 13

表 5.2

hensou henkou kankou

hensou 8 7 5

henkou 8 9 3

kankou 2 3 15

11

表 5.3

sawaru kawaru owaru

sawaru 7 7 6

kawaru 8 6 6

kantanowaru 4 5 11

12

第6章 考察と展望

本章では結果から得られた考察と、そこから考えられる展望について述べる。

6.1 考察

5.1節で示したように、予め抜粋した 3 つのグループのいずれにも、子音のみの変化

の関係より、子音と母音の変化の関係が正解数を上回る結果となった。これは人間の

唇の動きの母音の発音が大いに関係していると思われる。よって唇の動きのみの判断

材料、つまり視覚だけでの読唇には限界があると考える。さらに、限られた条件である、

子音のみの変化と子音と母音の両方の変化の 2 者の間で比べると、後者の正解数が

高いのであって、これを精度が高いとはまだ言えないのではないかと考える。以上の

課題にたいして学習データ画像を、学習回数を増やすことで改善されるのではないか

と考える。学習データを 100 枚、200 枚と増やし、学習回数も増やすことにより学習の

精度、分類の精度が上がるのではないかと考える。

6.2 展望

今後の展望として、

1.Labellioから得ることができる Caffe 用の学習モデルをファインチューニングし Caffe

で認識。

4.2 節で述べたように、ラベルの数、データの数に合わせた学習回数などの自分で

設定可能なので、それぞれの数に見合った設定ができ、精度向上し読唇システム

への可能に繋がるのではないかと考える。

2.唇のみに着目するのではなく、顔全体に着目。

本研究では唇の動きのみでしか判断してないので、範囲を顎や頬あたりまで、更に

は顔全体へと広げた時の結果を探ることで唇以外での読唇に向けた判断材料が見

つかるのではないかと考える。

3.画像認識に加え、音声認識の実装。

本研究のように、子音のみの変化となると視覚での判断に限界が見えたので、音声

認識を実装することで唇の動きのみではなく、声も認識することで精度が向上できる

と考える。

4.時系列を持つデータに対する Deep Learningの内の RNN の利用

RNN 言葉や音楽のように時系列で相関を持つデータにおいて、前に発生したデー

タを考慮する。例えば、「名詞」の”私”、の後には「助詞」の”が”、”は”が来ることが

多い、など

の予測である。ニューラルネットワークにおいて、前に発生したデータを投入、イメー

ジとしては時刻 t の隠れ層の内容が、次の時刻 t+1 入力として扱われ、t+1 の隠れ

13

層が t+2 の・・・と続いてく学習になり、時間的に変更するデータに意味を見出す(図

6.1)。つまり、前回の隠れ層が次の隠れ層の学習にも使用されるのである。よって、

本研究とは別の手法で試すことにより、機械学習による読唇システムへの可能性を

探ることができるのではないかと考える。

14

参考文献

麻生英樹他. (2015). 「深層学習-Deep Learning-」. 近代科学社

桑井博之他. (2014). 「実践 OpenCV 2.4 for Python 映像処理&解析」. カットシステ

有限会社 IGUNOSS . (2016). “グレースケール変換 IGUNOSS,Inc”

http://www.igunoss.co.jp/imageproc/imageproc1-3.html (2015年 12月参照)

白井裕典. (2015) “Caffeで画像解析を始めるための基礎知識とインストール、基本的

な使い方”

http://www.atmarkit.co.jp/ait/articles/1511/09/news008.html (2015年 12月参

照)

Evan Shelhamer. (発行年不明)“Caffe | Deep Learning Framework”

http://caffe.berkeleyvision.org/ (2015年 12月参照)

icoxfog417 . (2015). “機械学習 - ニューラルネットワークで時系列データの予測を行

う - Qiita”

http://qiita.com/icoxfog417/items/2791ee878deee0d0fd9c (2015年 12月参照)

Jan Erik Solem、他. (2013). 「実践 コンピュータビジョン」. オライリージャパン

MkDocs. (発行年不明)“Home - Labellio User Manual”

https://www.labell.io/static/manual/ja/ (2015年 12月参照)

tanaka0079. (2015). “python/grayscale.py at python · tanaka0079/python · GitHub”

https://github.com/tanaka0079/python/blob/python/opencv/image/grayscale.py

(2015年 12月参照)

WIRED. (2003). “インテル、「読唇」ソフトを配布 « WIRED.jp”

http://wired.jp/2003/05/06/%e3%82%a4%e3%83%b3%e3%83%86%e3%83%ab%

e3%80%81%e3%80%8c%e8%aa%ad%e5%94%87%e3%80%8d%e3%82%bd%e3%

83%95%e3%83%88%e3%82%92%e9%85%8d%e5%b8%83/ (2015年 12月参

照)

Yura Yura. (2013). “Yura YuWrite: [OpenCV] Pythonの OpenCVで画像の連結”

http://yu-write.blogspot.jp/2013/12/opencv-pythonopencv_11.html (2015年 12

月参照)

15

謝辞

本研究において指導していただいた白井英俊教授ならびに、様々なアドバイスをし

ていただいた白井研究室の皆様に感謝致します。

16

付録 1 素材データ作成プログラム

# -*- coding: utf-8 -*

import cv2

import sys, time

import numpy as np

Seq = 101

seqMax = 110

FileExt = ".jpg"

windowName = u'camera'.encode('cp932')

# cp932 へエンコード

cv2.namedWindow(windowName)

# 表示ウィンドウの作成

src = cv2.VideoCapture('test.avi')

# 映像取得(引数に入力したビデオファイル名)

if not src.isOpened():

# カメラ映像が取得できない場合

print u'映像が取得できません。'

import sys

sys.exit()

mode = False

while True:

retval, frame = src.read()

# 1フレーム取得

if frame is Non

break

17

if Seq > seqMax:

break

frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

# グレースケール変換

cv2.imshow(windowName, frame)

# 1フレーム表示

key = cv2.waitKey(33)

if key == 32:

# スペースキーを押したとき True

mode = True

elif key == 27:

# ESCキーを押したとき終了

break

if mode:

fname = "img"+str(Seq)+FileExt

cv2.imwrite(fname, frame)

Seq += 1

time.sleep(0.03)

cv2.destroyAllWindows()

# すべての表示ウィンドウの破棄

src.release()

# ビデオファイル(キャプチャ機器)を閉じる

img01 = cv2.imread('img101.jpg')

# 10枚の画像を読み込む

img02 = cv2.imread('img102.jpg')

img03 = cv2.imread('img103.jpg')

img04 = cv2.imread('img104.jpg')

img05 = cv2.imread('img105.jpg')

img06 = cv2.imread('img106.jpg')

18

img07 = cv2.imread('img107.jpg')

img08 = cv2.imread('img108.jpg')

img09 = cv2.imread('img109.jpg')

img010 = cv2.imread('img110.jpg')

img1 = cv2.resize(img01,(40, 40))

# 各画像をリサイズ

img2 = cv2.resize(img02,(40, 40))

img3 = cv2.resize(img03,(40, 40))

img4 = cv2.resize(img04,(40, 40))

img5 = cv2.resize(img05,(40, 40))

img6 = cv2.resize(img06,(40, 40))

img7 = cv2.resize(img07,(40, 40))

img8 = cv2.resize(img08,(40, 40))

img9 = cv2.resize(img09,(40, 40))

img10 = cv2.resize(img010,(40, 40))

img11 = cv2.hconcat([img1, img2, img3, img4, img5, img6, img7, img8, img9, img10])

# 10枚を横に繋げ出力

cv2.imwrite('kankou.jpg', img11)

# 完成した 1 枚を保存

19

付録 2 入力画像作成プログラム

# -*- coding: utf-8 -*

import cv2

import sys, time

import numpy as np

Seq = 101

seqMax = 110

FileExt = ".jpg"

windowName = u'camera'.encode('cp932')

# cp932 へエンコード

cv2.namedWindow(windowName)

# 表示ウィンドウの作成

src = cv2.VideoCapture(0)

# 映像取得(カメラ映像)

if not src.isOpened():

# カメラ映像が取得できない場合

print u'映像が取得できません。'

import sys

sys.exit()

mode = False

while True:

retval, frame = src.read()

# 1フレーム取得

if frame is Non

break

20

if Seq > seqMax:

break

frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

# グレースケール変換

cv2.imshow(windowName, frame)

# 1フレーム表示

key = cv2.waitKey(33)

if key == 32:

# スペースキーを押したとき True

mode = True

elif key == 27:

# ESCキーを押したとき終了

break

if mode:

fname = "img"+str(Seq)+FileExt

cv2.imwrite(fname, frame)

Seq += 1

time.sleep(0.03)

cv2.destroyAllWindows()

# すべての表示ウィンドウの破棄

src.release()

# ビデオファイル(キャプチャ機器)を閉じる

img01 = cv2.imread('img101.jpg')

# 10枚の画像を読み込む

img02 = cv2.imread('img102.jpg')

img03 = cv2.imread('img103.jpg')

img04 = cv2.imread('img104.jpg')

img05 = cv2.imread('img105.jpg')

21

img06 = cv2.imread('img106.jpg')

img07 = cv2.imread('img107.jpg')

img08 = cv2.imread('img108.jpg')

img09 = cv2.imread('img109.jpg')

img010 = cv2.imread('img110.jpg')

img1 = cv2.resize(img01,(40, 40))

# 各画像をリサイズ

img2 = cv2.resize(img02,(40, 40))

img3 = cv2.resize(img03,(40, 40))

img4 = cv2.resize(img04,(40, 40))

img5 = cv2.resize(img05,(40, 40))

img6 = cv2.resize(img06,(40, 40))

img7 = cv2.resize(img07,(40, 40))

img8 = cv2.resize(img08,(40, 40))

img9 = cv2.resize(img09,(40, 40))

img10 = cv2.resize(img010,(40, 40))

img11 = cv2.hconcat([img1, img2, img3, img4, img5, img6, img7, img8, img9,

img10]) # 10枚を横に繋げ出力

cv2.imwrite('kankou.jpg', img11)

# 完成した 1枚を保存