41
2011 卒卒卒卒卒卒卒卒卒卒卒卒卒卒卒卒卒卒 年年年年 年年 年年 年年 年年年年 年年年年年年 年年年年年年 年年年年 H208062 年年 年年 年年 年年年年 H208080 67 年年 年年 年年

lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

Embed Size (px)

Citation preview

Page 1: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

2011年度

卒 業 論 文

日本語対応手話アニメーションシステム

指導教員 白井 英俊 教授

中京大学 情報理工学部 情報知能学科

学籍番号 H208062

氏 名  中畑 淳貴学籍番号 H20808067

氏 名  堀田 将克

Page 2: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

(2011年12月)

卒業論文要旨

題目 日本語対応手話アニメーションシステム学籍番号 H208062

H20808067

氏名 中畑淳貴堀田将克

担当教員 白井英俊

手話アニメーションシステムとは、ユーザが入力した文章を手話アニメー

ションとして出力するシステムのことである。本研究では、情報知能学科

2010 年度卒業生奥村・本山の研究[4]の日本語対応手話アニメーションシステ

ムを引き継ぎ、奥村・本山のシステムの改善点問題点である、アニメーショ

ンのぎこちなさの解消と、入力画面と出力結果が別ウィンドウであることを

改善することを目的とした。そのため、アニメーションの出力面では、手話

単語アニメーション間につなぎアニメーションを挟み出力するシステムを、

入力・出力面では、入力したウィンドウで出力画面を表示出来るシステムを設

計した。

出力されたアニメーションは、単語間につなぎを挟んだものとそうでないものとを比較すると、つなぎを挟んだアニメーションの方がスムーズな動きといえるものであった。しかし、本システムのアニメーションを単体で見てみると、動きにぎこちなさが残る結果となった。また、入出力画面を 1 つにまとめた結果、使いやすさが向上した。

しかし、実際に日本語対応手話話者や日本語対応手話を学習する人に本システムを使用してもらうには、単語数が少ないこと、キャラクターに人間味・表情が無いことという問題点が残った。、アニメーションのぎこちなさの解消も含めてなどをさらにシステムを改善する必要があると考える。

iⅰ

Page 3: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

目次第 1 章  はじめに……………………………………………………………………………….1第 2 章  研究背景……………………………………………………………………………….2

2.1   動機…………………………………………………………………………………

….22.2   目的…………………………………………………………………………………

….2第 3 章  日本手話と日本語対応手話………………………………………………………….3

3.1   日本手話……………………………………………………………………………

….3

iⅰ

Page 4: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

3.2   日本語対応手話……………………………………………………………………

….3第 4 章  日本語対応手話アニメーション…………………………………………………….4

4.1 先行研究……………………………………………………………………………….44.2   分析と評価…………………………………………………………………………

….5第 5 章  システムの構造……………………………………………………………………….6

5.1   文章の入力…………………………………………………………………………

….65.2   文章の文法のチェック……………………………………………………………….75.3 形態素解析…………………………………………………………………………….875.4   アニメージョン変換前の準備……………………………………………………

….85.5   アニメーションへの変換…………………………………………………………

….985.6   アニメーションの結合…………………………………………………………

…...10….95.7   アニメーションの出力と方法…………………………………………………

…...12…11第 6 章  評価と考察……………………………………………………………………………

1326.1   結果の検討……………………………………………………………………

….......1326.2       評 価 … … … … … … … … … … … … … … … … … … … … … … … … …

….....................136.3   考察………………………………………………………………………………

…...143第 7 章 まとめ...............................................................................................154

謝辞…………………………………………………………………………………………………

165参考文献…………………………………………………………………………………………

….176

付録 A Blender 手引き………………………………………………………………………

….187付録 B ソースプログラム……………………………………………………………………

iⅰ

Page 5: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

….198…

iⅰ

Page 6: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

第1章 はじめに

近年高齢化が進み、今後難聴者が増え、それに伴い手話を使用する人口も増えると予想されている。また、近年は情報化社会と呼ばれインターネットを介して情報を取り入れることが主流となっている。いつでも、どこでも、環境を選ばないことがその理由となっていることが考えられる。

情報知能学科 2010 年度卒業生奥村・本山の研究[4]の日本語対応手話アニメーションシステムは、コンピュータで手軽に操作出来る手話アニメーションシステムである。しかし、このシステムには、入力画面と出力画面が別々である・アニメーションがぎこちないなど、使いやすさを向上するために改善すべきことが多々ある。

そこで、我々は、手話アニメーションの単語間につなぎアニメーションを挟み、アニメーションをスムーズにすること、入力・出力画面を 1 つにまとめる事に着目し研究を進めることとした。

そして、本システムの成果と、奥村・本山の研究とを比較した性能を評価し、問題点等を検討する。

本論文の構成は、以下のとおりである。2 章では研究背景や目的を、3 章では日本手話と日本語対応手話について説明し、4 章では先行研究について分析し、その評価を述べている。5 章では、開発したシステムの全体像と詳細な手法とシステムの設計を述べる。6 章で本システムの評価と考察を述べ、7 章でまとめを記している。

1

Page 7: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

第2章 研究背景

本研究は情報知能学科科 2010 年度卒業生奥村・本山の研究[4]の日本語対応手話アニメーションシステムの改善を目的としたものである。この章では本研究の動機と目的を述べる。

2.1動機

奥村、本山の研究で、手話アニメーションシステムが取り上げられ、手話や手話アニメーションに興味を持った。手話話者と日本語話者のコミュニケーション手段は限られているので、手話アニメーションを使うことで、よりスムーズでより簡単なコミュニケーションをとれるのではないかと考えた。

またこのシステムは、手話話者と日本語話者の間だけではなく、中途失聴者同士のコミュニケーションの手段としても使えると考えた。

2.2目的

手話話者と日本語話者とがコミュニケーションをとる際に、手話アニメ-ションがあればよりスムーズに出来るが、奥村・本山のシステムには単語数が少ない・アニメーションがスムーズでは無いなど、課題が多々ある。そこで、アニメーションのスムージング化・ウィンドウの使いやすさの向上を第一の目的とし研究を進めることにした。

2

Page 8: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

第3章 日本手話と日本語対応手話

日本における手話は、日本手話と日本語対応手話に分類される。この章では2 つの手話の説明と、本システムで日本語対応手話を使用している理由を述べる。

3.1 日本手話

 日本手話は、主にろう者が使用しており、日本語とは全く別の文法を使用している。手や指、腕を使う動作だけでなく、目・眉・口などを使う非手指動作も重要な文法要素となっている。日本語を単純に手の表現に置き換えたものではなく、「いつ学校から帰る?」を例にとり、これを日本手話で表すと「学校/そこ/帰る/いつ(顔の表情で疑問形を表す非手指動作)」となる。日本手話は日本語対応手話のように日本語の語順通りに訳すのではなく、言葉の意味全体を捉え訳している。

3.2 日本語対応手話

 日本語対応手話は、主に難聴者や中途失聴者が使用しており、日本語の文法、語順通りに手話単語をあてはめて表現するものである。日本手話と違い、非手指動作をほとんど使わず、言語学的にみると、両者は全く違うものである。

 我々の研究では、日本語を入力された通りに手話アニメーションへ変換できる理由から、日本語対応手話を使用した。

3

Page 9: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

第4章 手話アニメーションシステム

手話アニメーションシステムとは、入力された文章・単語を手話アニメーションとして出力するシステムのことである。この章では奥村・本山の手話アニメーションシステムの分析と評価を行う。

4.1 奥村・本山の手話アニメーションシステム先行研究

本山・奥村のシステムは、キーボードで入力された文章を日本語対応手話アニメーションとして出力するシステムである。入力された文章は単語ごとに区切られ、それに対応した単語アニメーションをつなぎ合わして出力するというものである。日常会話で使用する単語から抜粋した約 200 語に対応しており、専門用語・医療用語や話し言葉・方言等には対応していない。

システムを立ち上げるには、まずコマンドプロンプトを開き、syuwa.rb という Rubyファイルを開く。

図 4.1 奥村・本山の日本語対応手話アニメーションシステムの入力画面

生成されたアニメーションは tango_wmv というファイルの中にsyuwa.wmv という名前で保存される。図 4.2 は「おはよう」を入力として生成された手話アニメーションの画像である。

4

Page 10: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

また、この出力結果は、Internet Explorer 上で syuwa.html としても表示される。

5

Page 11: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

図4.2 手話アニメーションの出力結果

4.2 分析と評価

奥村・本山のシステムは、入力画面と出力結果が別ウィンドウのため扱いにくい。また出力結果は、単語アニメーションを入力された通りに並べたものが出力されるため、スムーズなアニメーションとはいえない。単語数も 200語程度なので、一から学習するシステムとしては少ない。

このことから、我々は、単語と単語の間につなぎアニメーションを挟むことでアニメーションをスムーズにすることとウィンドウを一つにすることを第一の目標とし、研究を進めていくことにした。

6

Page 12: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

第5章 システムの構造

本システムの入力から出力までの流れを説明する。

1. 文章の入力2. 入力された文章を日本語対応手話文法に準じて文法のチェック3. 入力した文章を Chasen というソフトを使用して形態素解析し、単語に区切る

4. 単語と単語の間に繋ぎとなるアニメーションを挟むための準備をする5. 形態素解析された単語をアニメーション(単語)に変換6. いくつかのアニメーション(単語)から日本語対応手話の文法に沿ったアニ

メーションの作成7. 日本語対応手話の出力

なお本システムはプログラミング言語として Ruby を使用した。

5.1 文章の入力

ユーザがアニメーションとして出力したい文章を日本語で入力する(図5.1)。しかし本システムは日常会話程度を目標に作られたもので、専門的な言葉や非日常的な言葉には対応しない。また話し言葉や方言にも対応しておらず、標準語での入力を前提とする。

なお疑問文には「?」をつけて疑問文であることを示す。

7

Page 13: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

図 5.1 本システムの入力画面

5.2 文章の文法のチェック

まず本システムを動かすには入力された文章が、日本語対応手話に沿った文法をしているかどうかチェックする必要がある。

日本語対応手話では、我々私たちが日常で使っている言葉の語調とあまり大差はないが、年齢や時間といった数を表す場合は語順が変化する場合がある。 図 5.2 はコマンドプロンプト上で文法のチェック(語順)をしている様子である。

私は今、「 22歳です。 という入力に対し、語順が変換され 私は今、歳」 「 22 で

す。 と表示されている。」

8

Page 14: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

図 5.2 文章の文法チェック

5.3 形態素解析

形態素解析とは自然言語処理の技術の一つで、辞書や文法の知識をデータベースとして入力文の単語やその品詞を識別することである。本システムの特徴として文中における品詞は助詞や助動詞は削除され、名詞・動詞・副詞・数を使っている。

本システムでは Chasen というソフトを使って入力された文章を形態素解析して、単語ごとに区切り、配列化配列にする(図 5.3)。そして単語をアニメーションファイルの名前に変換する。

図 5.3 形態素解析の結果の表示

5.4 アニメーション変換前の準備

5.3節で作られた配列に、まず開始時の図 5.4 のようなスタートポジション

9

図 5.3 形態素解析の結果の表示

図 5.2 文法チェックの画面

Page 15: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

から始まる最初の単語への繋ぎとなる部分のアニメーションを加える。すなわち、まず開始を表すために決まったアニメーションファイルの名前を付け足す。次を手話アニメーションの先頭とし、それに、最初の単語のアニメーションをを配列に加え、そのまた次の単語への繋ぎとなるアニメーションを加えるために、前述と同じような次の単語への配列に繋ぎのアニメーションのファイルの名前を付け足す。これを繰り返すことによって、アニメーションのスムージング化のための単語配列ができる。こうすることで単語と単語の間にあった手の不自然な動きが繋ぎのアニメーションを挟むことによって改善される。具体的には、ちなみにその改善策として我々私たちは単語の終わりの腕や手の位置を「ホームポジション」に戻すアニメーションをはさむことによって単語の始まりと終わりを同じ位置にし、全体的に自然な動きにしようとした。ここで「

またホームポジション」とは図 5.4 のようなに示す位置のことである。例([]内は終わる位置を示す。)<文>おはよう。今日は良い天気ですね。<形態素解析後>おはよう,今日,良い,天気<繋ぎ付け足し後>

アニメーション開始時のスタートポジションからの繋ぎ⇒おはよう[両手・上]⇒両手ともホームポジションへ(以下「HP」と略す)⇒今日[両手・下]⇒HP⇒良い[右手・上・中心]⇒HP⇒天気[両手・上]

10

Page 16: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

図 5.4 アニメーション開始時のスタートポジション

5.5 アニメーションへの変換

形態素解析の結果得られた単語の配列に対しから、それぞれの単語のアニメーションのファイル名の配列に変換する。これにより一連の単語がアニメーション(のファイル名)として表示される表される。このとき、こで単語からアニメーションのファイル名に変換するにはためにハッシュ(Hash)を用いているた。これはシステム起動時に jisyo.txt に書かれている単語をjisyo.rb により Hash にして、単語とファイルの関連付けを行うことで実現している(図 5.4)。

11

Page 17: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

12

図 5.4 単語とファイル名の Hash による関連付け

Page 18: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

図 5.4 単語とファイル名の Hash による関連付け

5.6 アニメーションの結合

5.5節までで、日本語文を単語に切り分け、さらに単語からそれに対応したアニメーションのファイル(名)の配列が得られることを説明した。ここでは、この配列から 1 つの日本語対応手話アニメーションとして結合する方法について述べる。それには、AsfBin(バージョン 1.7.14)を使用した(図5.5)。結合された日本語対応手話アニメーションは、mysyuwa.wmv 作られた文章の単語を羅列したファイル名(「今日は良い天気ですね。」ならば[kyouyoitenkidesu])という名前で(後に出力されるファイル名)という形で保存される。また以前に作られた文章ならば、また生成することなく、以前作られた文章のアニメーションを出力するような仕組みとなっている。

13

Page 19: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

図 5.5AsfBin による結合

図 5.6 プレイリスト

14

Page 20: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

図 5.5AsfBin による結合

15

Page 21: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

5.7 アニメーションの出力と方法

本システムの出力方法として、Internet Explorer を使用する。5.6節の作業後、自動的にブラウザで syuwa.cgi というプログラムの中に書かれているhtml 文書文章をもとに日本語対応手話を出力する(図 5.7)。

図 5.67 本システムの出力画面

16

Page 22: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

第6章 評価と考察

本研究の成果である、日本語対応手話アニメーションシステムについての評価と考察を行う。

6.1 結果の検討

本研究では、スムーズなアニメーションの出力と、ウィンドウの使いやすさの向上を第一の目標とした。アニメーションでは、単語と単語の間につなぎとなるアニメーションを挟むことでスムージング化を目指した。単語と単語の間につなぎアニメーションを挟むことは成功したが、単語の終わりの手の形・位置が単語毎に何十種類とあるため、単語の終わりと、つなぎの始めの手の形・位置が微妙に違うものとなってしまっている。しかし先行研究と比較するとスムーズなアニメーションの出力が出来るようになった。つなぎアニメーションのバリエーションを増やすことで、アニメーションをより自然に、よりスムーズに見せられるようになると考えた。

また、入力画面と出力画面を同じウィンドウで表示出来るようにすることで、使いやすさが増した。

17

Page 23: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

6.22 評価

 つなぎを挟んでいないアニメーションとつなぎを挟んだアニメーションとを比べると、つなぎが挟んでいる方がスムーズなアニメーションといえるが、スムーズだといえるのは比較した時だけであって、それ単体で見てみると、ぎこちなさが残るアニメーションとなっている。これは、それぞれの手話単語に合わせ、つなぎアニメーションの始めと終わりの手の位置・形のバリエーションを増やすことで改善できる。ただ、この方法では、つなぎアニメーションの数が膨大になるため、単語アニメーションの始めと終わりの手の位置のパターンを 3種類程度用意しておく方が効率的だと言える。単語によってどの単語が前後に来るかはだいたい決まっているため、パターンが限られているからである。 入出力の面では、入力画面と出力画面を一つのウィンドウで表示することで、別々のものと比較すると、操作性は幾分か増した。

6.3 考察

 本システムは、これを単体で見てみると、スムーズなアニメーションを出力出来るとは言えないものである。本システムでは単語間につなぎを挟む方法をとったが、スムーズな動きにするには他にも色々な方法がある。

1つは、単語アニメーションが始動する際の手の位置を上・中・下の 3種類用意しておき、前の単語の最終的な手の位置に一番近いものを上・中・下の中から選び、つなぎ合わせるという方法である。単語自体のバリエーションを増やすことでより自然なアニメーションが出力できるのではないかと考えた考える。

3DCG アニメーション以外の方法では、人が手話単語を話すところを実際にカメラで撮影し、それをつなぎ合わせるということも出来る方法もある。

また、つなぎアニメーションのバリエーション(始めと終わりの手の位置・手の形)を増やすことで、単語の終わりの手の位置から、より自然に次の単語につなげることが出来ると考えた考える。

18

Page 24: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

第7章 まとめ

本論文分では、奥村・本山の日本語対応手話アニメーションシステムを、より使いやすくするため、手話単語間につなぎアニメーションを挟み、アニメーションをスムーズにし、入力・出力ウィンドウをまとめることに取り組み、先行研究と本システムとの比較、本システムの改善をについて検討考察した。

本研究では本システムには、つなぎアニメーションのバリエーションのを追加すること、単語数のを増やすこと加、キャラクターの表情の追加や外見の改善などが、なおも問題点として残った挙げられる。これらのことが今後の課題とともに展望であるこれらの改善に取り組みたいと考えている。

19

Page 25: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

謝辞本研究において、指導してくださった白井英俊教授ならびに、様々なアドバイスをしていただいた白井研究室の皆様に感謝致します。

20

Page 26: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

参考文献[1]、[2], [3] は「著者名. (2011) 署名. 出版社名」の順番で書くこと。著者名がないの

はまずい

[1] Blender3D CG パーフェクトバイブル . 伊藤淳・吉川隆人 .(2011). Blender3D CG パーフェクトバイブル. 晋遊舎[2] マスタリング Blender. トニーマレン・小口博朗.(2010). マスタリング

Blender. トニーマレン・小口博朗.アスキーメディアワークス[3] 3D キャラクタアニメーション Blender. トニーマレン・長尾高弘 .

(2008). 3D キャラクタアニメーション Blender. アスキー[4] 奥村光志・本山正樹卒業論文.(2010). 日本語対応手話アニメーションシス

テム. 中京大学情報理工学部情報知能学科 2010 年度卒業論文.[5] Blender . http://blender.jp/ (2011/11/1 参照)[6] WBS+(Web/Blender Studio+) http://wbs.nsf.tc/index.html ( (2011/12/11 参照)

21

Page 27: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

付録A Blender 手引き

Blenderサイト URL:http://blender.jp/Blender の入手

Blender は( http://www.blender.org/download/get-blender/ )から入手できる。 OS によって様々なインストール方法が提供されている。

Blender基本用語Blender内で使用する基本的な用語を紹介する。

・オブジェクト

Blender では作成したもの、ライト、カメラなどを指し、そのオブジェクトに形状のデータが割り当てられると物体となり、カメラのデータが割り当てられるとカメラになる。

・メッシュ

形状データのことを指す。Blender では基本的な形状データがいくつか用意されており、それらをベースに自分の好きな形状を作成していく事が出来る。

・プリミティブ基本物体のことを指す。Blender では用意されているメッシュがそれにあたりますが、Blender の世界ではプリミティブという言葉はあまり使われていないようです。混乱しないように、あえて載せてみました。ここは「ですます調」になっているが直すこと

・法線全ての形状の面には法線が存在する。3DCG にとって法線とはライトの光の計算から、テクスチャの貼り付けにおいて非常に重要な要素である。

・テクスチャオブジェクトの表面に写真などの画像データを貼って、より完成度の高いものを作成出来る。このときに貼り付ける画像データのことを指す。

・マテリアルオブジェクトの色や質感を指す。テクスチャはこのマテリアルに貼り付けられる。

・レンダリング

22

Page 28: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

作成したオブジェクトなどにライトの光やオブジェクトに設定したマテリアルのパラメータを合わせて計算し、 最終的な描画を行うことを指す。

・モデリング目的の形状にメッシュを仕上げていくことを指す。

図 1 Blender 起動画面

23

Page 29: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

付録 B ソースプログラム

太字にしないこと。プログラムの説明をコメントとしてい

れること。デバッグ用としてはさんであるコードは削除す

ること##############syuwa.cgi###################! "c:\/Program Files\/ruby-1.8\/bin\/ruby.exe" -Ks### syuwa.rb ###### プログラム本体 ###

require "cgi"cgi = CGI.neworiginalText = cgi["bun"]

require 'call_chasen.rb' # Chasen 起動準備

require 'asfbin.rb' # AsfBin 起動準備

require 'jisyo.rb' # 辞書require 'num_counter.rb' # 数字の桁調整

require 'SC_grammar.rb' # 文法

require 'connect.rb'#繋ぎのアニメーションを加える準備

hjisyo=jisyo() # 辞書の作成 => jisyo.rb

Pattern = /(\S+)\t(名|動|形容|感動|助動)詞/ # 品詞決定

###def pattern##################################################################

24

Page 30: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

def pattern(res)# 単語配列の作成

n = 0words = [] # 単語の配列のもと

for w in resif /姓|(名)(?!詞|前)/ =~ w # 姓|名の正規表現 名前マッチさせない

word = w.split # [単語,品詞,品詞細分類,読み]words[n] = word[3].split("") # 読みを単語配列へ

elsif Pattern =~ w # パターンマッチ

word = w.split # [単語,品詞,品詞細分類,読み]words[n] = word[0] # word[i]:単語

end # ifn += 1end # for wwords.flatten! # 配列をフラットに

words.delete(nil) # nil を削除return (words)end # def pattern

################################################################################

###main#########################################################################

tango= [] # 単語アニメーション用配列

str = bun(originalText) # 文法 => grammar.rb

if (/\d\d+/ =~ str) # 正規表現(数字 2 桁以上)### if (/\d+歳/ =~ str) # 年齢文法の変更 #back### str = toshi(str) # 文法 => gra_back.rb #back### end # if #backstr = count(str) # 数字 => num_counter.rbend # if

results = callChasen(str,"%M\t%H\t%BB\t%Y0\n") # chasen オプション設定

25

Page 31: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

words = pattern(results)# => def pattern

for i in 0..words.size - 1 # 単語数だけ繰り返す

tango[i] = hjisyo[words[i]] # 変換後の単語配列

end # for i

tangoList = [] #単語のつなぎを加えた空配列

i = 0 tangoList << "start" while (i < tango.size) #tango の数だけ

tangoList << tango[i] #tango[i]をまず入れる

if (ending[tango[i]] == "ru") #条件分けをしてその後ろに繋ぎとなる部分

のアニメーションを配列の単語として加える

tangoList << "ru" elsif (ending[tango[i]] == "rm") tangoList << "rm" elsif (ending[tango[i]] == "rl") tangoList << "rl" elsif (ending[tango[i]] == "rmc") tangoList << "rmc" elsif (ending[tango[i]] == "rlc") tangoList << "rlc" elsif (ending[tango[i]] == "wu") tangoList << "wu" elsif (ending[tango[i]] == "wm") tangoList << "wm" elsif (ending[tango[i]] == "wl") tangoList << "wl" elsif (ending[tango[i]] == "wmc") tangoList << "wmc" end #if i = i + 1 end # while tangoList.pop #最後の単語の繋ぎは必要ないので消す

syuwaFile = asfbin(tangoList) # 単語アニメーションの結合 =>

26

Page 32: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

asfbin.rb

################################################################################print <<EOSContent-type: text/html;charset=shift_jis

<html><meta http-equiv="Content-Type" content="text/html; charset=shift_jis"><head><title>手話アニメーション</title></head><body><H1>手話アニメーション</H1><br><!--<embedsrc="#{syuwaFile}"><img dynsrc="c:/temp/#{syuwaFile}"><!-- Windows Media Player 7.0 以降の場合 --><object classid="CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6" width="500" height="400"><param name="URL" value="#{syuwaFile}"><param name="AutoStart" value="true"><!-- <param name="uiMode" value="none">--><param name="ShowTracker" value="true"></object><br><H1>#{originalText}</H1></body></html>EOS

#! "c:/Program Files/ruby-1.8/bin/ruby.exe" -Ks### syuwa.rb ###### プログラム本体 ###

require "cgi"

27

Page 33: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

cgi = CGI.neworiginalText = cgi["bun"]

require 'call_chasen.rb' # Chasen 起動準備

require 'asfbin.rb' # AsfBin 起動準備

require 'jisyo.rb' # 辞書require 'num_counter.rb' # 数字の桁調整

require 'SC_grammar.rb' # 文法

hjisyo=jisyo() # 辞書の作成 => jisyo.rb

Pattern = /(\S+)\t(名|動|形容|感動|助動)詞/ # 品詞決定###defpattern##################################################################

def pattern(res)# 単語配列の作成

n = 0words = [] # 単語の配列のもと

for w in resif /姓|(名)(?!詞|前)/ =~ w # 姓|名の正規表現 名前マッチさせない

word = w.split # [単語,品詞,品詞細分類,読み]words[n] = word[3].split("") # 読みを単語配列へ

elsif Pattern =~ w # パターンマッチ

word = w.split # [単語,品詞,品詞細分類,読み]words[n] = word[0] # word[i]:単語

end # ifn += 1end # for wwords.flatten! # 配列をフラットに

words.delete(nil) # nil を削除return (words)

28

Page 34: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

end # def pattern

################################################################################

###main#########################################################################

tango= [] # 単語アニメーション用配列

str = bun(originalText) # 文法 => grammar.rb

if (/\d\d+/ =~ str) # 正規表現(数字 2 桁以上)### if (/\d+歳/ =~ str) # 年齢文法の変更 #back### str = toshi(str) # 文法 => gra_back.rb #back### end # if #backstr = count(str) # 数字 => num_counter.rbend # if

# tmp = open("logCheck.txt","w")

results = callChasen(str,"%M\t%H\t%BB\t%Y0\n") # chasen オプション設定

# p results # Chasen の結果

# for x in results; tmp.puts x; end

words = pattern(results)# => def pattern# p words # 単語の配列の確認

# tmp.print words,"\n---------------\n"

for i in 0..words.size - 1 # 単語数だけ繰り返す

# tmp.print jisyo[words[i]],"\n" # 辞書から手話のファイルに変換確認

tango[i] = hjisyo[words[i]] # 変換後の単語配列

end # for i

# p tango #tango の配列の確認

29

Page 35: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

tangoList = [] #単語のつなぎを加えた空配列

i = 0 while (i < tango.size) #tango の数だけ

tangoList << tango[i] #tango[i]をまず入れる

if (ending[tango[i]] == "ru") #条件分けをしてその後ろに繋ぎとなる部分

のアニメーションを配列の単語として加える

tangoList << "ru" p tangoList elsif (ending[tango[i]] == "rm") tangoList << "rm" elsif (ending[tango[i]] == "rl") tangoList << "rl" elsif (ending[tango[i]] == "rmc") tangoList << "rmc" elsif (ending[tango[i]] == "rlc") tangoList << "rlc" elsif (ending[tango[i]] == "wu") tangoList << "wu" elsif (ending[tango[i]] == "wm") tangoList << "wm" elsif (ending[tango[i]] == "wl") tangoList << "wl" elsif (ending[tango[i]] == "wmc") tangoList << "wmc" end #if i = i + 1 end # while tangoList.pop #最後の単語の繋ぎは必要ないので消す

# for x in tango; tmp.puts x; end# tmp.close asfbin(tango) # 単語アニメーションの結合 => asfbin.rb

################################################################################print <<EOSContent-type: text/html;charset=shift_jis

30

Page 36: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

<html><meta http-equiv="Content-Type" content="text/html; charset=shift_jis"><head><title>手話アニメーション</title></head><body><H1>手話アニメーション</H1><br><!--<embedsrc="c:/temp/mysyuwa.wmv"><img dynsrc="c:/temp/mysyuwa.wmv"><!-- Windows Media Player 7.0 以降の場合 --><object classid="CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6" width="500" height="400"><param name="URL" value="c:/temp/mysyuwa.wmv"><param name="AutoStart" value="true"><!-- <param name="uiMode" value="none">--><param name="ShowTracker" value="true"></object><br><H1>#{originalText}</H1></body></html>EOS

########call_cahasen.rb################################

def callChasen(line,param) # <= syuwa.rb str = '| C:\Program Files\ChaSen\chasen -F "'+ param +' "' # Chasen# str = '| C:\\Program Files\\chasen21\\chasen -F "'+ param +' "' # 学内# str = '| chasen -F "'+ param +' "' # 個人パソコン chasen pipe = open(str,"r+") pipe.puts line pipe.close_write result = pipe.readlines pipe.close_read

31

Page 37: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

return result # => syuwa.rbend # callChasen

######jisyo.rb##########################

def jisyo # <= syuwa.rb hjisyo = Hash.new(0) # Hash の作成

file = open("jisyo.txt") # jisyo.txt の読み込み

while line = file.gets # 1 行ずつ

ary = line.split(",") # 配列に

hjisyo[ary[0]] = ary[1].chomp # Hash関連付け

end # while file.close # jisyo.txt return(hjisyo) # => syuwa.rbend

########num_count.rb##############################

def count(str) if(/\d\d+/ =~ str) # 正規表現(2 桁以上にマッチ) mae = $` # 前の文

ushiro = $' # 後ろの文

num = $&.split("") # マッチした部分を単語配列に

end n = num.size - 1 i = num.size - 1 for w in 0..num.size - 1 # num の数分

n = i while(n > 0) num[w] = num[w].to_i * 10 # 桁の調整

n -= 1

32

Page 38: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

num[w] = num[w].to_s # 文字列に戻す

end # while i -= 1 end # for w num.delete("0") # 0 の削除

if (/\d\d+/ =~ ushiro) # 2 つ目の数字にマッチ(2 桁以上) go = $' # マッチした語の後ろの文

much = $&.split("") # マッチした部分を単語配列に

n = much.size - 1 i = much.size - 1 for w in 0..num.size - 1 # num の数分

n = i while(n > 0) much[w] = much[w].to_i * 10 # 桁の調整

n -= 1 much[w] = much[w].to_s # 文字列に戻す

end # while i -= 1 end # for w ushiro = " " + much.join(" ") + go # ushiro の文戻す

end # ifreturn mae + num.join(" ") + ushiro # 配列を 1 つの文に

end # def one

################################################################################

=begin###ひと桁目 1 以外の場合ひと桁目の場合##########################################################def no_one(num)# keta = num[0] # 1 番上の桁の数記憶

# num[0] = (num[0].to_i / num[0].to_i).to_s # 桁の調整の準備

n = num.size - 1 i = num.size - 1 for w in 0..num.size - 1 # num の数分

33

Page 39: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

n = i while(n > 0) num[w] = num[w].to_i * 10 # 桁の調整

n -= 1 num[w] = num[w].to_s # 文字列に戻す

end # while i -= 1 end # for w num.delete("0") # 0 の削除

# num.unshift(keta) # 1 番上の桁の追加

return num.join(" ") # 配列を文字列に

end # def hundred

################################################################################=end

#str = "私は今、歳 19 です。"#p count(str) # def count

#######SC_grammer.rb###################################################################################

class Grammar def initialize(str) @str = str # 文# if (/\d+[歳|時]/ =~ @str)# /\d+/ =~ @str # 正規表現

if (/どこ|どちら|誰|何|いつ|なぜ|いくつ|いくら|どう/ =~ @str) /どこ|どちら|誰|何|いつ|なぜ|いくつ|いくら|どう/ =~ @str# elsif (/\d+人/ =~ @str)# /(\d+人)(家族)/ =~ @str# @num = $1 # ○○人

# @string = $2 # 家族

34

Page 40: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

end @mae = $` # 前の文

@ushiro = $' # 後ろの文

@moji = $& # マッチした部分

#p @mae,@moji,@ushiro#p @num,@string # kazoku 確認

end

def string @str end

def mae @mae end

def moji @moji end

def ushiro @ushiro end=begin def toshi # ○○歳です。

ushiro = @ushiro.split("") # 後ろの文を文字に分ける

moji = @moji.split(" ") # マッチした部分を配列に

toshi = ushiro.shift # 配列の先頭から要素を取り出す

moji.unshift(toshi) # 配列の最初に要素を追加

str = mae + moji.join("") + ushiro.join("") # 1 つの文字列に

return str end

def jikan # ○○時です。

ushiro = @ushiro.split("") # 後ろの文を文字に分ける

moji = @moji.split(" ") # マッチした部分を配列に

35

Page 41: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

jikan = ushiro.shift + "間" # 配列の先頭から要素を取り出す

moji.unshift(jikan) # 配列の最初に要素を追加

moji.push(" ") # 時間と分を分ける

str = mae + moji.join("") + ushiro.join("") # 1 つの文字列に

return str end

def kazoku str = @mae + @string + @num + @ushiro # 1 つの文字列に

return str end

=end def gimon # 疑問文

ushiro = @ushiro.split("") # 後ろの文を文字に分ける

# ushiro.delete("?") # ?を削除

ushiro.delete("で") # "です"の削除

ushiro.delete("す") str = mae + " " + moji + " " + ushiro.join("") # 1 つの文字列に

return str endend

###############################################################

def bun(s) # <= syuwa.rb gra = Grammar.new(s) # 新しい instance#p gra result = s # 結果

# if (/\d+歳/ =~ s) # 歳# result = gra.toshi# elsif (/\d+時/ =~ s) # 時間

# result = gra.jikan if (/?/ =~ s) # 疑問

36

Page 42: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

result = gra.gimon# elsif (/\d 人家族/ =~ s) # ○○人家族

# result = gra.kazoku endreturn result # => syuwa.rbend###############################################################

#str = "私は今、22歳です。"#gra = Grammar.new(@st)#p @st

#######asfbin.rb#############################################

def asfbin(tango) # <= syuwa.rb# p tango tango_bun = "" i = 1 while(i < tango.size) tango_bun += tango[i] i = i + 2 end fileName = "c:\\temp\\#{tango_bun}.wmv" if !(File.readable?("#{fileName}")) for n in 0..tango.size - 1 # tango 配列要素分

tango[n] = "-i c:\\temp\\tango_wmv\\#{tango[n]}.wmv" # wmv ファイルを呼ぶ準備

end # for n tango = tango.join(" ") # 配列を合成

cmd = "C:\\Program Files\\asfbin1.7.14.756\\asfbin #{tango} -o

37

Page 43: lang.sist.chukyo-u.ac.jplang.sist.chukyo-u.ac.jp/.../2011/NakahataHotta.docx  · Web viewmoji.unshift(toshi) # 配列の最初に要素を

#{fileName}" # AsfBin を呼び出すコマンド

system(cmd) # AsfBin 呼び出し => wmv 結合

end return fileNameend

38