Slide 1

Slide 1 text

数独ではじめるアルゴリズム 第三章 OCR Ryosuke Uchiyama step63r

Slide 2

Slide 2 text

グラフ構造と深さ優先探索(DFS) 0 1 2 3 4 11 5 8 6 7 9 10 12 13 14 前 回 の あ ら す じ

Slide 3

Slide 3 text

入れられる数字の選択肢が少ないマスから埋めていく 3 6 5 4 8 7 9 4 5 1 9 7 3 5 6 8 9 6 5 4 4 6 5 5 6 5 3 5 3 4 5 6 5 3 4 4 4 6 5 5 5 4 4 5 5 5 4 4 5 5 5 4 7 3 3 4 3 4 4 5 6 4 4 5 6 5 4 4 6 4 5 7 7 4 6 7 7 5 6 6 8 問題 入れられる数字の残数 ここから処理するよりも… この辺から処理した方が速い! 前 回 の あ ら す じ

Slide 4

Slide 4 text

一意に決まるマスはあらかじめ埋めておく 3 6 5 4 8 7 9 4 5 1 9 7 3 5 6 8 9 問題 5 8 3 6 5 4 8 7 5 9 4 6 5 9 1 5 9 7 3 5 6 8 5 9 5 前処理後の問題 前 回 の あ ら す じ

Slide 5

Slide 5 text

MVVMパターン View ViewModel Model データ バインディング コマンド メソッド呼出し プロパティ設定 変更通知 変更通知 前 回 の あ ら す じ

Slide 6

Slide 6 text

Xamarin.Forms Shared C# Backend Shared UI Code iOS Android Windows 前 回 の あ ら す じ

Slide 7

Slide 7 text

今後やること • UI実装(WPFかXamarinあたり) • モバイル対応(iOSアプリをビルドする環境がない……つらたん……) • OCR(問題をカメラで撮ってAzure Cognitive Servicesとかで盤面認識&自動解答) • マルチスレッド(たぶんやらないやつ) 前 回 の あ ら す じ

Slide 8

Slide 8 text

数字の検出

Slide 9

Slide 9 text

Computer Visionを用いたテキスト抽出 問題発生!

Slide 10

Slide 10 text

Text = "3", BoundingBox = [ (115, 16), (133, 17), (132, 39), (114, 38)] どのマスにどの数字が 入るんだ……? 数独のマスも検出する必要があった!

Slide 11

Slide 11 text

マスの検出

Slide 12

Slide 12 text

どんなフレームワークが使えるか 案1 Azure Cognitive Servicesの既存モデルを活用 案2 Custom Visionに独自モデルをデプロイ 案3 画像解析ライブラリで交点検出 「数独のマスを検出するAPI」があるわけないので却下。 学習(データ採取)が面倒くさすぎるので却下。 PythonとOpenCVで似たようなことをやったことがあるな? 1)Harrisのコーナー検出 → 精度イマイチ 2)Shi-Tomasiのコーナー検出 → 精度イマイチ 3)Canny → いけそう! 採 用 採 用

Slide 13

Slide 13 text

XamarinでどうやってOpenCVを使うか Windows ランタイム コンポーネント - UWP applications | Microsoft Docs

Slide 14

Slide 14 text

Microsoftは神か? OpenCV でのビットマップの処理 - UWP applications | Microsoft Docs 問題発生!

Slide 15

Slide 15 text

cv::Mat Platform::Collections::Vector マネージ/ネイティブ間のマーシャリング 結局、フレーム検出機能はPythonで実装することに

Slide 16

Slide 16 text

つくったもの

Slide 17

Slide 17 text

ソースコード SudokuApp uchi-sudokuapp-functions

Slide 18

Slide 18 text

全体構成 SudokuApp ローカルストレージ OpenFileAsync RandamAccessStream Function App Cognitive Services DetectSudokuFrame JSON Response Stream IList

Slide 19

Slide 19 text

Demo