惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
阮一峰的网络日志
阮一峰的网络日志
S
Secure Thoughts
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Threat Research - Cisco Blogs
P
Privacy & Cybersecurity Law Blog
The Hacker News
The Hacker News
H
Heimdal Security Blog
W
WeLiveSecurity
L
LINUX DO - 热门话题
Hacker News: Ask HN
Hacker News: Ask HN
WordPress大学
WordPress大学
The Last Watchdog
The Last Watchdog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
D
DataBreaches.Net
I
Intezer
Webroot Blog
Webroot Blog
C
Cisco Blogs
AWS News Blog
AWS News Blog
博客园 - 聂微东
T
The Blog of Author Tim Ferriss
V
Vulnerabilities – Threatpost
罗磊的独立博客
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
Schneier on Security
Schneier on Security
宝玉的分享
宝玉的分享
博客园 - 叶小钗
PCI Perspectives
PCI Perspectives
D
Docker
Scott Helme
Scott Helme
NISL@THU
NISL@THU
J
Java Code Geeks
B
Blog RSS Feed
Google Online Security Blog
Google Online Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Exploit Database - CXSecurity.com
AI
AI
美团技术团队
Cloudbric
Cloudbric
月光博客
月光博客
P
Proofpoint News Feed
T
Tailwind CSS Blog
Google DeepMind News
Google DeepMind News
小众软件
小众软件
www.infosecurity-magazine.com
www.infosecurity-magazine.com
The Cloudflare Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
Lịch Sử OCR và Sự Ra Đời Khái Niệm Vision-First OCR
Danh Hong · 2026-06-25 · via DEV Community

Bài viết dựa trên tham luận "Mô hình OCR chuyên biệt cho văn bản Khmer hậu Angkor và chữ viết trên lá Buông" — trình bày tại Tọa đàm Đại học Trà Vinh, 28/1/2026.


Phần 1: 110 năm lịch sử OCR

Optical Character Recognition (OCR) là một trong những bài toán lâu đời nhất trong lịch sử điện toán. Nhưng ít người biết rằng hành trình của nó khởi đầu không phải từ máy tính, mà từ một nhu cầu nhân văn: giúp người mù đọc sách.

Giai đoạn 1: Cơ học và điện (1914–1960)

Năm 1914, Emanuel Goldberg — nhà khoa học người Đức gốc Nga — phát triển máy đọc ký tự quang học đầu tiên sử dụng tế bào quang điện. Năm 1931, ông được cấp bằng sáng chế cho "Statistical Machine" — thiết bị có thể nhận dạng văn bản và phân loại tài liệu bằng ánh sáng.

Năm 1951, David Shepard tại Hoa Kỳ xây dựng "Gismo" — máy OCR thương mại đầu tiên, ứng dụng để đọc mã điện báo Morse và văn bản in. Đến cuối thập niên 1950s, ngành bưu điện và ngân hàng bắt đầu thử nghiệm OCR để tự động hóa phân loại thư và đọc séc.

Năm Cột mốc
1914 Emanuel Goldberg — máy đọc ký tự quang học đầu tiên
1931 Statistical Machine — phân loại tài liệu bằng ánh sáng
1951 Gismo (Shepard) — OCR thương mại đầu tiên
1965 IBM 1287/1288 — ngành bưu chính Mỹ triển khai quy mô lớn

Giai đoạn 2: Pattern Matching (1960–1990)

Thập niên 1960–1980, OCR chuyển từ phần cứng chuyên dụng sang phần mềm. Kỹ thuật chủ đạo là template matching: lưu trữ hình dạng "lý tưởng" của mỗi ký tự, rồi so sánh ký tự trong ảnh với kho mẫu.

Phương pháp này hoạt động tốt với font chữ chuẩn, in rõ — nhưng sụp đổ hoàn toàn khi gặp phông chữ lạ, văn bản bị hỏng, hoặc bất kỳ ngôn ngữ nào không có cấu trúc Latin tuyến tính. Với chữ Khmer — vốn có hệ thống dấu phụ chồng nhiều tầng — template matching thực tế là vô dụng.

Giai đoạn 3: Thống kê và Neural Network thế hệ đầu (1990–2010)

Bước ngoặt lớn đến khi Tesseract — phát triển bởi Hewlett-Packard từ 1985, Google tiếp nhận năm 2006 — trở thành engine OCR mã nguồn mở phổ biến nhất thế giới. Tesseract dùng kết hợp phân tích đặc trưng hình học và mô hình ngôn ngữ N-gram.

Đây là lúc một xu hướng quan trọng được thiết lập: các hệ thống OCR bắt đầu tích hợp mô hình ngôn ngữ để "sửa" kết quả nhận dạng. Với tiếng Anh và các ngôn ngữ châu Âu có corpus lớn, cách này cải thiện đáng kể độ chính xác.

Tesseract — từ HP Labs đến Google (1985–2006)
Ban đầu nghiên cứu tại HP Labs Bristol từ 1985–1994. Google mã nguồn mở hóa năm 2006. Phiên bản 4.0 (2018) tích hợp LSTM và hỗ trợ hơn 100 ngôn ngữ. Dù vậy, khả năng xử lý chữ Khmer cổ vẫn rất hạn chế vì phụ thuộc nặng vào corpus hiện đại.

Giai đoạn 4: Deep Learning (2012–nay)

Năm 2012, AlexNet thắng ImageNet — khoảnh khắc đánh dấu kỷ nguyên deep learning. Từ 2015 trở đi, CNN, RNN/LSTM, và Transformer bắt đầu thay thế hoàn toàn các phương pháp cũ.

Google Vision API, Microsoft Azure OCR, Amazon Textract — tất cả đều đạt độ chính xác rất cao trên văn bản tiếng Anh, tiếng Trung, tiếng Ả Rập. Nhưng với chữ Khmer lịch sử, chúng đều thất bại vì cùng một lý do cốt lõi — điều sẽ được phân tích trong phần tiếp theo.


Phần 2: Vấn đề cốt lõi — Khi OCR "quá thông minh"

Language-First OCR là gì?

Phần lớn hệ thống OCR hiện đại hoạt động theo mô hình hai lớp:

  1. Lớp thị giác — nhận dạng hình dạng ký tự
  2. Lớp ngôn ngữ — hiệu chỉnh kết quả dựa vào từ điển và mô hình xác suất

Lớp thứ hai nghe có vẻ hữu ích. Nhưng đối với văn bản lịch sử, nó là nguồn gốc của một vấn đề nghiêm trọng.

"OCR hiện đại (Google Lens, Cloud OCR) phụ thuộc nặng vào corpus hiện đại. Chúng tự động 'sửa' văn bản cổ về dạng hiện đại, làm mất thông tin gốc — và đây là hành vi không thể chấp nhận trong nghiên cứu lịch sử và bảo tồn di sản."

— Danh Hồng, Tham luận tại Đại học Trà Vinh, 28/1/2026

Tại sao chữ Khmer hậu Angkor là phép thử khắc nghiệt nhất?

Chữ Khmer trải qua ba giai đoạn phát triển chính:

  • Pre-Angkor: Ảnh hưởng Brahmi-Pallava, chủ yếu ghi Sanskrit trên bia ký, chính tả ổn định và mang tính học thuật cao
  • Angkor: Song ngữ Khmer-Sanskrit, ít ligature hơn Pallava, spelling vẫn tương đối ổn định. Đáng lưu ý: chỉ duy nhất vua Yasovarman I (889–910) dùng chữ Devanagari — sau đó lại quay về dùng chữ Khmer
  • Post-Angkor: Chữ viết trở thành phương tiện phổ biến trong Phật giáo Theravada và văn học dân gian. Xảy ra hiện tượng "Khmer hóa spelling" — điều chỉnh cách viết từ vay mượn Sanskrit/Pali theo âm đọc thực tế

Giai đoạn hậu Angkor tạo ra thách thức cực kỳ lớn: một từ có thể có nhiều cách viết tùy vùng miền và thời kỳ. Đây không phải lỗi — đây là đặc điểm lịch sử. Nhưng hệ thống language-first sẽ "sửa" tất cả về một dạng chuẩn duy nhất.

Bằng chứng thực nghiệm — thử nghiệm trên bài hát ái quốc «ចំរៀងយោធាយាត្រា» từ thập niên 1950:

Chính tả gốc (1950s) Language-First đọc NextOCR đọc
រមណិយស្ឋាន រមណីយ ស្ពាន ❌ រមណិយស្ឋាន ✅
ប្រទុសរ៉ាយ ជ្រុះខុសអើយ ❌ ប្រទុសរ៉ាយ ✅
ស្មគ្រ ស្មគូ ❌ ស្មគ្រ ✅
ភូមីរណ ផ្សភូមិវណ ❌ ភូមីរណ ✅

Kết quả: 1 lỗi (NextOCR) vs 20 lỗi (language-first) trên cùng 8 dòng văn bản.

Quan trọng hơn: 20 lỗi đó không phải do nhận dạng thị giác kém — mà do lớp hiệu chỉnh ngôn ngữ áp chính tả hiện đại lên văn bản cổ, hủy hoại giá trị lịch sử.

Thách thức riêng của văn bản lá buông

Ngoài vấn đề spelling, lá buông đặt ra thách thức vật lý:

  • Ký tự khắc tay không đều về kích thước và khoảng cách
  • Nền lá có vân, nứt, phai màu qua nhiều thế kỷ
  • Ảnh chụp thường cong méo
  • Nội dung chủ yếu là Khmer hậu Angkor, Pali/Sanskrit đã Khmer hóa

Kết luận từ tham luận: "Các hệ thống OCR phổ thông gần như không thể áp dụng."


Phần 3: Sự Ra Đời Khái Niệm Vision-First OCR tại Đại học Trà Vinh

Bối cảnh

Tháng 1 năm 2026, Đại học Trà Vinh tổ chức tọa đàm "Sách lá Buông: Bảo tồn và gìn giữ di sản văn hóa Khmer qua công nghệ số" — sự kiện quy tụ:

  • GS.TS Phạm Tiết Khánh — Chủ tịch Hội đồng chiến lược ĐH Trà Vinh (đồng chủ tọa)
  • Ông Thạch Mu Ni — Phó Giám đốc Sở Dân tộc và Tôn giáo tỉnh Vĩnh Long
  • Thượng tọa Sơn Kene — Chánh VP Hội Đoàn kết sư sãi yêu nước tỉnh Vĩnh Long
  • TS Ngô Sô Phe — Hiệu trưởng Trường Ngôn ngữ-Văn hóa-Nghệ thuật Khmer Nam bộ (ĐH Trà Vinh)
  • Đại diện Đại sứ quán Canada tại Việt Nam (đơn vị tài trợ dự án số hóa lá buông)

Tại đây, lần đầu tiên trong một diễn đàn học thuật chính thức, khái niệm Vision-First OCR được đề xuất và trình bày hệ thống — không chỉ là một giải pháp kỹ thuật đơn thuần, mà là một triết học thiết kế riêng biệt.

Định nghĩa Vision-First OCR

Vision-First OCR không phải chỉ là một kiến trúc model cụ thể. Đây là một nguyên tắc thiết kế:

Coi biến thể spelling là dữ liệu lịch sử cần bảo tồn, không phải lỗi cần sửa.

Điều này đòi hỏi:

  1. Huấn luyện trực tiếp trên ảnh thực của lá buông và tài liệu lịch sử — không dùng font chữ tổng hợp
  2. Không áp đặt chuẩn viết hiện đại — output phản ánh trực tiếp những gì có trên trang
  3. Không dùng từ điển hiệu chỉnh — CER được đo trước post-processing, không sau
  4. Tối ưu cho CPU — phù hợp với chùa chiền và viện nghiên cứu có hạ tầng hạn chế

So sánh triết học thiết kế

Tiêu chí Language-First Vision-First (NextOCR)
Chính tả cổ "Sửa" về chuẩn hiện đại ❌ Giữ nguyên gốc ✅
Từ Pali/Sanskrit đã Khmer hóa Thay bằng từ có trong từ điển ❌ Nhận dạng từ hình ảnh ✅
Văn bản lá buông Thất bại hoàn toàn ❌ Huấn luyện trên dữ liệu thật ✅
Đo CER Sau post-processing Trước post-processing
Triển khai Cần cloud CPU-only, on-premise ✅

Phần 4: Kết Quả và Phương Pháp Luận

Chỉ số hiệu năng

  • CER: 0.07% trong điều kiện tối ưu (đo trực tiếp, không qua hiệu chỉnh từ điển)
  • 1 lỗi vs 20 lỗi trên văn bản Khmer 1950s (8 dòng thơ)
  • 20× ít lỗi hơn so với hệ thống language-first truyền thống

Điểm phương pháp luận quan trọng

Trong cộng đồng OCR, có một thực hành phổ biến nhưng gây hiểu nhầm: công bố CER sau khi đã chạy qua language correction post-processing.

Cách đo này không phản ánh năng lực thực sự của mô hình thị giác — nó phản ánh năng lực của từ điển và mô hình ngôn ngữ. Với văn bản hiện đại, hai thứ này giúp ích. Với văn bản lịch sử, chúng chính là nguồn gốc của lỗi.

NextOCR công bố CER trước post-processing — số liệu phản ánh trực tiếp năng lực nhận dạng thị giác thuần túy.


Phần 5: Ý Nghĩa và Hướng Tương Lai

Tại sao khái niệm này ra đời ở Đồng bằng sông Cửu Long?

Câu hỏi không chỉ là kỹ thuật: tại sao một khái niệm OCR mới lại ra đời không phải tại một hội nghị AI quốc tế, mà tại một tọa đàm bảo tồn di sản ở miền Nam Việt Nam?

Vì chính áp lực thực tế tạo ra câu hỏi đúng.

Tỉnh Trà Vinh có hơn 300.000 người Khmer (chiếm ~32% dân số), 143 chùa Phật giáo Nam tông Khmer, và một kho tàng lá buông với hàng thế kỷ kiến thức y học, luật pháp, văn học, triết học Phật giáo — chưa được số hóa. Các hệ thống OCR lớn của thế giới không thể giải quyết vấn đề này, vì chúng được xây dựng cho corpus hiện đại và ngôn ngữ có tài nguyên lớn.

Khi mục tiêu là bảo tồn trung thực — không phải nhận dạng "đủ dùng" — thì câu hỏi triết học trở nên không thể tránh: OCR nên đọc những gì thực sự có trên trang, hay những gì chúng ta nghĩ nên có?

Vision-First OCR là câu trả lời cho câu hỏi đó.

Từ OCR đến Vision-Language Model lịch sử Khmer

Như được đề xuất trong tham luận, Vision-First OCR là bước nền tảng cho mục tiêu lớn hơn: VLM chuyên biệt cho di sản văn bản Khmer.

Cấu trúc dữ liệu huấn luyện VLM gồm 4 lớp:

  1. Ảnh gốc — scan lá buông, bia ký, tài liệu
  2. Ngữ cảnh lịch sử — thời kỳ, vùng địa lý, thể loại
  3. Văn bản OCR thô (vision-first) — trung thực với spelling gốc
  4. Cách viết hiện đại tương ứng — khi có thể xác định

Chỉ Vision-First OCR mới có thể tạo ra lớp thứ 3 đúng cách. Đây là điểm khởi đầu không thể thay thế.


Kết luận

Trong 110 năm, OCR đi từ máy quang điện cơ học đến deep learning transformer. Nhưng suốt hành trình đó, một giả định ngầm luôn tồn tại: mô hình ngôn ngữ giúp OCR tốt hơn.

Giả định đó đúng với văn bản hiện đại và ngôn ngữ có từ điển lớn. Nó sai với văn bản lịch sử, chữ viết thiểu số, và bất kỳ trường hợp nào mà "đúng" nghĩa là trung thực với gốc — không phải "chuẩn theo từ điển hiện đại".

Vision-First OCR ra đời từ nhận thức đó. Và nó được đặt tên lần đầu tiên không phải tại Silicon Valley hay một hội nghị AI ở Geneva, mà tại một tọa đàm về những trang lá cọ mỏng manh đang dần phai màu trong các chùa Khmer ở Đồng bằng sông Cửu Long.


Thử NextOCR trên tài liệu Khmer của bạn: nextocr.org

Developer API: developer.nextocr.org

Liên hệ: danhhong@gmail.com | Telegram: t.me/hout18