Nhận diện văn bản từ camera với Raspberry Pi và Tesseract OCR

Trong thời đại số hóa, việc tự động trích xuất thông tin từ hình ảnh ngày càng trở nên phổ biến và hữu ích trong nhiều lĩnh vực. Với một chiếc Raspberry Pi nhỏ gọn và camera module, bạn hoàn toàn có thể xây dựng một hệ thống nhận diện văn bản (OCR) thời gian thực, có thể ứng dụng vào việc xử lý tài liệu giấy hoặc hỗ trợ người khiếm thị đọc nội dung xung quanh.

Bài viết này sẽ hướng dẫn bạn cách kết hợp Raspberry Pi với OpenCV và Tesseract OCR để nhận diện văn bản từ ảnh camera một cách nhanh chóng và chính xác.

Linh kiện sử dụng trong bài

Giảm 7%
Giá từ: 1.720.000 
Sản phẩm này có nhiều biến thể. Các tùy chọn có thể được chọn trên trang sản phẩm
Giảm 14%
Giá gốc là: 350.000 ₫.Giá hiện tại là: 300.000 ₫.
Giá từ: 890.000 
Sản phẩm này có nhiều biến thể. Các tùy chọn có thể được chọn trên trang sản phẩm

Code Python cho chương trình

Cài đặt các thư viện bằng cách chạy các lệnh sau:

sudo apt update
sudo apt install python3-opencv
sudo apt install python3-pytesseract
sudo apt install libtesseract-dev tesseract-ocr tesseract-ocr-vie tesseract-ocr-eng

Mã Python

from picamera2 import Picamera2
import cv2
import pytesseract
import time
import os

def get_next_filename(prefix="ocr_", ext=".txt"):
    i = 1
    while True:
        filename = f"{prefix}{i:03d}{ext}"
        if not os.path.exists(filename):
            return filename
        i += 1

# Camera
picam2 = Picamera2()
picam2.preview_configuration.main.size = (640, 480)
picam2.preview_configuration.main.format = "BGR888"
picam2.preview_configuration.controls.FrameRate = 30
picam2.configure("preview")
picam2.start()

time.sleep(1)

while True:
    frame = picam2.capture_array()
    cv2.imshow("Frame", frame)

    key = cv2.waitKey(1) & 0xFF

    if key == ord("s"):
        text = pytesseract.image_to_string(frame, lang='vie+eng')

        # Terminal
        print("OCR Text:")
        print(text)

        # Create new file
        filename = get_next_filename()
        with open(filename, "w", encoding="utf-8") as f:
            f.write(text)

        print(f"Da luu vao {filename}")

    elif key == ord("q"):
        break

cv2.destroyAllWindows()
picam2.stop()

Chương trình sẽ chụp ảnh lại và xuất nội dung nhận diện được thành một file văn bản (.txt). Ngôn ngữ được hỗ trợ là tiếng Việt và tiếng Anh.

Chạy chương trình thì camera mở và hiển thị khung hình

Khi bấm phím s:

  • Chụp lại khung hình hiện tại
  • Sử dụng Tesseract OCR nhận diện văn bản
  • In ra kết quả và lưu vào file

Bấm q để thoát chương trình

Khi chạy chương trình thì màn hình sẽ hiển thị camera xem trước
File text sẽ được hiển thị trên terminal và lưu vào bộ nhớ.

Kết luận

Dự án OCR với Raspberry Pi không chỉ là một bài tập thú vị về lập trình và thị giác máy tính, mà còn là một giải pháp hữu ích trong thực tế – từ việc tự động hóa công việc văn phòng đến hỗ trợ người dùng trong đời sống hàng ngày. Với chi phí thấp, thiết bị nhỏ gọn và khả năng mở rộng linh hoạt, bạn có thể dễ dàng tùy biến hệ thống để phục vụ nhiều mục đích khác nhau.