1. Tổng quan về Paddle-Lite và PaddleOCR
1.1 Paddle-Lite là gì?
Paddle-Lite là một công cụ suy luận (inference engine) nhẹ được phát triển bởi PaddlePaddle, một nền tảng học sâu mã nguồn mở do Baidu khởi tạo. Được thiết kế đặc biệt cho các thiết bị có tài nguyên hạn chế như điện thoại di động, thiết bị IoT và các hệ thống nhúng, Paddle-Lite cung cấp khả năng triển khai các mô hình học sâu một cách hiệu quả, đảm bảo hiệu suất cao và mức tiêu thụ tài nguyên thấp. Công cụ này được tối ưu hóa để tận dụng sức mạnh của nhiều loại phần cứng, bao gồm CPU, GPU, và NPU (Neural Processing Unit), giúp các nhà phát triển dễ dàng đưa các ứng dụng trí tuệ nhân tạo (AI) vào thực tế trên các thiết bị đầu cuối (edge devices).
Các tính năng nổi bật của Paddle-Lite
-Tối ưu hiệu suất: Paddle-Lite sử dụng các kỹ thuật tối ưu hóa tiên tiến như lượng tử hóa (quantization), cắt tỉa mô hình (pruning), và tối ưu hóa kernel để giảm độ trễ và tăng tốc độ suy luận. Điều này đặc biệt quan trọng đối với các thiết bị di động có bộ nhớ và sức mạnh xử lý hạn chế.
-Tích hợp đa nền tảng: Paddle-Lite hỗ trợ nhiều hệ điều hành và kiến trúc phần cứng, bao gồm Android, iOS, Linux, và các thiết bị ARM. Điều này cho phép các nhà phát triển triển khai mô hình trên nhiều loại thiết bị mà không cần điều chỉnh mã nguồn quá nhiều.
-Hỗ trợ phần cứng đa dạng: Paddle-Lite tích hợp với các bộ tăng tốc phần cứng như ARM CPU, Mali GPU, Adreno GPU, và các NPU từ các nhà cung cấp như Qualcomm, MediaTek, và Huawei (thông qua Kirin NPU). Điều này giúp tối ưu hóa hiệu suất trên từng thiết bị cụ thể.
-Dễ dàng tích hợp: Paddle-Lite cung cấp các API thân thiện với người dùng (C++, Java, Python) và tài liệu chi tiết, giúp các nhà phát triển nhanh chóng tích hợp công cụ vào ứng dụng của họ.
-Khả năng tùy chỉnh: Công cụ này cho phép tùy chỉnh mô hình và quy trình suy luận thông qua các công cụ như opt, giúp tối ưu hóa mô hình cho từng kịch bản triển khai cụ thể.
Paddle-Lite không chỉ là một công cụ suy luận mà còn là một hệ sinh thái hỗ trợ toàn diện cho việc triển khai AI trên thiết bị đầu cuối, từ chuyển đổi mô hình đến tối ưu hóa và tích hợp vào ứng dụng thực tế.
1.2 PaddleOCR là gì?
PaddleOCR là một bộ công cụ nhận dạng ký tự quang học (Optical Character Recognition - OCR) mã nguồn mở, được phát triển dựa trên PaddlePaddle. PaddleOCR cung cấp một giải pháp toàn diện cho việc nhận dạng và trích xuất văn bản từ hình ảnh, với khả năng hỗ trợ hơn 80 ngôn ngữ, bao gồm tiếng Trung, tiếng Anh, tiếng Pháp, tiếng Đức, tiếng Nhật, và nhiều ngôn ngữ khác. Công cụ này được thiết kế để đáp ứng nhu cầu của nhiều ứng dụng thực tế, từ quét tài liệu, nhận diện biển số xe, đến dịch văn bản thời gian thực.
Các đặc điểm nổi bật của PaddleOCR
-Hỗ trợ đa ngôn ngữ: PaddleOCR có khả năng nhận diện văn bản trong nhiều ngôn ngữ với độ chính xác cao, nhờ vào các mô hình được huấn luyện trên bộ dữ liệu đa dạng.
-Mô hình siêu nhẹ (ultra-lightweight): PaddleOCR cung cấp các mô hình OCR với kích thước nhỏ (chỉ vài MB) và tốc độ xử lý nhanh, phù hợp cho các thiết bị di động và IoT. Các mô hình này được tối ưu hóa để giảm thiểu tài nguyên tính toán mà vẫn đảm bảo độ chính xác cao.
-Kiến trúc mô-đun: PaddleOCR bao gồm ba thành phần chính: phát hiện văn bản (text detection), nhận dạng văn bản (text recognition), và phân loại hướng văn bản (text orientation classification). Các thành phần này có thể được tùy chỉnh hoặc sử dụng riêng lẻ tùy theo nhu cầu của nhà phát triển.
-Dễ sử dụng:: PaddleOCR cung cấp các công cụ dòng lệnh, API Python, và tài liệu chi tiết, giúp các nhà phát triển dễ dàng tích hợp và thử nghiệm.
Mô hình siêu nhẹ của PaddleOCR đặc biệt phù hợp cho các ứng dụng yêu cầu xử lý nhanh trên thiết bị di động, chẳng hạn như quét danh thiếp, căn cước công dân,..., nhận diện văn bản trên ảnh chụp, hoặc tích hợp vào các ứng dụng dịch thuật.
1.3 Tại sao sử dụng Paddle-Lite với PaddleOCR?
Sự kết hợp giữa Paddle-Lite và PaddleOCR mang lại một giải pháp lý tưởng cho việc triển khai các ứng dụng OCR trên các thiết bị có tài nguyên hạn chế. Dưới đây là những lý do chính khiến bộ đôi này trở thành lựa chọn hàng đầu:
-
Khả năng triển khai trên thiết bị hạn chế tài nguyên: Các mô hình siêu nhẹ của PaddleOCR, khi kết hợp với Paddle-Lite, có thể chạy hiệu quả trên các thiết bị di động có bộ nhớ và sức mạnh xử lý thấp. Điều này giúp mở rộng phạm vi ứng dụng của OCR, từ điện thoại giá rẻ đến các thiết bị nhúng.
-
Tối ưu hóa hiệu suất suy luận: Paddle-Lite tận dụng các kỹ thuật tối ưu hóa như lượng tử hóa 8-bit, tối ưu kernel, và hỗ trợ phần cứng tăng tốc (GPU/NPU) để đảm bảo tốc độ suy luận nhanh và tiêu thụ năng lượng thấp. Điều này đặc biệt quan trọng đối với các ứng dụng OCR thời gian thực, nơi độ trễ thấp là yếu tố then chốt.
-
Tương thích đa nền tảng: Với sự hỗ trợ cho cả Android và iOS, Paddle-Lite cho phép các nhà phát triển triển khai cùng một mô hình PaddleOCR trên nhiều nền tảng mà không cần viết lại mã. Điều này giúp tiết kiệm thời gian và công sức trong quá trình phát triển.
Paddle-Lite và PaddleOCR là sự kết hợp hoàn hảo cho các nhà phát triển muốn triển khai các ứng dụng OCR mạnh mẽ trên thiết bị di động. Với Paddle-Lite, các mô hình siêu nhẹ của PaddleOCR có thể được triển khai một cách hiệu quả, tận dụng tối đa sức mạnh phần cứng của thiết bị mà vẫn đảm bảo hiệu suất cao và độ chính xác. Phần tiếp theo của bài viết sẽ hướng dẫn chi tiết cách chuẩn bị môi trường và triển khai mô hình PaddleOCR trên thiết bị di động, từ cài đặt công cụ đến tích hợp vào ứng dụng thực tế.
2. Chuẩn bị
2.1 Môi trường
-
Computer (dùng để Compiling Paddle Lite)
-
Mobile phone (arm7 or arm8)
Để triển khai thành công các mô hình PaddleOCR trên thiết bị di động bằng Paddle-Lite, bạn cần chuẩn bị một môi trường phát triển phù hợp. Phần này sẽ hướng dẫn chi tiết cách thiết lập môi trường, bao gồm cấu hình máy tính để biên dịch Paddle-Lite và chuẩn bị thiết bị di động để chạy ứng dụng.
2.2 Chuẩn bị môi trường biên dịch chéo (Cross-Compilation Environment)
Môi trường biên dịch chéo được sử dụng để biên dịch các bản demo C++ của Paddle-Lite và PaddleOCR, đảm bảo ứng dụng có thể chạy trên các thiết bị di động với kiến trúc ARM. Paddle-Lite hỗ trợ nhiều môi trường phát triển, bao gồm Docker, Linux, macOS, và Windows. Vì mình dùng Linux lên sẽ hướng dẫn mọi người trên nền tảng này.
2.2.1 Setup Linux enviroment và Hướng dẫn Custom training paddleOCR
Ở phần này, mình sẽ đi qua từng bước để thiết lập môi trường cần thiết cho PaddleOCR, một công cụ nhận dạng ký tự từ PaddlePaddle. Ngoài ra, mình cũng sẽ hướng dẫn cách tùy chỉnh và huấn luyện mô hình nhận dạng văn bản (text recognition) của PaddleOCR, đồng thời xuất mô hình để sử dụng với Paddle-Lite trên thiết bị di động.
Bước 1: conda create -n paddleocr python=3.10
Bước 2: conda activate paddleocr
Bước 3: git clone https://github.com/PaddlePaddle/PaddleOCR.git
Bước 4: python -m pip install paddlepaddle-gpu==2.6.1.post120 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html
Lưu ý ở bước 4 này các bạn phải chọn version paddle thích hợp với version của GPU nhé như mình đang hướng dẫn là CUDA 12.0. Còn đây là trang để tùy chỉnh phiên bản phù hợp (https://www.paddlepaddle.org.cn/en/install/quick?docurl=/documentation/docs/en/install/pip/linux-pip_en.html)
Bước 5: cd PaddleOCR && pip install -r requirements.txt
Sau khi có môi trường này xong các bạn có thể custom training Paddle, mình sẽ hướng dẫn qua cách train paddleOCR text recognition ở bài viết này. Đầu tiên sửa lại file yml và cần điều chỉnh các tham số:
- epoch_num: số lượng epoch để huấn luyện mô hình.
- character_dict_path: đường dẫn tới tập dictionary các kí tự bạn dùng khi huấn luyện.
- use_space_char: có sử dụng "dấu cách" khi huấn luyện mô hình không.
- scales: ở các bản paddleocrv2 thì sẽ là [3, 32, 320] nhưng sau này từ bản paddleOCRv3 trở đi thì là [3,48,320]
- data_dir: đường dẫn tới các file ảnh của tập train hoặc val.
- label_file_list: đường dẫn tới các file nhãn của tập train hoặc val.
Sau khi chỉnh xong file .yml bạn chỉ cần chạy câu lệnh này để có thể huấn luyện mô hình:
Bước 6: python3 -m paddle.distributed.launch --log_dir=./debug/ --gpus '0,1,2' tools/train.py -c configs/rec/PP-OCRv4/vietnam_PP-OCRv4_rec.yml
Khi train xong và sinh ra mô hình có đuôi là .pdot và .pdparams bạn cần tiếp tục sử dụng tool export để xuất mô hình ra dạng .pdiparams và .pdmodel để sau này chuyển đổi sang Paddle-Lite:
Bước 7: python3 tools/export_model.py -c configs/rec/PP-OCRv4/vietnam_PP-OCRv4_rec.ym -o Global.pretrained_model=./rec_vietnam_train/best_accuracy Global.save_inference_dir=./inference/rec_vietnam
2.2.2 Chuẩn bị thư viện Paddle-Lite
Đảm bảo phiên bản Paddle-Lite tương thích với mô hình PaddleOCR sẽ sử dụng khi triển khai lên thiết bị di động.
Bước 1: pip install paddle-lite=2.10
Bước 2: paddle_lite_opt --model_file=./vietnam_PP-OCRv4_rec_infer/inference.pdmodel --param_file=./vietnam_PP-OCRv4_rec_infer/inference.pdiparams --optimize_out=./vietnam_PP-OCRv4_rec_opt --valid_targets=arm --optimize_out_type=naive_buffer
Bước 3: sau khi chạy xong bước 2 bạn sẽ được 1 file .nb đây chính là mô hình dùng để deploy lên mobile device đây là repo các bạn có thể dùng luôn và triển khai https://github.com/PaddlePaddle/PaddleOCR/tree/main/deploy/android_demo nếu muốn thử triển khai luôn, ở phần sau mình sẽ hướng dẫn chi tiết hơn ở bước này.
Lưu ý: 2 model pdmodel và pdiparams là 2 model lấy được ở bước export model bên trên mục 2.2.1