概要
画像アップロードからOCR・内容確認・Googleスプレッドシート登録までをワンストップで実行できるWebアプリ。Streamlitで構築し、研修後のアンケート集計・顧客情報管理の転記作業を自動化する。
対象ユーザー
- 紙帳票の転記作業を効率化したい企業担当者
- 研修・セミナー後のアンケート集計を自動化したい管理部門
- OCR×スプレッドシート連携の技術実装を確認したい開発者
GitHub
🔗 GitHub
デモ動画
スクリーンショット
印刷アンケート — 全項目を高精度に自動読み取り・フィールド分割
手書きアンケート — 手書き文字も読み取り、確認・修正画面で補正可能
Googleスプレッドシート — 印刷・手書き両方のデータが自動登録
開発背景
顧客管理DX案件への提案用デモとして開発した。「紙アンケートの手入力をなくしたい」という課題に対し、研修後に毎回発生する紙アンケートの転記作業を自動化し、業務効率を改善するソリューションとして設計した。
解決した課題
- 紙アンケートの手入力による転記作業(1枚あたり数分)を、画像アップロード+ワンクリックで数秒に短縮
- OCR読み取り結果を画面上で即座に確認・修正できるため、誤認識による入力ミスを防止
- Googleスプレッドシートへ直接登録することで、二重入力や転記漏れを防止
主な機能
- 画像アップロード(PNG/JPG対応、スマホ撮影・スキャン画像に対応)
- Google Cloud Vision APIによるOCR文字認識(印刷文字を高精度に認識し、手書き文字にも対応)
- 読み取り結果の自動フィールド分割(氏名・会社名・部署・電話番号・メール・研修名・満足度・ご意見)
- 読み取り結果の画面上での確認・修正機能
- Googleスプレッドシートへのワンクリック自動登録
- 登録日時の自動付与
使用技術
- バックエンド/UI: Python、Streamlit
- OCR: Google Cloud Vision API(document_text_detection)
- データ登録先: Google Spreadsheet(gspread経由)
- 認証: Google Service Account
- 画像処理: Pillow
設計上の工夫
- 業務フローを意識した設計: OCRだけで完結させるのではなく、「OCR → パース → 確認 → 登録」の4段階に分離し、それぞれを独立した処理とすることで保守性・拡張性を高めた
- Human-in-the-Loop(確認・修正フロー): OCR結果をそのまま登録せず、確認・修正画面を挟むことで実務で利用できる精度を確保した。読み取れなかったフィールドには⚠マークで手入力を促す
- フィールド自動分割: OCRの出力は生テキストのため、正規表現によるラベル:値の同一行マッチと、ラベル行と値行が分離しているケースの2段階パースで、フォーマットの揺れに対応
- ファジーマッチング: OCRの誤認識(「意先」→「ご意見」、「满足度」→「満足度」)に対応するため、ラベルの正規化マッピングを実装
- サンプル画像生成スクリプト: Pillowで印刷体・手書き風のアンケート画像を自動生成し、実際の帳票がなくてもデモ・テストが可能
アーキテクチャ
Image Upload
│
▼
Streamlit(UI + サーバー)
│
▼
Google Cloud Vision API(OCR文字認識)
│
▼
Text Parser(正規表現 + ファジーマッチング)
│
▼
Human Review(確認・修正画面)
│
▼
Google Spreadsheet(データ登録)
開発周期
3日
担当範囲
企画 / 設計 / バックエンド / OCR連携 / テスト
成果・実現したこと
- 紙アンケートの転記作業を画像アップロード+ワンクリックに簡素化
- 印刷体・手書きの両方に対応したOCR読み取りを実現
- 確認・修正ステップにより、OCR誤認識の影響を最小限に抑制
- OCRで取得した自由形式テキストを構造化データへ変換するパーサーを実装し、そのまま業務データとして利用できる形式へ変換した
- PythonとGoogle Cloudサービスのみで構成し、シンプルで保守しやすいシステムを実現した
想定導入効果
- 手入力中心の転記作業を、OCR+確認ベースの運用へ移行
- 転記ミス・二重入力の排除によるデータ品質向上
- 既存のGoogleスプレッドシート運用を変更せずに導入可能
開発で直面した課題と解決方法
- OCR出力のフォーマット揺れ: 同一行に「ラベル: 値」が来るケースと、ラベルと値が別行になるケースが混在した。2段階パース(同一行マッチ → 分離行マッチ)で両方に対応
- 手書き文字の誤認識: 手書きの「ご意見」が「意先」と認識されるなど、ラベル自体の誤認識が発生した。ラベル正規化とファジーマッチングで吸収
- デモ用帳票の準備: 実際のアンケート用紙がない状態でデモを作る必要があった。Pillowで印刷体・手書き風のサンプル画像を自動生成するスクリプトを作成し、リアルなデモ環境を構築
このプロジェクトで学んだこと
- OCRシステムでは認識精度だけでなく、後段のパース処理や補正ロジックを組み合わせることで、実務で利用できる品質を実現できることを学んだ
- Human in the Loopを取り入れることで、OCRの精度に依存しない実運用向けのシステム設計が重要であることを実感した
- Streamlitの2カラムレイアウトとsession_stateを活用することで、短期間でも直感的なUIを構築できることを確認した