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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Ryosuke Uchiyama
December 09, 2020
Programming
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
数独ではじめるアルゴリズム 第三章 OCR
Ryosuke Uchiyama
December 09, 2020
More Decks by Ryosuke Uchiyama
See All by Ryosuke Uchiyama
AWSでサーバレスな書籍管理アプリを作る
step63r
0
52
PythonでSlack通知botを作る
step63r
0
21
ChatGPT実践
step63r
1
370
IoT実践! 行先予定表を電子ペーパーで作る
step63r
0
26
React x Socket.ioで人狼サーバを作る 第一章 フロントエンド実装
step63r
0
20
深層強化学習で東方AI 第一章 DQNの基本
step63r
0
290
Build 2021 プレイバック
step63r
0
38
WPFで実践アプリ開発! 第四章 機能の実装 Part 2
step63r
0
52
WPFで実践アプリ開発! 第三章 機能の実装 Part 1
step63r
0
130
Other Decks in Programming
See All in Programming
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.6k
技術記事、 専門家としてのプログラマ、 言語化
mizchi
4
2.9k
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
5.3k
These Five Tricks Can Make Your Apps Greener, Cheaper, & Nicer
hollycummins
0
280
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.6k
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
20
6.5k
さぁV100、メモリをお食べ・・・
nilpe
0
140
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
160
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
320
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
250
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
2
1.4k
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
490
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Building Adaptive Systems
keathley
44
3k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
310
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
55k
The Spectacular Lies of Maps
axbom
PRO
1
800
Typedesign – Prime Four
hannesfritz
42
3.1k
Crafting Experiences
bethany
1
180
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
190
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Site-Speed That Sticks
csswizardry
13
1.2k
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