Your SlideShare is downloading. ×
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

OpenCVとSAT4Jを使ってナンプレに挑戦してみた

2,097

Published on

「ナンプレ破り」という Android アプリの中身の紹介。 …

「ナンプレ破り」という Android アプリの中身の紹介。
OpenCV を使ってパズルの問題を画像認識し、
SAT4J を使ってパズルを解きます。

体系的な技術解説ではなく、苦労したところ中心。

2013年11月16日に開催された「日本Androidの会 横浜支部 第18回定例会」でしゃべったときの資料。(スライドには“LT”と書いてありますが、実際には30分くらい、聞いている人たちの迷惑をかえりみず、たっぷりしゃべらせていただきました。)

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,097
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
13
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. OpenCV と SAT4J を使って ナンプレに挑戦してみた Alissa Sabre (関口正裕) @ 失業中 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 1
  • 2. イントロ 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 2
  • 3. 私は誰 ? ◆ 芸名 Alissa Sabre – – ◆ 2007 年に Second Life のオープンソース開発に参加 それ以降、個人としてのソフト開発はこの名前 (と、この顔 ^_^ ) http://alissa-sabre.cocolog-nifty.com 本名 関口正裕 – プログラマ歴 40 年(年齢は 50 代前半) – 富士通に勤めていたが構造改革で離職。 現在失業中。 – 文字コード屋。 Unicode とか得意。ソフト国際化も。 – 画像処理 / 画像認識は素人 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 3
  • 4. ナンプレ破り ― Google Play で無料配布中 https://play.google.com/store/apps/details?id=com.gmail.at.sabre.alissa.numberplace https://github.com/AlissaSabre/NumberPlace 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 4
  • 5. ナンプレ(数独)とは ? ◆ ◆ 同じ数字が重ならないように 1 ~ 9 を埋める 縦一列・横一行・同じブロック( 3x3 ) – – 日本だけでなく世界中に広まっている ● クロスワードと違い言語無依存 名前が二つある – ナンバープレース/ナンプレ/ Number Place – 数独/ Sudoku ※“ 数独”・“ Sudoku” は、株式会社ニコリの登録商標だそうです。 4 8 5 3 1 9 5 6 7 6 3 9 7 6 8 9 4 3 パズルの会社ニコリが流行らせたらしい 普通の新聞にも載っている。専門誌も多数ある。 9 7 追加ルールを入れたバリエーションもある – ◆ 6 いわゆるペンシル・パズル – ◆ 問題 8 3 1 解答 4 9 2 3 5 7 6 1 8 3 6 8 2 9 1 7 5 4 5 7 1 8 6 4 2 3 9 6 8 4 1 2 9 5 7 3 7 1 5 4 8 3 9 2 6 9 2 3 5 7 6 8 4 1 2 4 6 9 3 5 1 8 7 8 3 9 7 1 2 4 6 5 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 1 5 7 6 4 8 3 9 2 5
  • 6. アプリの動作 カメラで問題を撮影 android.hardware.Camera 画像処理 / 画像認識により問題を認識 問題を解く(ナンプレの問題を SAT に変換する) OpenCV SAT4J ※ AR のようなリアルタイムアプリではないので、   のんびり処理すれば大丈夫 ※ 本日は苦労したところを中心に紹介します 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 6
  • 7. ユーザービュー 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 7
  • 8. 開発の動機 ◆ ◆ SAT を解くプログラム( SAT Solver )が実用化されていると聞いて 驚いた 調べると SAT Solver でパズルが解けるという話もみつけた – ◆ 神戸大学の田村直之先生の記事 http://bach.istc.kobe-u.ac.jp/copris/puzzles/ とか http://bach.istc.kobe-u.ac.jp/sugar/puzzles/ 真似して作ってみたが、試すためのパズルの問題入力が面倒 そこで、問題の読取り(認識)機能も追加した – パズルを解く部分よりも、問題の認識の方がずっと大変だった… ● 本末転倒・手段の目的化はハッカーの性(サガ)なので仕方ない  :-) ◆ 他の人にも見せたくなり Google Play に登録した ◆ 外から見える部分だけでなく中身も知ってほしくなった イマココ 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 8
  • 9. OpenCV でナンプレ問題を認識 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 9
  • 10. 画像処理・問題認識の流れ 二値化と輪郭抽出によって問題の位置と形を特定する 射影変換により画像の歪みを補正し数字の位置をそろえる マスごとに数字を認識する(ナンチャッテ OCR ) 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 10
  • 11. ナンプレの問題の位置と形を特定する – adaptiveThreshold で二値化 – findContours でラベリング + 輪郭抽出 – 「問題ワク」らしい輪郭を選別(固定ロジック) – 四辺形近似( OpenCV にないので作ったが approxPolyDP でできるかも) 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 11
  • 12. adaptiveThreshold のパラメタ ◆ adaptiveThreshold のアルゴリズムにはパラメタがある – – – ◆ adaptiveMethod: “ 近傍”を決定するアルゴリズム blockSize: “ 近傍”の大きさ C: しきい値(明るさの境界)を微調整する値 最適なパラメタは撮影条件やカメラ(機種)によって大きく異なる – ナンプレ破りでは、最初の二つは事前に実験によって決定、 C は、実行時にいくつか試して結果を評価し、最も良いものを動的に選択。 C=1 C = 15 C = 41 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 12
  • 13. 問題の歪みを補正する ● 撮影された問題の画像は歪んでいる – 紙の曲がり(丸まり)、傾き、パース、レンズ収差… ● ● OpenCV には「カメラ補正」機能もあるが、 他に比べれば小さく、ナンプレ破りでは無視している 射影変換によって補正 – getPerspectiveTransform と warpPerspective – 射影変換で補正できるのは直線的な歪み(傾きとパース) 曲がりは補正できない。 ● ● ● 射影変換 フチの曲線を二次・三次の曲線で近似して補正する手 法があるようだ 外枠だけでなく内側の罫線も使っても改善できそう 補正によって数字の位置をそろえる – 数字の形も本来の形に近づき認識率が(少し)上がる 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 13
  • 14. 数字の認識( OCR ) ◆ ちゃんとした OCR は、手ごろなものが見当たらなかった – ◆ tesseract-ocr は C++ の上、認識可能文字が多い分重い 教科書に載っている類似画像検索的な方法を若干簡略化 – – 比較的単純な特徴量に対して機械学習。 – 分類器は素朴な kNN に変更。試したところ ANN と大差ない性能だったため 「アルゴリズムを理解できる」ものを採用。 – ◆ Mastering OpenCV with Practical Computing Vision Projects 延べ約 1000 字のサンプルを学習 パラメタを変えてテストし、最も成績のいい組合せを探した 数字の切出しは固定ロジックでコーディング – 歪み補正が十分でないので、広い範囲を候補として探す必要がある → 空欄なのに、影・裏映り・(かすれた)枠線などを数字と誤認する → 誤認しないように基準を厳しくすると、数字を拾いそこなう – 本当は「数字かどうか」の判定にも機械学習を使うといいようだ 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 14
  • 15. OpenCV Manager がイマイチな件 ◆ Android 用の OpenCV ライブラリは別アプリと してインストール – – ◆ Google Play のアプリページが全部英語 説明もわかりにくく、全体に“怪しい”感じ 普通のユーザーに「アプリの依存関係」とか言っても理 解してもらえない インストールをうながすダイアログが – ◆ ◆ 英語固定(ソース中に英文がハードコードされてい る)、内容もわかりにくい onResume() のたびに 800ms かかる (私のスマホでの実測値) ナンプレ破りでは初期化コードを独自に作り一部 の課題を改善 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 15
  • 16. SAT4J でナンプレを解く 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 16
  • 17. SAT とは ◆ SAT: Satisfiability problem (充足可能性問題) – NP 完全性とか勉強すると教科書に出ているアレです – 論理式(変数が全て Boolean )の連立方程式のことだと思うとわかりやすい x1+x2+x5+x7 = true x1+x3+x4 = true x3+x6 = true x3+x4+x6+x7 = true ︙ 解く x1 = true x2 = false x3 = true x4 = true x5 = false x6 = true ︙ ※ 左辺は + (OR) と  (NOT) だけ、 右辺は true のみ、という制約があるので あらかじめ変形しておく 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 17
  • 18. – – ◆ 方程式を入れると解が出てくる SAT Solver というものは他にもいろいろある x5 + x7 = tru e =t rue x1 + x2 + x6 SAT を解いてくれるプログラム ( SAT Solver ) x3 + ◆ x1+x3+x = true 4 SAT4J とは 100% Java – 何も考えずに Android で動きます – 他の SAT Solver と比べると若干遅いみたい ? ● でもナンプレを解く程度なら問題なし ◆ API が単純で使いやすい ◆ 別スレッドから処理中断を要求できる – Activity の onDestroy で UI スレッドから止めることができる – 処理の途中結果は失われます x1 = true x2 = false x3 = true ︙ 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 18
  • 19. SAT Solver って何が嬉しいの ? ◆ 変数にうまく意味を持たせると「ある条件を満たす組み合わせ」を 求めることができる – パズルを解くのに使える(ナンプレの他にもいろいろ解ける) – Eclipse に SAT4J が入っていてプラグインマネージャーが使っているらしい ● ◆ プラグインやライブラリの依存関係の解決に利用 (?) もっと実用的な課題解決にも使われているようだ – 看護師さんたちの交代勤務日程を作っている例 – J リーグの試合日程は SAT の親戚の整数制約条件ソルバーで作っているらしい … 他にもたくさんあるみたいですが、勉強中 – たまたま見つけたものですが、この分野の概観が http://eprints.soton.ac.uk/265340/1/jpms-wodes08.pdf とか http://courses.cs.washington.edu/courses/csep573/11wi/lectures/ashishsatsolvers.pdf とかに解説されています 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 19
  • 20. ナンプレの規則を SAT で表現する ◆ xijk ≡ 「 i 行 j 列に数字 k が入る」ときに true – – ◆ 変数を 9×9×9 = 729 個使う( SAT の応用としてはとても少ないらしい) こういう素朴な割り当てを direct encoding と言うようです 「全てのマスには 1 ~ 9 のどれかの数字が入る」という条件 xij1 + xij2 + xij3 + xij4 + ... + xij9 = true – ◆ 「各マスには数字が一つしか入らない」→「二つ入ることがない」 xijk ・ xijl = false → xijk + xijl = true – ◆ これを i と j と k と l (ただし k ≠ l )の全ての組合せ( 2916 通り)作る 「同じ行に同じ数字が入らない」などもこの調子で作る – ◆ このパターンの式を、 i と j の全ての組合せ( 81 通り)作る 残り 8748 通り。合計 11745 個。 最後に、決まっている数字を指定(問題に依存するのはここだけ) – i 行 j 列に数字 k が入っていれば xijk = true 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 20
  • 21. コード例 ◆ 「全てのマスには 1 ~ 9 のどれかの数字が入る」という条件 xij1 + xij2 + xij3 + xij4 + ... + xij9 = true – SAT4J では、変数は全て番号(正の整数)で表す。 not はマイナス。 ここでは var(i, j, d) が xijd の番号を与えている – VecInt というのが「式」を表す型(だと思えばよい) ここに変数をいくつか push すると、変数を + で繋いだ式という意味になる。 for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { final VecInt v = new VecInt(9); for (int d = 1; d <= 9; d++) { v.push(var(i, j, d)); } mSolver.addClause(v); } } 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 21
  • 22. ところで SAT って NP 完全なんじゃないの ? NP 完全問題って解けないんじゃないの ? ◆ 間違いなく SAT は NP 完全問題 – ◆ NP 完全であることが証明された最初の問題が SAT 。 NP 完全問題の元祖。 でも、 SAT Solver というものが作れて実用的な速度で動く – ナンプレだから、というわけではない。実はナンプレ自体も NP 完全。 ● ◆ ただし 16×16 ナンプレ、 25×25 ナンプレ、… のように大きさ可変の場合 私には、なぜそうなのか、正確に理解できていません… – たぶん、実行時間に関する指数項の係数が十分小さくて、 ある程度大きい問題が扱える、ということではないかと想像 – まぁ、理由はわからなくても、「ナンプレ破り」は動くからいいかな、と。 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 22
  • 23. 終わりに 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 23
  • 24. 課題 ◆ 問題の認識にまだ難がある – – 問題の外枠だけでなく中の罫線も使って、数字の位置を正確に合わせたい – ◆ デバイス(カメラの部品 ? )による差に対応しきれていない 数字のフォントを選ぶ → これは多様なフォントで学習させればいいだけかも そろそろ認識にかかる時間が気になりだしている – – ◆ 十分な認識率になったところでネイティブコードに書き直すのがいいかも でも、ある程度時間がかかったほうが「何かやっている」感があるような ? OpenCV Manager を別途インストールするのは面白くない – ◆ 使う機能が固定できたところで自分で抱えるのがいいかも 実は私、本当はスリリン作りたかったんです… 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 24
  • 25. いまさら聞けない Android 開発の疑問 ◆ Github に Android プロジェクトを載せる流儀 – – ◆ 今はヤミクモに入れてあるんですけど、これでいいのでしょうか ? Android アプリとセットで普通の Java アプリがある時は ? パッケージ名ってどうしてます ? – – ◆ 自分のドメインなんて持ってないんですけど…。 ナンプレ破りは com.gmail.at.sabre.alissa.numberplace Android のネイティブコードが使うメモリ(ヒープ) – ネイティブヒープが不足すると GC が走るような気がするんですが、本当 ? 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 25
  • 26. おしまい 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 26
  • 27. CREDITS ― Presentation Template このプレゼン資料の作成に Design-9 テンプレート (http://templates.openoffice.org/en/template/presentation-template-design-9) を一部修正したものを利 用しました。 Presentation Template Design-9, Background design by Yun Chao Xu, Template implementation by Xin Li, 2013/1/9. BSD License Copyright (c) 2009 by the respective owner All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: •Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. •Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. •Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 27
  • 28. CREDITS ― Font このプレゼン資料の作成に IPAex フォント( http://ipafont.ipa.go.jp )を利用しました。 IPAex フォントは IPA フォントライセンス v1.0 により利用が許諾されました。 IPA フォントライセンス v1.0 許諾者は、この使用許諾(以下「本契約」といいます。)に定める条件の下で、許諾プログラム( 1 条に定義するところによります。)を提供します。受領者( 1 条に定義するところによります。)が、許諾プログラムを使用し、複製し、または頒布する 行為、その他、本契約に定める権利の利用を行った場合、受領者は本契約に同意したものと見なします。 第 1 条 用語の定義 本契約において、次の各号に掲げる用語は、当該各号に定めるところによります。 1. 「デジタル・フォント・プログラム」とは、フォントを含み、レンダリングしまたは表示するために用いられるコンピュータ・プログラムをいいます。 2. 「許諾プログラム」とは、許諾者が本契約の下で許諾するデジタル・フォント・プログラムをいいます。 3. 「派生プログラム」とは、許諾プログラムの一部または全部を、改変し、加除修正等し、入れ替え、その他翻案したデジタル・フォント・プログラムをいい、許諾プログラムの一部もしくは全部から文字情報を取り出し、またはデジタル・ドキュメント・ ファイルからエンベッドされたフォントを取り出し、取り出された文字情報をそのまま、または改変をなして新たなデジタル・フォント・プログラムとして製作されたものを含みます。 4. 「デジタル・コンテンツ」とは、デジタル・データ形式によってエンド・ユーザに提供される制作物のことをいい、動画・静止画等の映像コンテンツおよびテレビ番組等の放送コンテンツ、ならびに文字テキスト、画像、図形等を含んで構成された制作 物を含みます。 5. 「デジタル・ドキュメント・ファイル」とは、 PDF ファイルその他、各種ソフトウェア・プログラムによって製作されたデジタル・コンテンツであって、その中にフォントを表示するために許諾プログラムの全部または一部が埋め込まれた(エンベッド された)ものをいいます。フォントが「エンベッドされた」とは、当該フォントが埋め込まれた特定の「デジタル・ドキュメント・ファイル」においてのみ表示されるために使用されている状態を指し、その特定の「デジタル・ドキュメント・ファイ ル」以外でフォントを表示するために使用できるデジタル・フォント・プログラムに含まれている場合と区別されます。 6. 「コンピュータ」とは、本契約においては、サーバを含みます。 7. 「複製その他の利用」とは、複製、譲渡、頒布、貸与、公衆送信、上映、展示、翻案その他の利用をいいます。 8. 「受領者」とは、許諾プログラムを本契約の下で受領した人をいい、受領者から許諾プログラムを受領した人を含みます。 第2条 使用許諾の付与 許諾者は受領者に対し、本契約の条項に従い、すべての国で、許諾プログラムを使用することを許諾します。ただし、許諾プログラムに存在する一切の権利はすべて許諾者が保有しています。本契約は、本契約で明示的に定められている場合を除き、いか なる意味においても、許諾者が保有する許諾プログラムに関する一切の権利および、いかなる商標、商号、もしくはサービス・マークに関する権利をも受領者に移転するものではありません。 1. 受領者は本契約に定める条件に従い、許諾プログラムを任意の数のコンピュータにインストールし、当該コンピュータで使用することができます。 2. 受領者はコンピュータにインストールされた許諾プログラムをそのまま、または改変を行ったうえで、印刷物およびデジタル・コンテンツにおいて、文字テキスト表現等として使用することができます。 3. 受領者は前項の定めに従い作成した印刷物およびデジタル・コンテンツにつき、その商用・非商用の別、および放送、通信、各種記録メディアなどの媒体の形式を問わず、複製その他の利用をすることができます。 4. 受領者がデジタル・ドキュメント・ファイルからエンベッドされたフォントを取り出して派生プログラムを作成した場合には、かかる派生プログラムは本契約に定める条件に従う必要があります。 5. 許諾プログラムのエンベッドされたフォントがデジタル・ドキュメント・ファイル内のデジタル・コンテンツをレンダリングするためにのみ使用される場合において、受領者が当該デジタル・ドキュメント・ファイルを複製その他の利用をする場合に は、受領者はかかる行為に関しては本契約の下ではいかなる義務をも負いません。 6. 受領者は、 3 条 2 項の定めに従い、商用・非商用を問わず、許諾プログラムをそのままの状態で改変することなく複製して第三者への譲渡し、公衆送信し、その他の方法で再配布することができます ( 以下、「再配布」といいます。 ) 。 7. 受領者は、上記の許諾プログラムについて定められた条件と同様の条件に従って、派生プログラムを作成し、使用し、複製し、再配布することができます。ただし、受領者が派生プログラムを再配布する場合には、 3 条 1 項の定めに従うものとします。 第3条 制限 前条により付与された使用許諾は、以下の制限に服します。 1. 派生プログラムが前条 4 項及び 7 項に基づき再配布される場合には、以下の全ての条件を満たさなければなりません。 (1) 派生プログラムを再配布する際には、下記もまた、当該派生プログラムと一緒に再配布され、オンラインで提供され、または、郵送費・媒体及び取扱手数料の合計を超えない実費と引き換えに媒体を郵送する方法により提供されなければなりません。 (a) 派生プログラムの写し ; および (b) 派生プログラムを作成する過程でフォント開発プログラムによって作成された追加のファイルであって派生プログラムをさらに加工するにあたって利用できるファイルが存在すれば、当該ファイル (2) 派生プログラムの受領者が、派生プログラムを、このライセンスの下で最初にリリースされた許諾プログラム(以下、「オリジナル・プログラム」といいます。)に置き換えることができる方法を再配布するものとします。かかる方法は、オリジナ ル・ファイルからの差分ファイルの提供、または、派生プログラムをオリジナル・プログラムに置き換える方法を示す指示の提供などが考えられます。 (3) 派生プログラムを、本契約書に定められた条件の下でライセンスしなければなりません。 (4) 派生プログラムのプログラム名、フォント名またはファイル名として、許諾プログラムが用いているのと同一の名称、またはこれを含む名称を使用してはなりません。 (5) 本項の要件を満たすためにオンラインで提供し、または媒体を郵送する方法で提供されるものは、その提供を希望するいかなる者によっても提供が可能です。 2. 受領者が前条 6 項に基づき許諾プログラムを再配布する場合には、以下の全ての条件を満たさなければなりません。 (1) 許諾プログラムの名称を変更してはなりません。 (2) 許諾プログラムに加工その他の改変を加えてはなりません。 (3) 本契約の写しを許諾プログラムに添付しなければなりません。 3. 許諾プログラムは、現状有姿で提供されており、許諾プログラムまたは派生プログラムについて、許諾者は一切の明示または黙示の保証(権利の所在、非侵害、商品性、特定目的への適合性を含むがこれに限られません)を行いません。いかなる場合に も、その原因を問わず、契約上の責任か厳格責任か過失その他の不法行為責任かにかかわらず、また事前に通知されたか否かにかかわらず、許諾者は、許諾プログラムまたは派生プログラムのインストール、使用、複製その他の利用または本契約上の権 利の行使によって生じた一切の損害(直接・間接・付随的・特別・拡大・懲罰的または結果的損害)(商品またはサービスの代替品の調達、システム障害から生じた損害、現存するデータまたはプログラムの紛失または破損、逸失利益を含むがこれに限 られません)について責任を負いません。 4. 許諾プログラムまたは派生プログラムのインストール、使用、複製その他の利用に関して、許諾者は技術的な質問や問い合わせ等に対する対応その他、いかなるユーザ・サポートをも行う義務を負いません。 第4条 契約の終了 1. 本契約の有効期間は、受領者が許諾プログラムを受領した時に開始し、受領者が許諾プログラムを何らかの方法で保持する限り続くものとします。 2. 前項の定めにかかわらず、受領者が本契約に定める各条項に違反したときは、本契約は、何らの催告を要することなく、自動的に終了し、当該受領者はそれ以後、許諾プログラムおよび派生プログラムを一切使用しまたは複製その他の利用をすることが できないものとします。ただし、かかる契約の終了は、当該違反した受領者から許諾プログラムまたは派生プログラムの配布を受けた受領者の権利に影響を及ぼすものではありません。 第5条 準拠法 1.IPA は、本契約の変更バージョンまたは新しいバージョンを公表することができます。その場合には、受領者は、許諾プログラムまたは派生プログラムの使用、複製その他の利用または再配布にあたり、本契約または変更後の契約のいずれかを選択する ことができます。その他、上記に記載されていない条項に関しては日本の著作権法および関連法規に従うものとします。 2. 本契約は、日本法に基づき解釈されます。 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 28

×