Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
はじめての Go * WASM * OCR
Search
Sugar Sato
February 28, 2025
Programming
460
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
はじめての Go * WASM * OCR
Sugar Sato
February 28, 2025
More Decks by Sugar Sato
See All by Sugar Sato
AIと共に生きる技術選定 2026
sgash708
0
360
Bref でサービスを運用している話
sgash708
0
370
tool ディレクティブを導入してみた感想
sgash708
1
320
DeepWiki で Go をもっと好きになろう
sgash708
0
1.1k
環境変数ライブラリ選手権
sgash708
0
340
もう僕は OpenAPI を書きたくない
sgash708
6
2.8k
【懺悔】1年目 EM の失敗から学ぼう
sgash708
0
270
testcontainers のススメ
sgash708
1
580
「僕ら」のテストに対する向き合い方
sgash708
5
570
Other Decks in Programming
See All in Programming
AI駆動開発4年目の現在地(『あなたはFDEになるべきか?』イベント資料)
kumaiu
0
290
はじめてのPLATEAU
nokonoko1203
1
600
まずはコードより業務と向き合う:テーブル解体のためにPdMを呼んだ話
sakawe_ee
0
180
Будущее локальных LLM – Алексей Голобурдин, PythoNN
sobolevn
0
110
社内AIエージェント「Askワンバン」における コストチューニングの取り組み
t0yohei
0
160
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
4
1.8k
Getting Started with Vibe Coding
miccheng
0
190
AI時代のIaC入門 〜なぜインフラをコードで管理したいのか?〜 / Introduction to IaC in the AI Era
akihisaikeda
6
1.4k
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
4
3.4k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
600
Enforcing Your Architecture with Unit Tests in the AI Era (Swift Connection X)
steliosf
PRO
1
150
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
2.2k
Featured
See All Featured
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
280
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
610
Accessibility Awareness
sabderemane
1
290
A Modern Web Designer's Workflow
chriscoyier
699
190k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Become a Pro
speakerdeck
PRO
31
6.4k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
570
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
New Earth Scene 8
popppiees
4
2.8k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
560
Navigating Weather and Climate Data
rabernat
0
590
Making the Leap to Tech Lead
cromwellryan
135
10k
Transcript
はじめての Go * WASM * OCR 新宿御苑.wasm 2025. 02. 28
2 自己紹介 Sugar Sato (@satoIsSugar) • 2023年 BuySell Technologies入社 •
基盤チーム (Portal/Account/Approval) ◦ アソシエイトマネージャー ◦ PjM ◦ プレイングマネージャー • Go / Angular / Serverless • 熱帯植物 ◦ ビカクシダ • 猫 ◦ Lambda (♀ 2才)
3 プロダクト群「バイセルリユースプラットフォーム Cosmos」の開発が進行中 リユースに必要なすべての機能を提供する 「リユースプラットフォーム Cosmos」の開発が進行中です。 Cosmosを活用して、バイセルグループ全体での業務効率改善やデータドリブン経営の深化を目指しています。 リユースプラットフォーム Cosmos 自社開発のリユース特化業務基幹システムでありサービス群の集合体
買取申込 買取・査定 在庫管理 販売 多様なチャネルで収益最大化 CRM -顧客対応- 買取種別に応じた最適なシステム構築 Visit -訪問買取 - Store -店舗買取 - Promas -商材マスタ - Appraisal -専門査定 - Stock -在庫管理 - EXS -販売管理 - Core -会員管理- Portal -データ利用- Pocket -データ基盤- 買取 専門チームによる真贋・査定と連携 査定 申込 効率的な顧客対応 在庫 在庫管理の最適・効率化 販売 データ 各事業プロセスにある データを一元管理 :基幹システム
Go が好きだ〜! でも WASM はよくわからん...
ということで OCR 機能を作りつつ入門するぞ!
01 アーキテクチャ 02 機能・技術ポイント 03 デモ 04 ほんとはやりたかったこと 05 まとめ 目次 Index
アーキテクチャ 01
まず、できたものはこちらです github.com/sgash708/wasm-ocr-example
9 アーキテクチャ
10 アーキテクチャ データフロー 画像入力 → WASM 処理 → Tesseract.js →
結果表示
11 アーキテクチャ 画像処理ロジック Base64でデータ受け渡し
機能・技術ポイント 02
13 機能・技術ポイント • 画像前処理 ◦ グレースケール変換 ◦ 二値化処理(閾値調整機能) • 多言語
OCR ◦ 日本語と英語の同時認識対応 ◦ Tesseract.js による文字認識 機能
14 機能・技術ポイント • Go WebAssembly の仕組み ◦ JavaScript への橋渡し ◦
コンパイルと実行フロー • 画像処理 ◦ グレースケール変換 ◦ 二値化処理(閾値調整機能) • Tesseract.js との連携 技術ポイント
15 • JavaScript への橋渡し ◦ syscall/js パッケージを使用して JavaScript と連携 ◦
Go を JavaScript から呼び出せるようにグローバルに登録 • コンパイルと実行フロー ◦ Go Code → GOOS=js GOARCH=wasm go build → main.wasm → wasm_exec.js → Browser ◦ wasm_exec.js = Go ランタイムの JavaScript ラッパー ◦ ブラウザの WebAssembly API を通じて Go を実行 ◦ JavaScript と Go 間でのデータの受け渡し 機能・技術ポイント Go WebAssemblyの仕組み
16 • グレースケール変換 ◦ Go 標準の image パッケージを活用 ◦ オリジナル画像の各ピクセルをグレースケールに変換
◦ 画素ごとに輝度値に変換する処理 機能・技術ポイント 画像処理
17 機能・技術ポイント 画像処理 • 二値化処理 ◦ 閾値によるシンプルな二値化処理 ◦ 閾値より明るい画素は白(255)に、暗い画素は黒(0)に ◦
UI から閾値を動的に調整可能
18 機能・技術ポイント • WebWorker ベースの非同期処理 • 日本語と英語の言語モデル併用 • 処理の進行状況をリアルタイムで表示 Tesseract.jsとの連携
デモ 03
20 デモ
とりあえず動くものはできた🙌
ほんとはやりたかったこと 04
23 ほんとはやりたかったこと • Go 1.24 の新機能を活用した WASM 連携の改善 ◦ syscall/js
を使わずシンプルな記述へ ◦ よりクリーンなコード構造と型安全性の向上 • otiai10/gosseract の導入 ◦ Tesseract のオプションを Go から直接制御 ◦ より高度な OCR 設定( PSM, OEM 制御)の実装 • 前処理フィルターの追加(ノイズ除去、コントラスト強化) • OCR 精度向上 今後の展望
24 ほんとはやりたかったこと • Go 1.24連載始まります&os.Root、WASMの最新のまとめ Go 1.24 の新機能を活用した WASM 連携の改善
25 ほんとはやりたかったこと • 特徴 ◦ otiai10/gosseract ◦ > Golang OCR
package, by using Tesseract C++ library. • OCR 機能を BE で隠蔽したい ◦ JavaScript はシンプルに Go のコード呼ぶだけになる otiai10/gosseract の導入
26 ほんとはやりたかったこと OCR 精度向上 • 文字以外も認識されている • 単語が切れている
まとめ 05
28 まとめ Go * WebAssembly の可能性を感じられた • 初めてまともにハンズオン ◦ Pros
▪ 画面で動く Go のコードに感動 • TinyGo やフレームワークなどを用いて物作りしてみたい ◦ Cons ▪ デバッグしにくさを若干感じた • js で完結しておけばもっと開発しやすかったのでは?(トホホ ▪ デッドロックになやむこともあった
wasm なんもわからん...
Thank You
31 引用 • https://github.com/sgash708/wasm-ocr-example • https://go.dev/blog/wasmexport • https://zenn.dev/monicle/articles/b43dae1a9fb847 • https://github.com/otiai10/gosseract
• https://github.com/schwarzkopfb/tesseract-ocr/blob/master/docs.md#tesseractrecognize source-options-callback--promise • https://future-architect.github.io/articles/20250127a/#WASM%E3%83%AA%E3%82%A2 %E3%82%AF%E3%82%BF%E3%83%BC%E3%83%A2%E3%82%B8%E3%83%A5%E3%83% BC%E3%83%AB%E3%82%92JS%E3%81%8B%E3%82%89%E5%91%BC%E3%81%B3%E5% 87%BA%E3%81%99