Nhận dạng ký tự quang học (OCR) là quá trình nhận dạng ký tự từ hình ảnh bằng kỹ thuật máy tính và thị giác máy tính. Ứng dụng tham khảo này giới thiệu cách sử dụng TensorFlow Lite để thực hiện OCR. Nó sử dụng sự kết hợp của mô hình phát hiện văn bản và mô hình nhận dạng văn bản như một đường ống OCR để nhận dạng các ký tự văn bản.
Bắt đầu
Nếu bạn chưa quen với TensorFlow Lite và đang làm việc với Android, chúng tôi khuyên bạn nên khám phá ứng dụng mẫu sau có thể giúp bạn bắt đầu.
Nếu bạn đang sử dụng nền tảng không phải Android hoặc bạn đã quen thuộc với các API TensorFlow Lite , bạn có thể tải xuống các mô hình từ TF Hub .
Làm thế nào nó hoạt động
Các tác vụ OCR thường được chia thành 2 giai đoạn. Đầu tiên, chúng tôi sử dụng mô hình phát hiện văn bản để phát hiện các hộp giới hạn xung quanh các văn bản có thể có. Thứ hai, chúng tôi cung cấp các hộp giới hạn đã xử lý vào một mô hình nhận dạng văn bản để xác định các ký tự cụ thể bên trong các hộp giới hạn (chúng tôi cũng cần thực hiện Cấm không tối đa, chuyển đổi góc nhìn và v.v. để nhận dạng văn bản). Trong trường hợp của chúng tôi, cả hai mô hình đều từ TensorFlow Hub và chúng là mô hình lượng tử hóa FP16.
Điểm chuẩn hiệu suất
Số chuẩn hiệu suất được tạo bằng công cụ được mô tả ở đây .
Tên Model | Kích thước mô hình | Thiết bị | CPU | GPU |
---|---|---|---|---|
Phát hiện văn bản | 45,9 Mb | Pixel 4 (Android 10) | 181,93ms * | 89,77ms * |
Nhận dạng văn bản | 16,8 Mb | Pixel 4 (Android 10) | 338,33 mili giây * | Không có ** |
* 4 chủ đề được sử dụng.
** mô hình này không thể sử dụng đại biểu GPU vì chúng tôi cần hoạt động TensorFlow để chạy nó
Đầu vào
Mô hình phát hiện văn bản chấp nhận Tensor 4-D float32
của (1, 320, 320, 3) làm đầu vào.
Mô hình nhận dạng văn bản chấp nhận 4-D float32
Tensor của (1, 31, 200, 1) làm đầu vào.
Kết quả đầu ra
Mô hình phát hiện văn bản trả về 4-D float32
Tensor của hình dạng (1, 80, 80, 5) làm hộp giới hạn và một Tensor 4-D float32
của hình dạng (1,80, 80, 5) làm điểm phát hiện.
Mô hình nhận dạng văn bản trả về 2-D float32
Tensor của hình dạng (1, 48) làm chỉ số ánh xạ tới danh sách bảng chữ cái '0123456789abcdefghijklmnopqrstuvwxyz'
Hạn chế
Mô hình nhận dạng văn bản hiện tại được đào tạo bằng cách sử dụng dữ liệu tổng hợp với các chữ cái và số tiếng Anh, do đó chỉ hỗ trợ tiếng Anh.
Các mô hình này không đủ tổng quát để OCR trong tự nhiên (ví dụ, hình ảnh ngẫu nhiên được chụp bởi máy ảnh điện thoại thông minh trong điều kiện ánh sáng yếu).
Vì vậy, chúng tôi đã chọn 3 biểu trưng sản phẩm của Google chỉ để trình bày cách thực hiện OCR với TensorFlow Lite. Nếu bạn đang tìm kiếm một sản phẩm OCR cấp sản xuất sẵn sàng để sử dụng, bạn nên xem xét Google ML Kit . ML Kit, sử dụng TFLite bên dưới, sẽ đủ cho hầu hết các trường hợp sử dụng OCR, nhưng có một số trường hợp bạn có thể muốn xây dựng giải pháp OCR của riêng mình với TFLite. Một số ví dụ:
- Bạn có các mô hình TFLite phát hiện / nhận dạng văn bản của riêng mình mà bạn muốn sử dụng
- Bạn có các yêu cầu kinh doanh đặc biệt (tức là nhận dạng văn bản bị lộn ngược) và cần tùy chỉnh đường ống OCR
- Bạn muốn hỗ trợ các ngôn ngữ không có trong ML Kit
- Thiết bị người dùng mục tiêu của bạn không nhất thiết phải cài đặt dịch vụ Google Play
Người giới thiệu
- Ví dụ về nhận dạng / phát hiện văn bản OpenCV: https://github.com/opencv/opencv/blob/master/samples/dnn/text_detection.cpp
- Dự án cộng đồng OCR TFLite của những người đóng góp trong cộng đồng: https://github.com/tulasiram58827/ocr_tflite
- Phát hiện văn bản OpenCV: https://www.pyimagesearch.com/2018/08/20/opencv-text-detection-east-text-detector/
- Phát hiện văn bản dựa trên Deep Learning bằng OpenCV: https://learnopencv.com/deep-learning-based-text-detection-using-opencv-c-python/