SlideShare a Scribd company logo
1 of 28
Download to read offline
OpenCV と SAT4J を使って
ナンプレに挑戦してみた
Alissa Sabre (関口正裕) @ 失業中

2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

1
イントロ

2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

2
私は誰 ?
◆

芸名 Alissa Sabre
–

–

◆

2007 年に Second Life のオープンソース開発に参加
それ以降、個人としてのソフト開発はこの名前
(と、この顔 ^_^ )
http://alissa-sabre.cocolog-nifty.com

本名 関口正裕
–

プログラマ歴 40 年(年齢は 50 代前半)

–

富士通に勤めていたが構造改革で離職。
現在失業中。

–

文字コード屋。 Unicode とか得意。ソフト国際化も。

–

画像処理 / 画像認識は素人

2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

3
ナンプレ破り ― 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
ナンプレ(数独)とは ?
◆

◆

同じ数字が重ならないように 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
アプリの動作
カメラで問題を撮影

android.hardware.Camera

画像処理 / 画像認識により問題を認識

問題を解く(ナンプレの問題を SAT に変換する)

OpenCV

SAT4J

※ AR のようなリアルタイムアプリではないので、
  のんびり処理すれば大丈夫
※ 本日は苦労したところを中心に紹介します
2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

6
ユーザービュー

2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

7
開発の動機
◆

◆

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
OpenCV でナンプレ問題を認識

2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

9
画像処理・問題認識の流れ

二値化と輪郭抽出によって問題の位置と形を特定する

射影変換により画像の歪みを補正し数字の位置をそろえる

マスごとに数字を認識する(ナンチャッテ OCR )

2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

10
ナンプレの問題の位置と形を特定する
–

adaptiveThreshold で二値化

–

findContours でラベリング + 輪郭抽出

–

「問題ワク」らしい輪郭を選別(固定ロジック)

–

四辺形近似( OpenCV にないので作ったが approxPolyDP でできるかも)

2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

11
adaptiveThreshold のパラメタ
◆

adaptiveThreshold のアルゴリズムにはパラメタがある
–
–
–

◆

adaptiveMethod: “ 近傍”を決定するアルゴリズム
blockSize: “ 近傍”の大きさ
C: しきい値(明るさの境界)を微調整する値

最適なパラメタは撮影条件やカメラ(機種)によって大きく異なる
–

ナンプレ破りでは、最初の二つは事前に実験によって決定、
C は、実行時にいくつか試して結果を評価し、最も良いものを動的に選択。

C=1

C = 15

C = 41

2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

12
問題の歪みを補正する
●

撮影された問題の画像は歪んでいる
–

紙の曲がり(丸まり)、傾き、パース、レンズ収差…
●

●

OpenCV には「カメラ補正」機能もあるが、
他に比べれば小さく、ナンプレ破りでは無視している

射影変換によって補正
–

getPerspectiveTransform と warpPerspective

–

射影変換で補正できるのは直線的な歪み(傾きとパース)
曲がりは補正できない。
●

●

●

射影変換

フチの曲線を二次・三次の曲線で近似して補正する手
法があるようだ
外枠だけでなく内側の罫線も使っても改善できそう

補正によって数字の位置をそろえる
–

数字の形も本来の形に近づき認識率が(少し)上がる

2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

13
数字の認識( OCR )
◆

ちゃんとした OCR は、手ごろなものが見当たらなかった
–

◆

tesseract-ocr は C++ の上、認識可能文字が多い分重い

教科書に載っている類似画像検索的な方法を若干簡略化
–
–

比較的単純な特徴量に対して機械学習。

–

分類器は素朴な kNN に変更。試したところ ANN と大差ない性能だったため
「アルゴリズムを理解できる」ものを採用。

–

◆

Mastering OpenCV with Practical Computing Vision Projects

延べ約 1000 字のサンプルを学習
パラメタを変えてテストし、最も成績のいい組合せを探した

数字の切出しは固定ロジックでコーディング
–

歪み補正が十分でないので、広い範囲を候補として探す必要がある
→ 空欄なのに、影・裏映り・(かすれた)枠線などを数字と誤認する
→ 誤認しないように基準を厳しくすると、数字を拾いそこなう

–

本当は「数字かどうか」の判定にも機械学習を使うといいようだ
2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

14
OpenCV Manager がイマイチな件
◆

Android 用の OpenCV ライブラリは別アプリと
してインストール
–

–

◆

Google Play のアプリページが全部英語
説明もわかりにくく、全体に“怪しい”感じ
普通のユーザーに「アプリの依存関係」とか言っても理
解してもらえない

インストールをうながすダイアログが
–

◆

◆

英語固定(ソース中に英文がハードコードされてい
る)、内容もわかりにくい

onResume() のたびに 800ms かかる
(私のスマホでの実測値)
ナンプレ破りでは初期化コードを独自に作り一部
の課題を改善
2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

15
SAT4J でナンプレを解く

2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

16
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
–
–
◆

方程式を入れると解が出てくる
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
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
ナンプレの規則を 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
コード例
◆

「全てのマスには 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
ところで SAT って NP 完全なんじゃないの ?
NP 完全問題って解けないんじゃないの ?
◆

間違いなく SAT は NP 完全問題
–

◆

NP 完全であることが証明された最初の問題が SAT 。 NP 完全問題の元祖。

でも、 SAT Solver というものが作れて実用的な速度で動く
–

ナンプレだから、というわけではない。実はナンプレ自体も NP 完全。
●

◆

ただし 16×16 ナンプレ、 25×25 ナンプレ、… のように大きさ可変の場合

私には、なぜそうなのか、正確に理解できていません…
–

たぶん、実行時間に関する指数項の係数が十分小さくて、
ある程度大きい問題が扱える、ということではないかと想像

–

まぁ、理由はわからなくても、「ナンプレ破り」は動くからいいかな、と。

2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

22
終わりに

2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

23
課題
◆

問題の認識にまだ難がある
–
–

問題の外枠だけでなく中の罫線も使って、数字の位置を正確に合わせたい

–

◆

デバイス(カメラの部品 ? )による差に対応しきれていない
数字のフォントを選ぶ → これは多様なフォントで学習させればいいだけかも

そろそろ認識にかかる時間が気になりだしている
–
–

◆

十分な認識率になったところでネイティブコードに書き直すのがいいかも
でも、ある程度時間がかかったほうが「何かやっている」感があるような ?

OpenCV Manager を別途インストールするのは面白くない
–

◆

使う機能が固定できたところで自分で抱えるのがいいかも

実は私、本当はスリリン作りたかったんです…
2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

24
いまさら聞けない Android 開発の疑問
◆

Github に Android プロジェクトを載せる流儀
–
–

◆

今はヤミクモに入れてあるんですけど、これでいいのでしょうか ?
Android アプリとセットで普通の Java アプリがある時は ?

パッケージ名ってどうしてます ?
–
–

◆

自分のドメインなんて持ってないんですけど…。
ナンプレ破りは com.gmail.at.sabre.alissa.numberplace

Android のネイティブコードが使うメモリ(ヒープ)
–

ネイティブヒープが不足すると GC が走るような気がするんですが、本当 ?

2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

25
おしまい

2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT

26
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
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

More Related Content

What's hot

Viveはじめました
ViveはじめましたViveはじめました
ViveはじめましたKojiro Yano
 
Kubernetesを使う上で抑えておくべきAWSの基礎概念
Kubernetesを使う上で抑えておくべきAWSの基礎概念Kubernetesを使う上で抑えておくべきAWSの基礎概念
Kubernetesを使う上で抑えておくべきAWSの基礎概念Shinya Mori (@mosuke5)
 
Uniform indexing load with cluster reroute api
Uniform indexing load with cluster reroute apiUniform indexing load with cluster reroute api
Uniform indexing load with cluster reroute apiHiroshi Yoshioka
 
DAOのいまとこれから
DAOのいまとこれからDAOのいまとこれから
DAOのいまとこれからAtsushiSasaki9
 
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...Amazon Web Services Japan
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すTakaya Saeki
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
RDRAにおける合意形成の仕組み
RDRAにおける合意形成の仕組みRDRAにおける合意形成の仕組み
RDRAにおける合意形成の仕組みZenji Kanzaki
 
KeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについてKeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについてHiroyuki Wada
 
アプリケーション開発者のためのAzure Databricks入門
アプリケーション開発者のためのAzure Databricks入門アプリケーション開発者のためのAzure Databricks入門
アプリケーション開発者のためのAzure Databricks入門Yoichi Kawasaki
 
Rdraモデリングをしよう
RdraモデリングをしようRdraモデリングをしよう
RdraモデリングをしようZenji Kanzaki
 
S14 azure site recovery を利用したオンプレミスから azure のサイト回復
S14 azure site recovery を利用したオンプレミスから azure のサイト回復S14 azure site recovery を利用したオンプレミスから azure のサイト回復
S14 azure site recovery を利用したオンプレミスから azure のサイト回復Microsoft Azure Japan
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Shin Ohno
 
Oracle Cloud の セキュリティ・コンプライアンス 最新情報(Oracle Cloudウェビナーシリーズ: 2020年7月16日)
Oracle Cloud の セキュリティ・コンプライアンス 最新情報(Oracle Cloudウェビナーシリーズ: 2020年7月16日) Oracle Cloud の セキュリティ・コンプライアンス 最新情報(Oracle Cloudウェビナーシリーズ: 2020年7月16日)
Oracle Cloud の セキュリティ・コンプライアンス 最新情報(Oracle Cloudウェビナーシリーズ: 2020年7月16日) オラクルエンジニア通信
 
Dkos(mesos기반의 container orchestration)
Dkos(mesos기반의 container orchestration)Dkos(mesos기반의 container orchestration)
Dkos(mesos기반의 container orchestration)Won-Chon Jung
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRecruit Technologies
 
今なぜサーバーレスなのか
今なぜサーバーレスなのか今なぜサーバーレスなのか
今なぜサーバーレスなのか真吾 吉田
 
Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方Makoto Ito
 

What's hot (20)

Viveはじめました
ViveはじめましたViveはじめました
Viveはじめました
 
Kubernetesを使う上で抑えておくべきAWSの基礎概念
Kubernetesを使う上で抑えておくべきAWSの基礎概念Kubernetesを使う上で抑えておくべきAWSの基礎概念
Kubernetesを使う上で抑えておくべきAWSの基礎概念
 
Uniform indexing load with cluster reroute api
Uniform indexing load with cluster reroute apiUniform indexing load with cluster reroute api
Uniform indexing load with cluster reroute api
 
DAOのいまとこれから
DAOのいまとこれからDAOのいまとこれから
DAOのいまとこれから
 
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
RDRAにおける合意形成の仕組み
RDRAにおける合意形成の仕組みRDRAにおける合意形成の仕組み
RDRAにおける合意形成の仕組み
 
KeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについてKeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについて
 
アプリケーション開発者のためのAzure Databricks入門
アプリケーション開発者のためのAzure Databricks入門アプリケーション開発者のためのAzure Databricks入門
アプリケーション開発者のためのAzure Databricks入門
 
Rdraモデリングをしよう
RdraモデリングをしようRdraモデリングをしよう
Rdraモデリングをしよう
 
S14 azure site recovery を利用したオンプレミスから azure のサイト回復
S14 azure site recovery を利用したオンプレミスから azure のサイト回復S14 azure site recovery を利用したオンプレミスから azure のサイト回復
S14 azure site recovery を利用したオンプレミスから azure のサイト回復
 
WSDM2018Study
WSDM2018StudyWSDM2018Study
WSDM2018Study
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
 
Oracle Cloud の セキュリティ・コンプライアンス 最新情報(Oracle Cloudウェビナーシリーズ: 2020年7月16日)
Oracle Cloud の セキュリティ・コンプライアンス 最新情報(Oracle Cloudウェビナーシリーズ: 2020年7月16日) Oracle Cloud の セキュリティ・コンプライアンス 最新情報(Oracle Cloudウェビナーシリーズ: 2020年7月16日)
Oracle Cloud の セキュリティ・コンプライアンス 最新情報(Oracle Cloudウェビナーシリーズ: 2020年7月16日)
 
Dkos(mesos기반의 container orchestration)
Dkos(mesos기반의 container orchestration)Dkos(mesos기반의 container orchestration)
Dkos(mesos기반의 container orchestration)
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
 
今なぜサーバーレスなのか
今なぜサーバーレスなのか今なぜサーバーレスなのか
今なぜサーバーレスなのか
 
Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方
 
Guide To AGPL
Guide To AGPLGuide To AGPL
Guide To AGPL
 

Viewers also liked

オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリオープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ陽平 山口
 
OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門uranishi
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないことNorishige Fukushima
 
ナンプレ解析ツール
ナンプレ解析ツールナンプレ解析ツール
ナンプレ解析ツールkstmshinshu
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
大富豪に対する機械学習の適用 + α
大富豪に対する機械学習の適用 + α大富豪に対する機械学習の適用 + α
大富豪に対する機械学習の適用 + αKatsuki Ohto
 
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみたOpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた徹 上野山
 
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Seiya Tokui
 
画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量takaya imai
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Ken Morishita
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual TalksYuya Unno
 

Viewers also liked (14)

Tesseract ocr
Tesseract ocrTesseract ocr
Tesseract ocr
 
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリオープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
 
OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
ナンプレ解析ツール
ナンプレ解析ツールナンプレ解析ツール
ナンプレ解析ツール
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
大富豪に対する機械学習の適用 + α
大富豪に対する機械学習の適用 + α大富豪に対する機械学習の適用 + α
大富豪に対する機械学習の適用 + α
 
OpenCVの基礎
OpenCVの基礎OpenCVの基礎
OpenCVの基礎
 
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみたOpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
 
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Deep learning実装の基礎と実践
Deep learning実装の基礎と実践
 
画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量
 
OpenCV 3.0 on iOS
OpenCV 3.0 on iOSOpenCV 3.0 on iOS
OpenCV 3.0 on iOS
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks
 

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

XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論賢次 海老原
 
20190524_WindowsユーザのためのSalesforce DX
20190524_WindowsユーザのためのSalesforce DX20190524_WindowsユーザのためのSalesforce DX
20190524_WindowsユーザのためのSalesforce DXTakahito Miyamoto
 
Jubatus Casual Talks #2 Jubatus開発者入門
Jubatus Casual Talks #2 Jubatus開発者入門Jubatus Casual Talks #2 Jubatus開発者入門
Jubatus Casual Talks #2 Jubatus開発者入門Shuzo Kashihara
 
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」Serverworks Co.,Ltd.
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話Kazuya Wada
 
インプットメソッドメンテナーの日常
インプットメソッドメンテナーの日常インプットメソッドメンテナーの日常
インプットメソッドメンテナーの日常Fuminobu Takeyama
 
サブスタンスデザイナーの 基礎と活用術 - KCROP版 -
サブスタンスデザイナーの 基礎と活用術 - KCROP版 -サブスタンスデザイナーの 基礎と活用術 - KCROP版 -
サブスタンスデザイナーの 基礎と活用術 - KCROP版 -poko ponmaru
 
Zマイスターとの新たな価値探求 Rational
Zマイスターとの新たな価値探求 RationalZマイスターとの新たな価値探求 Rational
Zマイスターとの新たな価値探求 RationalIBMソリューション
 
What’s new in 4.0 of LibreOffice (Lake-Hamanako-ver.) / LibreOffice 4.0の新機能 (...
What’s new in 4.0 of LibreOffice (Lake-Hamanako-ver.) / LibreOffice 4.0の新機能 (...What’s new in 4.0 of LibreOffice (Lake-Hamanako-ver.) / LibreOffice 4.0の新機能 (...
What’s new in 4.0 of LibreOffice (Lake-Hamanako-ver.) / LibreOffice 4.0の新機能 (...Naruhiko Ogasawara
 
【DevLOVE現場甲子園2013】Software Engineer in Test @ 楽天の検索基盤の現場
【DevLOVE現場甲子園2013】Software Engineer in Test @ 楽天の検索基盤の現場【DevLOVE現場甲子園2013】Software Engineer in Test @ 楽天の検索基盤の現場
【DevLOVE現場甲子園2013】Software Engineer in Test @ 楽天の検索基盤の現場Kotaro Ogino
 
オープンソースとプラットフォームとお金
オープンソースとプラットフォームとお金オープンソースとプラットフォームとお金
オープンソースとプラットフォームとお金masayoshi takahashi
 
Java script testing framework for around html5 studies-
Java script testing framework for  around html5 studies-Java script testing framework for  around html5 studies-
Java script testing framework for around html5 studies-Jun Saeki
 
The Internal of Serverless Plugins
The Internal of Serverless PluginsThe Internal of Serverless Plugins
The Internal of Serverless PluginsTerui Masashi
 
プログラミング学習のための学習
プログラミング学習のための学習プログラミング学習のための学習
プログラミング学習のための学習siranon *
 
stripe-rubyで サブスクリプションを 実装して得た知見
stripe-rubyで サブスクリプションを 実装して得た知見stripe-rubyで サブスクリプションを 実装して得た知見
stripe-rubyで サブスクリプションを 実装して得た知見Isao Ebisujima
 
Railsハイパー実践講座-第35回NaCl勉強会
Railsハイパー実践講座-第35回NaCl勉強会Railsハイパー実践講座-第35回NaCl勉強会
Railsハイパー実践講座-第35回NaCl勉強会Narihiro Nakamura
 
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!デベロッパーネットワーク
 
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界Y Watanabe
 

Similar to OpenCVとSAT4Jを使ってナンプレに挑戦してみた (20)

XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
XPages Day 2013 [B-3] XPages開発を始める Notes技術者のためのWeb技術概論
 
20190524_WindowsユーザのためのSalesforce DX
20190524_WindowsユーザのためのSalesforce DX20190524_WindowsユーザのためのSalesforce DX
20190524_WindowsユーザのためのSalesforce DX
 
Jubatus Casual Talks #2 Jubatus開発者入門
Jubatus Casual Talks #2 Jubatus開発者入門Jubatus Casual Talks #2 Jubatus開発者入門
Jubatus Casual Talks #2 Jubatus開発者入門
 
エンジニア勉強会_DECIDE
エンジニア勉強会_DECIDEエンジニア勉強会_DECIDE
エンジニア勉強会_DECIDE
 
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話
 
インプットメソッドメンテナーの日常
インプットメソッドメンテナーの日常インプットメソッドメンテナーの日常
インプットメソッドメンテナーの日常
 
サブスタンスデザイナーの 基礎と活用術 - KCROP版 -
サブスタンスデザイナーの 基礎と活用術 - KCROP版 -サブスタンスデザイナーの 基礎と活用術 - KCROP版 -
サブスタンスデザイナーの 基礎と活用術 - KCROP版 -
 
Zマイスターとの新たな価値探求 Rational
Zマイスターとの新たな価値探求 RationalZマイスターとの新たな価値探求 Rational
Zマイスターとの新たな価値探求 Rational
 
What’s new in 4.0 of LibreOffice (Lake-Hamanako-ver.) / LibreOffice 4.0の新機能 (...
What’s new in 4.0 of LibreOffice (Lake-Hamanako-ver.) / LibreOffice 4.0の新機能 (...What’s new in 4.0 of LibreOffice (Lake-Hamanako-ver.) / LibreOffice 4.0の新機能 (...
What’s new in 4.0 of LibreOffice (Lake-Hamanako-ver.) / LibreOffice 4.0の新機能 (...
 
【DevLOVE現場甲子園2013】Software Engineer in Test @ 楽天の検索基盤の現場
【DevLOVE現場甲子園2013】Software Engineer in Test @ 楽天の検索基盤の現場【DevLOVE現場甲子園2013】Software Engineer in Test @ 楽天の検索基盤の現場
【DevLOVE現場甲子園2013】Software Engineer in Test @ 楽天の検索基盤の現場
 
オープンソースとプラットフォームとお金
オープンソースとプラットフォームとお金オープンソースとプラットフォームとお金
オープンソースとプラットフォームとお金
 
Java script testing framework for around html5 studies-
Java script testing framework for  around html5 studies-Java script testing framework for  around html5 studies-
Java script testing framework for around html5 studies-
 
The Internal of Serverless Plugins
The Internal of Serverless PluginsThe Internal of Serverless Plugins
The Internal of Serverless Plugins
 
プログラミング学習のための学習
プログラミング学習のための学習プログラミング学習のための学習
プログラミング学習のための学習
 
stripe-rubyで サブスクリプションを 実装して得た知見
stripe-rubyで サブスクリプションを 実装して得た知見stripe-rubyで サブスクリプションを 実装して得た知見
stripe-rubyで サブスクリプションを 実装して得た知見
 
Railsハイパー実践講座-第35回NaCl勉強会
Railsハイパー実践講座-第35回NaCl勉強会Railsハイパー実践講座-第35回NaCl勉強会
Railsハイパー実践講座-第35回NaCl勉強会
 
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
 
Java frameworkの昔と今
Java frameworkの昔と今Java frameworkの昔と今
Java frameworkの昔と今
 
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
 

Recently uploaded

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 

Recently uploaded (9)

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 

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

  • 1. OpenCV と SAT4J を使って ナンプレに挑戦してみた Alissa Sabre (関口正裕) @ 失業中 2013年11月16日 日本Androidの会 横浜支部 第18回定例会 LT 1
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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