Thứ Năm, 15 tháng 10, 2026

OCR là gì? Khi muốn máy tính đọc chữ trong ảnh và PDF

Khả năng rất cao bạn đã từng "hì hục" nhấn chuột và quét qua một dòng chữ trong một tấm ảnh nào đó với "ước nguyện" có thể copy-paste, nhưng rồi đành "trân trối" nhìn và bất lực...Một ví dụ khác nghe còn...kinh hoàng hơn: bạn có ảnh scan của 1.000 tờ hóa đơn cần nhập dữ liệu. Ngồi gõ từng tờ thì đến mùa quýt năm sau chưa chắc xong. Có cách nào để máy đọc giúp không?


Hãy tưởng tượng bạn nhận được một file ảnh như thế này:


HOA DON BAN HANG


Ma hoa don: HD00125

Khach hang: Nguyen Van A

Tong tien: 1,500,000 VND

Ngay mua: 15/10/2026


Bạn muốn lấy thông tin trong ảnh để đưa vào Excel hoặc Database.

Nếu nội dung nằm trong một file văn bản thông thường, bạn có thể mở file, copy rồi dán.


Nhưng đây lại là một tấm ảnh.


Bạn không thể đơn giản bôi đen dòng "Tong tien" (chữ hơi nhạy cảm một chút, nhưng là Tổng tiền chứ tuyệt đối không...bạo lực) rồi nhấn Ctrl + C như khi đọc một file Word.


Nếu chỉ có một ảnh, bạn có thể gõ lại bằng tay.

Nếu có 10 ảnh, vẫn chịu được.


Nhưng nếu có 10.000 ảnh?

Lúc này, việc ngồi gõ từng dòng bắt đầu trở thành một công việc không mấy vui vẻ.

Và đây là lúc OCR xuất hiện.



OCR là gì? 


OCR là viết tắt của Optical Character Recognition, có nghĩa là công nghệ nhận dạng ký tự quang học.


Nói đơn giản:

OCR giúp máy tính nhận diện chữ trong hình ảnh hoặc tài liệu được quét, sau đó chuyển những chữ đó thành dữ liệu văn bản mà máy có thể xử lý.


Ví dụ, bạn đưa cho hệ thống một tấm ảnh hóa đơn.

OCR có thể nhận diện những dòng chữ như:


Invoice: INV001

Customer: Nguyen Van A

Total: 1500000 VND


Thay vì chỉ nhìn thấy các điểm ảnh, hệ thống có thể trả về nội dung dạng văn bản.

Sau đó, bạn có thể tiếp tục:

  • Tìm kiếm nội dung.
  • Copy văn bản.
  • Đưa dữ liệu vào Excel.
  • Lưu vào Database.
  • Tạo báo cáo.
  • Kết hợp với Python để tự động xử lý hàng loạt tài liệu.


Đây là lý do OCR được sử dụng trong xử lý hóa đơn, chứng từ, biểu mẫu, tài liệu giấy và nhiều quy trình Automation.


Tuy nhiên, cần nhớ một điều:

OCR nhận dạng chữ không có nghĩa là hệ thống luôn hiểu đúng ý nghĩa của tài liệu.


Đó là hai việc khác nhau.



OCR hoạt động như thế nào?


Hãy tưởng tượng bạn chụp một tờ hóa đơn bằng điện thoại.

Bên trong tấm ảnh có rất nhiều điểm ảnh. Máy tính ban đầu không tự nhiên biết đâu là chữ, đâu là con số, đâu là đường viền của bảng.


Một hệ thống OCR thường thực hiện các bước như sau:


Bước 1: Nhận hình ảnh

Bạn đưa ảnh hóa đơn, ảnh chụp tài liệu hoặc ảnh quét vào hệ thống.


Bước 2: Chuẩn bị hình ảnh

Hệ thống có thể làm sạch ảnh, điều chỉnh độ nghiêng, tăng độ tương phản hoặc giảm nhiễu để chữ dễ nhận diện hơn.


Bước 3: Nhận dạng ký tự

OCR phân tích hình ảnh và nhận diện những ký tự có khả năng xuất hiện.


Bước 4: Trả về văn bản

Ví dụ:

Ảnh đầu vào

    ↓

Xử lý hình ảnh

    ↓

Nhận dạng chữ

    ↓

Văn bản đầu ra


Bước 5: Kiểm tra và xử lý tiếp


Nếu cần lấy tổng tiền, mã hóa đơn hoặc ngày mua, chương trình sẽ phải tìm và trích xuất những thông tin đó từ văn bản vừa nhận được.

Đến đây, bạn có thể thấy OCR rất phù hợp để kết hợp với Python và Automation.



OCR khác gì với copy chữ thông thường?


Đây là điểm quan trọng.

Giả sử bạn có hai file.


File thứ nhất: Một tài liệu Word chứa văn bản thật.

Bạn có thể chọn một đoạn chữ rồi copy.


File thứ hai: Một tấm ảnh chụp tài liệu.

Dù nhìn thấy chữ rất rõ trên màn hình, máy tính có thể chỉ nhận được một hình ảnh chứ không có lớp văn bản để copy.


OCR giúp biến những chữ nhìn thấy trong ảnh thành văn bản có thể xử lý.

Tuy nhiên, không phải PDF nào cũng cần OCR.

Có những file PDF vốn đã chứa lớp văn bản. Bạn có thể chọn và copy chữ trực tiếp.

Ngược lại, PDF được tạo từ ảnh quét thường cần OCR nếu bạn muốn trích xuất nội dung chữ.

Vì vậy, trước khi chạy OCR, hãy kiểm tra xem tài liệu đã có văn bản có thể chọn được hay chưa.


Đừng bắt máy làm lại một việc mà file đã làm sẵn.



OCR có thể dùng vào việc gì?


Đọc hóa đơn

Một doanh nghiệp nhận hàng nghìn hóa đơn mỗi tháng.

Nếu nhân viên phải mở từng hóa đơn rồi gõ mã hóa đơn, ngày mua và tổng tiền vào phần mềm kế toán, công việc sẽ rất tốn thời gian.

OCR có thể nhận dạng nội dung để chương trình tiếp tục trích xuất dữ liệu.


Đọc giấy tờ và biểu mẫu

Ví dụ:

  • Phiếu đăng ký.
  • Đơn đặt hàng.
  • Phiếu thu.
  • Biểu mẫu khảo sát.
  • Hồ sơ được quét từ giấy sang PDF.

OCR có thể giúp chuyển phần chữ trong các tài liệu này thành văn bản.


Đọc ảnh chụp màn hình

Bạn chụp màn hình một thông báo lỗi.

Bạn muốn lấy nội dung lỗi để tìm cách sửa hoặc lưu vào hệ thống theo dõi.

OCR có thể giúp trích xuất chữ từ ảnh chụp màn hình.


Số hóa tài liệu cũ

Một thư viện có hàng nghìn trang tài liệu được quét thành ảnh.

OCR có thể giúp tạo ra lớp văn bản để hỗ trợ tìm kiếm và xử lý nội dung.

Tuy nhiên, tài liệu cũ bị mờ, chữ viết tay hoặc ảnh bị hỏng có thể khiến kết quả nhận dạng không chính xác.



Thử OCR bằng Python


Đây là phần dành cho những bạn đang "ngâm cứu" Python và muốn "táy máy" một chút

Chúng ta sẽ dùng một công cụ có tên là Tesseract OCR và thư viện pytesseract.

Bạn cần phân biệt hai thứ:

  • Tesseract OCR: Bộ máy thực hiện việc nhận dạng chữ.
  • pytesseract: Thư viện Python giúp chương trình giao tiếp với Tesseract.


Cài mỗi thư viện Python chưa chắc đã đủ. Bạn còn cần cài bộ máy Tesseract OCR trên máy tính.


Chuẩn bị môi trường


Bạn hoàn toàn có thể quay lại coi qua phần đầu tiên của Python để hình dung rõ hơn mọi thứ.

Cài thư viện Python:

pip install pytesseract pillow


Trong đó:

  • pytesseract giúp Python gọi Tesseract.
  • pillow giúp Python mở và xử lý hình ảnh.


Tiếp theo, bạn cần cài Tesseract OCR phù hợp với hệ điều hành đang dùng.

Nếu muốn nhận dạng tiếng Việt, hãy bảo đảm bộ dữ liệu ngôn ngữ tiếng Việt đã được cài đặt.

Nếu máy chưa cài Tesseract hoặc chương trình không tìm thấy bộ máy này, code Python có thể báo lỗi dù bạn đã chạy lệnh pip install thành công.

Đây là một trong những lỗi lính mới rất dễ gặp.


Viết chương trình OCR đầu tiên


Giả sử bạn có ảnh tên là invoice.png.

Hãy thử đoạn code sau:


from PIL import Image

import pytesseract

image = Image.open("invoice.png")



text = pytesseract.image_to_string(

    image,

    lang="vie+eng"

)



print(text)



Trong đoạn code này:

  • Image.open() mở file ảnh.
  • image_to_string() yêu cầu OCR nhận dạng chữ trong ảnh.
  • lang="vie+eng" yêu cầu sử dụng dữ liệu ngôn ngữ tiếng Việt và tiếng Anh.
  • print(text) in kết quả ra màn hình.


Lưu ý: Tesseract phải có sẵn dữ liệu ngôn ngữ tương ứng. Nếu thiếu dữ liệu tiếng Việt hoặc tiếng Anh, chương trình có thể báo lỗi.

  • Nếu nhận dạng thành công, bạn sẽ nhận được văn bản gần giống nội dung trong ảnh.
  • Nhưng đừng vội nghĩ rằng máy đã đọc hoàn hảo.
  • Kết quả còn phụ thuộc vào chất lượng ảnh, kiểu chữ, bố cục và ngôn ngữ.


Thử OCR online bằng Python — chưa cần cài vào máy!

Nếu bạn mới học Python, và ngại cài đủ thứ vào máy tính. Chúng ta có thể có một lựa chọn thử trước bằng một công cụ online nhé!

Bạn có thể mở Google Colab. Đây là môi trường cho phép bạn viết và chạy Python ngay trên trình duyệt.

Điểm tiện lợi là chúng ta có thể cài các thư viện cần thiết trong notebook và tải ảnh từ máy tính lên để thử nghiệm.

Bước 1: Mở Google Colab
Truy cập:
https://colab.research.google.com/

Tạo một notebook mới.
Bạn sẽ thấy những ô gọi là cell, nơi chúng ta có thể viết và chạy code Python.

Bước 2: Cài công cụ OCR
Trong một cell, chạy lệnh:

!apt-get update -qq
!apt-get install -y -qq tesseract-ocr tesseract-ocr-vie
%pip install -q pytesseract pillow



Đoạn này cài Tesseract OCR, dữ liệu ngôn ngữ tiếng Việt và những thư viện Python cần thiết.
Lưu ý: Đây là lệnh dành cho môi trường Linux của Google Colab, không phải lệnh bạn nên copy nguyên xi vào mọi trình chạy Python online.

Bước 3: Tải ảnh lên
Trong cell tiếp theo, chạy:

from google.colab import files
uploaded = files.upload()



Chọn một ảnh có chữ trên máy tính của bạn.

Ví dụ: một tấm ảnh chụp tài liệu, một hóa đơn mẫu hoặc một ảnh có vài dòng chữ rõ ràng.

Nếu chỉ muốn thử nghiệm, bạn nên dùng tài liệu giả lập, không chứa thông tin cá nhân hoặc thông tin tài chính thật.

Bước 4: Cho Python đọc chữ
Chạy đoạn code:

from PIL import Image
import pytesseract

filename = next(iter(uploaded))

image = Image.open(filename)

text = pytesseract.image_to_string(
    image,
    lang="vie+eng"
)

print(text)



Nếu mọi thứ hoạt động đúng, Python sẽ in ra phần chữ mà OCR nhận dạng được.
Bạn có thể thử thay bằng một ảnh khác để xem kết quả thay đổi thế nào.


Tại sao OCR đôi khi đọc sai?


Hãy tưởng tượng bạn đưa cho một người tờ giấy bị nhòe mực rồi yêu cầu người đó đọc thật chính xác.

Người đó có thể đoán được phần lớn nội dung, nhưng một vài chữ vẫn có thể bị nhầm.


OCR cũng vậy.


Ảnh bị mờ

Ảnh càng mờ, việc nhận dạng càng khó.

Một số ký tự gần giống nhau có thể bị đọc nhầm.


Ảnh bị nghiêng

Bạn chụp tài liệu trong lúc cầm điện thoại lệch một góc.

Các dòng chữ không còn nằm ngang.

Hệ thống có thể nhận dạng kém hơn.


Ánh sáng không tốt

Ảnh quá tối, bị lóa hoặc có bóng đổ sẽ khiến chữ khó phân biệt với nền.


Font chữ lạ

Chữ viết cách điệu, font trang trí hoặc kiểu chữ quá nhỏ có thể gây khó khăn cho OCR.


Chữ viết tay

Chữ viết tay thường khó nhận dạng hơn văn bản in rõ ràng, đặc biệt khi người viết có phong cách chữ khó đọc.

Một số hệ thống chuyên dụng có thể nhận dạng chữ viết tay, nhưng không nên mặc định rằng mọi công cụ OCR đều làm tốt việc này.


Bảng biểu phức tạp

Một hóa đơn có nhiều cột, nhiều dòng và nhiều ô có thể khiến việc nhận dạng thứ tự nội dung trở nên khó khăn.

OCR có thể đọc được các con số nhưng chưa chắc đã xác định chính xác con số nào thuộc về cột nào.

Đó là lý do khi xử lý hóa đơn, chúng ta thường cần thêm bước phân tích cấu trúc tài liệu.



OCR đọc được chữ, nhưng chưa chắc hiểu được tài liệu


Đây là một điểm rất đáng nhớ.

Giả sử OCR trả về:

  • Product A  100000
  • Product B  200000
  • Total      300000


Máy tính đã nhận dạng được chữ.


Nhưng nếu bạn muốn biết:

  • Tên sản phẩm là gì?
  • Giá của từng sản phẩm là bao nhiêu?
  • Tổng tiền nằm ở đâu?
  • Ngày lập hóa đơn là ngày nào?


Bạn cần thêm logic để phân tích và trích xuất những trường dữ liệu cần thiết.


Ví dụ, bạn có thể dùng Python để tìm dòng chứa từ Total.


Nhưng nếu mỗi hóa đơn có bố cục khác nhau, việc chỉ tìm từ khóa có thể không đủ.

Khi đó, bạn có thể cần các kỹ thuật xử lý văn bản, phân tích bố cục hoặc những mô hình AI chuyên xử lý tài liệu.


Hãy nhớ sự khác nhau:

OCR giúp nhận dạng chữ. Trích xuất thông tin giúp tìm đúng dữ liệu cần dùng.


Hai công việc này có liên quan nhưng không hoàn toàn giống nhau.



Từ OCR đến Automation: Đây mới là phần thú vị


Bản thân OCR chỉ giải quyết một phần của quy trình.

Nhưng khi kết hợp với Python, API và Database, bạn có thể xây dựng một hệ thống tự động hóa hoàn chỉnh hơn.


Ví dụ, một công ty nhận được hóa đơn dưới dạng ảnh.

Quy trình có thể là:

Nhận hóa đơn

      ↓

Đọc ảnh bằng OCR

      ↓

Lấy văn bản

      ↓

Trích xuất mã hóa đơn và tổng tiền

      ↓

Kiểm tra dữ liệu

      ↓

Lưu vào Database

      ↓

Tạo báo cáo


Nếu dữ liệu có vấn đề, hệ thống có thể chuyển hóa đơn đó cho nhân viên kiểm tra.

Nếu dữ liệu đáp ứng đủ điều kiện, hệ thống có thể tiếp tục xử lý tự động.

Như vậy, OCR không chỉ giúp đọc chữ.

Nó còn có thể trở thành một mắt xích trong quy trình Automation của doanh nghiệp.



Chua thêm: OCR giống như thuê người đọc hộ


Hãy tưởng tượng bạn có một chồng tài liệu cao đến mức nhìn vào đã thấy muốn pha một bình cà phê thật lớn để...có sức cày.


Bạn nói với máy tính:

"Đọc giúp tôi toàn bộ chỗ này."


Máy tính trả lời:

"Được, tôi sẽ thử nhận dạng chữ."


Bạn:

"Sau đó lấy mã hóa đơn và tổng số tiền giúp tôi."


Máy tính:

"Đó là bước xử lý tiếp theo. Tôi cần thêm quy tắc hoặc công cụ để xác định đúng thông tin."


Bạn:

"Rồi lưu vào Database."


Máy tính:

"Được, nếu chương trình đã được xây dựng để làm việc đó."


Đến đây mới thấy một điều:

OCR không phải phép thuật. Nó là một công cụ trong cả quy trình xử lý dữ liệu.

Bạn cần kết hợp đúng công cụ và kiểm tra kết quả để biến nó thành một hệ thống có ích.



Ráng...chua thêm một chút nữa


Giả sử OCR đọc nhầm:

Tổng số tiền: 1.500.000


thành:

Tổng số tiền: 7.500.000


Nếu đây chỉ là một bản nháp, bạn có thể phát hiện và sửa lại. Lỗi kiểu này ai trong chúng ta cũng...quen, kiểu số 1 nhầm thành số 7, số 3 thành số 8...

Nhưng nếu hệ thống tự động đưa con số đó vào phần mềm kế toán rồi gửi báo cáo đi?

Câu chuyện sẽ phức tạp hơn nhiều.


Vì vậy, với dữ liệu quan trọng như tiền bạc, hợp đồng hoặc thông tin khách hàng, đừng chỉ hỏi:

"OCR có đọc được không?"


Hãy hỏi thêm:

"Làm sao phát hiện khi OCR đọc sai?"


Một hệ thống thực tế có thể cần:

  • Kiểm tra định dạng dữ liệu.
  • So sánh với những thông tin đã biết.
  • Kiểm tra tổng tiền và các phép tính liên quan.
  • Đánh dấu trường dữ liệu có độ tin cậy thấp.
  • Yêu cầu con người xác nhận các trường hợp quan trọng.


Tự động hóa tốt không phải là tự động tin mọi thứ máy tạo ra.


Mà là biết lúc nào có thể tiếp tục tự động và lúc nào cần kiểm tra.



OCR và AI khác nhau như thế nào?


OCR truyền thống tập trung vào việc nhận dạng ký tự từ hình ảnh.


AI là một lĩnh vực rộng hơn, có thể hỗ trợ nhiều nhiệm vụ khác nhau, bao gồm phân tích ngôn ngữ, phân loại tài liệu và trích xuất thông tin.


Ví dụ:


OCR:

Nhận dạng dòng chữ:

Invoice No: INV001

Total: 1500000


Hệ thống phân tích tài liệu:

Xác định:

invoice_number = "INV001"

total = 1500000


Một số hệ thống hiện đại kết hợp OCR với AI để xử lý tài liệu phức tạp hơn.

Tuy nhiên, không phải hệ thống OCR nào cũng dùng AI tạo sinh, và không phải cứ dùng AI là kết quả luôn chính xác.

Với những quy trình quan trọng, việc kiểm tra và xác nhận dữ liệu vẫn cần được thiết kế cẩn thận.



Checklist "chuẩn không cần chỉnh"


Khi bắt đầu một dự án OCR, hãy tự hỏi:

  • File đầu vào là ảnh, PDF quét hay PDF có sẵn văn bản?
  • Chất lượng hình ảnh có đủ rõ không?
  • Tài liệu sử dụng ngôn ngữ nào?
  • Đã cài đúng bộ máy OCR chưa?
  • Đã có dữ liệu ngôn ngữ cần thiết chưa?
  • Mục tiêu chỉ là lấy toàn bộ văn bản hay trích xuất các trường cụ thể?
  • Kết quả OCR có cần được kiểm tra không?
  • Nếu nhận dạng sai thì hệ thống sẽ xử lý thế nào?
  • Có cần lưu dữ liệu vào Excel hoặc Database không?
  • Có cần ghi log và thông báo khi lỗi không?
  • Dữ liệu có quan trọng đến mức phải yêu cầu con người xác nhận không?


Nếu bạn trả lời được những câu hỏi này trước khi viết code, khả năng xây dựng một hệ thống OCR hữu ích sẽ cao hơn nhiều.



FAQ nhanh


OCR có miễn phí không?

Có những công cụ OCR miễn phí và mã nguồn mở, chẳng hạn Tesseract OCR. Một số dịch vụ khác có thể tính phí tùy theo số lượng tài liệu hoặc tính năng.


Python có làm OCR được không?

Có. Python có thể gọi các công cụ OCR như Tesseract thông qua thư viện pytesseract, hoặc tích hợp với những dịch vụ OCR khác.


OCR có đọc được tiếng Việt không?

Có, nếu công cụ được sử dụng hỗ trợ tiếng Việt và bạn đã cài đúng dữ liệu ngôn ngữ. Chất lượng nhận dạng còn phụ thuộc vào hình ảnh và kiểu chữ.


OCR có đọc được file PDF không?

Có thể. Với PDF có sẵn lớp văn bản, đôi khi bạn không cần OCR. Với PDF dạng ảnh quét, bạn thường cần chuyển các trang thành hình ảnh hoặc dùng công cụ hỗ trợ OCR cho PDF.


OCR có đọc được chữ viết tay không?

Một số công cụ có thể nhận dạng chữ viết tay, nhưng độ chính xác thay đổi rất nhiều theo kiểu chữ, chất lượng ảnh và công nghệ được sử dụng.


OCR có tự hiểu nội dung hóa đơn không?

Không nhất thiết. OCR chủ yếu nhận dạng chữ. Muốn xác định chính xác mã hóa đơn, ngày mua hoặc tổng tiền, bạn thường cần thêm bước phân tích và trích xuất thông tin.


Có nên đưa toàn bộ kết quả OCR vào Database ngay không?

Không nên mặc định như vậy. Nếu dữ liệu quan trọng, bạn nên kiểm tra định dạng, tính hợp lệ và những trường dễ bị nhận dạng sai trước khi lưu hoặc sử dụng chúng.



Tổng kết


Nói đơn giản, hơi theo phong cách "tào lao" của DatVietLapTrinh thì:

OCR là công nghệ giúp máy tính nhận dạng chữ trong hình ảnh hoặc tài liệu được quét để chuyển chúng thành văn bản có thể xử lý.


Ví dụ:

Ảnh hóa đơn → OCR → Văn bản → Trích xuất thông tin → Database.


OCR đặc biệt hữu ích khi bạn cần xử lý nhiều tài liệu mà việc gõ lại bằng tay vừa tốn thời gian vừa dễ xảy ra sai sót.


Nhưng hãy nhớ ba điều:

  • Thứ nhất: OCR nhận dạng chữ, không đảm bảo đọc đúng mọi ký tự.
  • Thứ hai: Nhận dạng được chữ chưa có nghĩa là đã trích xuất đúng thông tin cần dùng.
  • Thứ ba: Nếu muốn xây dựng Automation đáng tin cậy, bạn cần có bước kiểm tra dữ liệu, xử lý lỗi và xác nhận những trường hợp quan trọng.


Một hệ thống OCR tốt không chỉ biết đọc.

Nó còn phải biết xử lý kết quả đọc được một cách an toàn và có ích.