Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
数独ではじめるアルゴリズム 第三章 OCR
Search
Ryosuke Uchiyama
December 09, 2020
Programming
0
90
数独ではじめるアルゴリズム 第三章 OCR
Ryosuke Uchiyama
December 09, 2020
Tweet
Share
More Decks by Ryosuke Uchiyama
See All by Ryosuke Uchiyama
AWSでサーバレスな書籍管理アプリを作る
step63r
0
16
PythonでSlack通知botを作る
step63r
0
4
ChatGPT実践
step63r
1
290
IoT実践! 行先予定表を電子ペーパーで作る
step63r
0
4
React x Socket.ioで人狼サーバを作る 第一章 フロントエンド実装
step63r
0
3
深層強化学習で東方AI 第一章 DQNの基本
step63r
0
160
Build 2021 プレイバック
step63r
0
27
WPFで実践アプリ開発! 第四章 機能の実装 Part 2
step63r
0
38
WPFで実践アプリ開発! 第三章 機能の実装 Part 1
step63r
0
110
Other Decks in Programming
See All in Programming
Enterprise Web App. Development (2): Version Control Tool Training Ver. 5.1
knakagawa
1
110
漸進。
ssssota
0
1.8k
Use Perl as Better Shell Script
karupanerura
0
690
コード書くの好きな人向けAIコーディング活用tips #orestudy
77web
3
280
統一感のある Go コードを生成 AI の力で手にいれる
otakakot
0
2.9k
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
ivargrimstad
1
550
Gleamという選択肢
comamoca
6
670
ktr0731/go-mcpでMCPサーバー作ってみた
takak2166
0
150
List Unfolding - 'unfold' as the Computational Dual of 'fold', and how 'unfold' relates to 'iterate'"
philipschwarz
PRO
0
180
コードに語らせよう――自己ドキュメント化が内包する楽しさについて / Let the Code Speak
nrslib
6
1.4k
UPDATEがシステムを複雑にする? イミュータブルデータモデルのすすめ
shimomura
1
520
Datadog RUM 本番導入までの道
shinter61
1
230
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
2.7k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Practical Orchestrator
shlominoach
188
11k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
60k
Making Projects Easy
brettharned
116
6.2k
Speed Design
sergeychernyshev
30
990
We Have a Design System, Now What?
morganepeng
52
7.6k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Producing Creativity
orderedlist
PRO
346
40k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
KATA
mclloyd
29
14k
Transcript
数独ではじめるアルゴリズム 第三章 OCR Ryosuke Uchiyama step63r
グラフ構造と深さ優先探索(DFS) 0 1 2 3 4 11 5 8 6
7 9 10 12 13 14 前 回 の あ ら す じ
入れられる数字の選択肢が少ないマスから埋めていく 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 問題 入れられる数字の残数 ここから処理するよりも… この辺から処理した方が速い! 前 回 の あ ら す じ
一意に決まるマスはあらかじめ埋めておく 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 前処理後の問題 前 回 の あ ら す じ
MVVMパターン View ViewModel Model データ バインディング コマンド メソッド呼出し プロパティ設定 変更通知
変更通知 前 回 の あ ら す じ
Xamarin.Forms Shared C# Backend Shared UI Code iOS Android Windows
前 回 の あ ら す じ
今後やること • UI実装(WPFかXamarinあたり) • モバイル対応(iOSアプリをビルドする環境がない……つらたん……) • OCR(問題をカメラで撮ってAzure Cognitive Servicesとかで盤面認識&自動解答) •
マルチスレッド(たぶんやらないやつ) 前 回 の あ ら す じ
数字の検出
Computer Visionを用いたテキスト抽出 問題発生!
Text = "3", BoundingBox = [ (115, 16), (133, 17),
(132, 39), (114, 38)] どのマスにどの数字が 入るんだ……? 数独のマスも検出する必要があった!
マスの検出
どんなフレームワークが使えるか 案1 Azure Cognitive Servicesの既存モデルを活用 案2 Custom Visionに独自モデルをデプロイ 案3 画像解析ライブラリで交点検出
「数独のマスを検出するAPI」があるわけないので却下。 学習(データ採取)が面倒くさすぎるので却下。 PythonとOpenCVで似たようなことをやったことがあるな? 1)Harrisのコーナー検出 → 精度イマイチ 2)Shi-Tomasiのコーナー検出 → 精度イマイチ 3)Canny → いけそう! 採 用 採 用
XamarinでどうやってOpenCVを使うか Windows ランタイム コンポーネント - UWP applications | Microsoft Docs
Microsoftは神か? OpenCV でのビットマップの処理 - UWP applications | Microsoft Docs 問題発生!
cv::Mat Platform::Collections::Vector マネージ/ネイティブ間のマーシャリング 結局、フレーム検出機能はPythonで実装することに
つくったもの
ソースコード SudokuApp uchi-sudokuapp-functions
全体構成 SudokuApp ローカルストレージ OpenFileAsync RandamAccessStream Function App Cognitive Services DetectSudokuFrame
JSON Response Stream IList<ReadResult>
Demo