OCR văn bản trong cảnh bằng Ultralytics YOLO26
OCR văn bản trong cảnh là gì?#
Nhận dạng ký tự quang học (OCR) phát hiện và đọc văn bản trong ảnh. Giải pháp OCR kết hợp detector văn bản Ultralytics YOLO26 với backend nhận dạng văn bản. Giải pháp hỗ trợ các hộp phát hiện căn trục, hộp định hướng (OBB) và đa giác phân đoạn, sau đó trả về văn bản đã nhận dạng theo thứ tự đọc.
Phát hiện và nhận dạng vẫn là các thành phần riêng biệt, vì vậy bạn có thể kết hợp detector văn bản trong cảnh với PaddleOCR hoặc model nhận dạng của riêng mình.
Tại sao nên dùng OCR văn bản trong cảnh?#
- Hình học văn bản linh hoạt: Sử dụng model phát hiện, OBB hoặc phân đoạn cho văn bản nằm ngang, xoay hoặc có hình dạng bất quy tắc.
- Có thể thay thế bộ nhận dạng: Chạy PaddleOCR mà không cần mã tích hợp bổ sung, hoặc truyền callable cho model khác.
- Đầu ra có cấu trúc: Truy cập văn bản đã nhận dạng, độ tin cậy của nhận dạng và phát hiện, hình học nguồn cùng ảnh đã chú thích từ một đối tượng kết quả.
Chạy OCR văn bản trong cảnh với YOLO26#
PaddleOCR là tùy chọn và sẽ được tải khi tạo OCR với recognizer="paddleocr", cài đặt PaddleOCR 3.x và bản dựng PaddlePaddle cho CPU nếu các gói này chưa có. Để nhận dạng bằng GPU, hãy cài đặt trước bản dựng paddlepaddle-gpu tương thích; các gói OCR không được thêm vào những phần phụ thuộc cơ sở của Ultralytics.
Truyền ảnh và detector văn bản vào giải pháp OCR. Kết quả chứa ảnh đã chú thích và văn bản được nhận dạng:
yolo solutions ocr model="scene-text-obb.pt" source="path/to/video.mp4" recognizer="paddleocr"Các checkpoint YOLO26-Text#
Họ model YOLO26-Text công khai cung cấp các checkpoint OBB n, s, m, l và x. Đặt ULTRALYTICS_API_KEY thành khóa API Nền tảng Ultralytics của riêng bạn, sau đó tải checkpoint bằng URI của Nền tảng:
export ULTRALYTICS_API_KEY="your-api-key"ocr = solutions.OCR(model="ul://ultralytics-yolo/yolo26-text/yolo26n-text", recognizer="paddleocr")
result = ocr(im0)Thay yolo26n-text bằng yolo26s-text, yolo26m-text, yolo26l-text hoặc yolo26x-text để dùng model lớn hơn.
Các đối số của OCR#
Dưới đây là bảng các đối số của OCR:
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
model | str | None | Đường dẫn đến tệp model Ultralytics YOLO. |
recognizer | str hoặc Callable | 'paddleocr' | Backend nhận dạng văn bản hoặc callable nhận crop BGR và trả về (text, confidence). |
line_width | int | 2 | Độ dày đường viền của box, keypoint và số đếm mà giải pháp vẽ. |
verbose | bool | True | Bật nhật ký theo từng frame của giải pháp, gồm shape đầu vào, số lượng class và tốc độ xử lý. Bản thân lệnh gọi tracking luôn không ghi nhật ký. |
Ngoài ra, các cài đặt trực quan hóa sau đây cũng được hỗ trợ:
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
show | bool | False | Nếu True, hiển thị ảnh hoặc video đã được chú thích trong một cửa sổ. Hữu ích để nhận phản hồi trực quan ngay lập tức trong quá trình phát triển hoặc kiểm thử. |
show_conf | bool | True | Hiển thị điểm confidence bên cạnh nhãn của mỗi detection. Cho biết mức độ chắc chắn của model đối với từng detection. |
show_labels | bool | True | Hiển thị nhãn cho mỗi detection trong đầu ra trực quan. Giúp nhận biết ngay các đối tượng được phát hiện. |
Cách OCR văn bản trong cảnh hoạt động#
- Phát hiện văn bản: YOLO26 tạo hộp căn trục, hộp định hướng hoặc đa giác phân đoạn.
- Tạo crop để nhận dạng: Các hộp được cắt theo biên ảnh. OBB được hiệu chỉnh affine theo cạnh trải dài xa nhất từ trái sang phải, nhờ đó các hộp gần vuông vẫn thẳng đứng và các dòng chữ nghiêng nằm ngang theo hướng đọc. Với đa giác phân đoạn, hình chữ nhật xoay có diện tích nhỏ nhất được hiệu chỉnh trong khi đa giác ban đầu được giữ lại. Các crop có chiều cao lớn hơn chiều rộng ít nhất 1,5 lần được xoay 90° ngược chiều kim đồng hồ, như trong PaddleOCR.
- Nhận dạng văn bản: PaddleOCR xử lý tất cả crop theo từng batch gồm 16 crop. Bộ nhận dạng tùy chỉnh nhận từng crop một.
- Sắp xếp và hiển thị kết quả: Văn bản được nhóm thành các dòng ngang và sắp xếp từ trên xuống dưới, từ trái sang phải. Phần trực quan hóa sử dụng phông chữ Unicode cho văn bản không phải ASCII, chẳng hạn tiếng Trung.
Tọa độ luôn tham chiếu đến ảnh gốc, không phải đầu vào của detector hay crop dùng để nhận dạng.
Sử dụng bộ nhận dạng tùy chỉnh#
Truyền một callable để tích hợp model nhận dạng khác mà không thay đổi quy trình phát hiện, xử lý hình học hoặc sắp xếp. Callable được gọi một lần cho mỗi crop BGR numpy.ndarray không rỗng. Mỗi lần gọi phải trả về một tuple (text, confidence), không phải một danh sách kết quả theo batch:
| Phần tử tuple | Kiểu được chấp nhận | Mô tả |
|---|---|---|
text | str | Văn bản đã giải mã cho crop này. Trả về "" nếu không nhận dạng được văn bản. |
confidence | float, int hoặc numpy.floating | Độ tin cậy nhận dạng dạng số, được giải pháp chuyển đổi thành float. |
def recognize(crop):
# Chạy model nhận dạng của bạn trên crop BGR và giải mã đầu ra tại đây.
return "example", 0.95
ocr = solutions.OCR(model="custom-text.pt", recognizer=recognize)
result = ocr(im0)Tên backend không được hỗ trợ sẽ gây ra lỗi ValueError. Khi không phát hiện được văn bản, result.texts sẽ rỗng và bộ nhận dạng không được gọi.
Kết quả OCR#
Mỗi lần gọi trả về một đối tượng SolutionResults. Sử dụng result.plot_im cho ảnh đã chú thích và result.texts cho các bản ghi theo thứ tự đọc xác định:
| Khóa | Kiểu | Mô tả |
|---|---|---|
text | str | Văn bản đã nhận dạng. |
confidence | float | Độ tin cậy nhận dạng, được giữ riêng với độ tin cậy phát hiện. |
detection_confidence | float | Độ tin cậy của detector YOLO. |
detection_index | int | Chỉ mục phát hiện nguồn trước khi sắp xếp theo thứ tự đọc. |
polygon | list[list[float]] | Đa giác trên ảnh gốc: bốn góc đối với phát hiện bằng hộp và OBB, hoặc đường bao của mask. |
Các phần phụ thuộc và giấy phép#
| Thành phần | Bắt buộc | Vai trò | Giấy phép |
|---|---|---|---|
| Ultralytics | Có | Phát hiện bằng YOLO, hình học crop và điều phối kết quả | AGPL-3.0 |
| PaddlePaddle | Chỉ dùng cho recognizer="paddleocr" | Môi trường chạy nhận dạng | Apache-2.0 |
| PaddleOCR 3.x | Chỉ dùng cho recognizer="paddleocr" | Các model nhận dạng dòng văn bản và adapter suy luận | Apache-2.0 |
| Callable tùy chỉnh | Không | Tích hợp nhận dạng do người dùng sở hữu | Do backend xác định |
PaddleOCR có thể tải trọng số nhận dạng trong lần sử dụng đầu tiên. Hãy xem lại thẻ model đã chọn và các điều khoản phân phối lại trước khi đóng gói hoặc triển khai những thành phần này. Giấy phép của checkpoint tùy chỉnh là riêng biệt.
Câu hỏi thường gặp#
Có. Truyền một callable làm
recognizervà trả về(text, confidence)cho mỗi crop BGR. Xem Use a Custom Recognizer để biết hợp đồng đầu vào và đầu ra.Không. OCR xử lý từng ảnh đầu vào độc lập, không có ID theo dõi hay bộ nhớ đệm nhận dạng. Khi cần OCR từng khung hình, hãy xử lý mỗi khung hình video như một đầu vào riêng.
Bạn có thể xuất detector YOLO bằng chế độ Export thông thường, nhưng PaddleOCR hoặc bộ nhận dạng tùy chỉnh không được nhúng trong ONNX, TensorRT hay artifact detector khác. Triển khai detector đã xuất và môi trường chạy nhận dạng thành các thành phần riêng biệt, hoặc giữ lại lớp kết hợp Python này.
Bình luận
Đặt câu hỏi, chia sẻ kết quả hoặc giúp đỡ người khác.