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
91
数独ではじめるアルゴリズム 第三章 OCR
Ryosuke Uchiyama
December 09, 2020
Tweet
Share
More Decks by Ryosuke Uchiyama
See All by Ryosuke Uchiyama
AWSでサーバレスな書籍管理アプリを作る
step63r
0
19
PythonでSlack通知botを作る
step63r
0
6
ChatGPT実践
step63r
1
300
IoT実践! 行先予定表を電子ペーパーで作る
step63r
0
9
React x Socket.ioで人狼サーバを作る 第一章 フロントエンド実装
step63r
0
8
深層強化学習で東方AI 第一章 DQNの基本
step63r
0
180
Build 2021 プレイバック
step63r
0
29
WPFで実践アプリ開発! 第四章 機能の実装 Part 2
step63r
0
42
WPFで実践アプリ開発! 第三章 機能の実装 Part 1
step63r
0
110
Other Decks in Programming
See All in Programming
オンコール⼊⾨〜ページャーが鳴る前に、あなたが備えられること〜 / Before The Pager Rings
yktakaha4
2
1.2k
知って得する@cloudflare_vite-pluginのあれこれ
chimame
1
130
プロダクトという一杯を作る - プロダクトチームが味の責任を持つまでの煮込み奮闘記
hiliteeternal
0
300
TypeScriptでDXを上げろ! Hono編
yusukebe
4
890
バイブコーディング超えてバイブデプロイ〜CloudflareMCPで実現する、未来のアプリケーションデリバリー〜
azukiazusa1
2
740
Claude Code で Astro blog を Pages から Workers へ移行してみた
codehex
0
170
#QiitaBash TDDで(自分の)開発がどう変わったか
ryosukedtomita
1
240
[DevinMeetupTokyo2025] コード書かせないDevinの使い方
takumiyoshikawa
2
230
Go製CLIツールをnpmで配布するには
syumai
1
930
[SRE NEXT] 複雑なシステムにおけるUser Journey SLOの導入
yakenji
1
860
ご注文の差分はこちらですか? 〜 AWS CDK のいろいろな差分検出と安全なデプロイ
konokenj
4
720
QA x AIエコシステム段階構築作戦
osu
0
220
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Designing for Performance
lara
610
69k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
860
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
The Cult of Friendly URLs
andyhume
79
6.5k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Making Projects Easy
brettharned
117
6.3k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Building Adaptive Systems
keathley
43
2.7k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Balancing Empowerment & Direction
lara
1
510
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