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
450
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
330
Bref でサービスを運用している話
sgash708
0
340
tool ディレクティブを導入してみた感想
sgash708
1
300
DeepWiki で Go をもっと好きになろう
sgash708
0
1.1k
環境変数ライブラリ選手権
sgash708
0
320
もう僕は OpenAPI を書きたくない
sgash708
6
2.7k
【懺悔】1年目 EM の失敗から学ぼう
sgash708
0
260
testcontainers のススメ
sgash708
1
550
「僕ら」のテストに対する向き合い方
sgash708
5
550
Other Decks in Programming
See All in Programming
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
130
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
150
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
210
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
930
Agents on Rails - Rails at Scale 2026
irinanazarova
0
250
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
820
Are APIs Still Relevant in the AI Era?
soyuka
0
310
Intent as Code
shoppingjaws
6
1.1k
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
18
15k
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
3
190
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
250
App Intentsのビルドプロセスを支える技術
kntkymt
0
430
Featured
See All Featured
Code Review Best Practice
trishagee
74
20k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Claude Code のすすめ
schroneko
67
230k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
390
Faster Mobile Websites
deanohume
310
32k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
610
WCS-LA-2024
lcolladotor
0
830
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
The World Runs on Bad Software
bkeepers
PRO
72
12k
From π to Pie charts
rasagy
1
380
Amusing Abliteration
ianozsvald
1
310
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
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