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
56
数独ではじめるアルゴリズム 第三章 OCR
Ryosuke Uchiyama
December 09, 2020
Tweet
Share
More Decks by Ryosuke Uchiyama
See All by Ryosuke Uchiyama
ChatGPT実践
step63r
1
170
深層強化学習で東方AI 第一章 DQNの基本
step63r
0
16
Build 2021 プレイバック
step63r
0
20
WPFで実践アプリ開発! 第四章 機能の実装 Part 2
step63r
0
23
WPFで実践アプリ開発! 第三章 機能の実装 Part 1
step63r
0
76
WPFで実践アプリ開発! 第二章 UI
step63r
0
83
WPFで実践アプリ開発! 第一章 Windowsアプリの歴史
step63r
0
180
数独ではじめるアルゴリズム 第二章 UI
step63r
0
26
数独ではじめるアルゴリズム 第一章 実装と高速化
step63r
0
91
Other Decks in Programming
See All in Programming
SIMD Parallel Programming with the Vector API
josepaumard
0
210
初心者のためのRubyKaigi入門/RubyKaigi Introduction
a_matsuda
7
1.1k
大規模UIKitベースアプリへのTCAの段階的導入/gradual-adoption-of-tca-in-a-large-scale-uikit-based-app
takehilo
2
190
スクラムガイドのスプリントレトロスペクティブを改めて読みかえしてみた / Re-reading the Sprint Retrospective Section in the Scrum Guide
mackey0225
3
470
"config" ってなんだ? / What is "config"?
okashoi
0
240
Netty Chicago Java User Group 2024-04-17
sullis
0
190
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.4k
サイコロで理解する統計的仮説検定の考え方
tatamiya
4
1k
Elm Form Validation
bkuhlmann
0
510
2 週間で Twitter Bot を作ってみた
contour_gara
0
700
SwiftUIで使いやすいToastの作り方 / How to build a Toast system which is easy to use in SwiftUI
lovee
3
150
Elm 0.19.0 Changes
bkuhlmann
0
490
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
63
14k
Art, The Web, and Tiny UX
lynnandtonic
290
19k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
22
1.6k
Navigating Team Friction
lara
179
13k
Become a Pro
speakerdeck
PRO
12
4.6k
Designing with Data
zakiwarfel
96
4.8k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.1k
Bash Introduction
62gerente
605
210k
StorybookのUI Testing Handbookを読んだ
zakiyama
13
4.6k
Side Projects
sachag
451
41k
The Invisible Customer
myddelton
114
12k
For a Future-Friendly Web
brad_frost
172
9k
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