| title | Engineering Drawing OCR |
|---|---|
| emoji | 📐 |
| colorFrom | blue |
| colorTo | indigo |
| sdk | docker |
| pinned | false |
Dự án này là hệ thống AI đa nhiệm giúp tự động phát hiện và trích xuất thông tin chữ/số từ các Bản vẽ kỹ thuật (Engineering Drawings). Hệ thống kết hợp cấu trúc lõi Detectron2 (ResNeXt-101) để giải quyết bài toán Object Detection trên ảnh kỹ thuật và PaddleOCR để bóc tách dữ liệu văn bản.
🔗 Link Web Demo (Hugging Face Spaces): https://huggingface.co/spaces/hieu098/hieu2004 🔗 Link tải Model Weights tự động: model_final.pth (ResNeXt-101)
- Nhận diện vùng thông minh: Trích xuất chính xác 3 loại khu vực trên một bản vẽ phức tạp:
PartDrawing: Vùng bản vẽ thiết kế, hình chiếu chi tiết.Note: Khu vực chứa các ghi chú kỹ thuật, tiêu chuẩn, vật liệu.Table: Khung tên, bảng kê vật tư thiết bị (BOM - Bill of Materials).
- Trích xuất văn bản (OCR) mạnh mẽ: Tự động cắt tách các vùng
Note/Tablevà dùng thuật toán OCR cao cấp đọc toàn bộ text kỹ thuật bên trong. - Micro-services Dockerized: Hệ thống đóng gói sẵn qua Docker, dễ dàng chạy Web Interface (Gradio) ở mọi nơi.
Hệ thống cung cấp hai phương pháp triển khai: sử dụng môi trường thật hoặc giam mình trong môi trường Docker sạch.
Yêu cầu: Python 3.10+ đã được cài đặt.
# 1. Clone source code từ kho
git clone [Đường_Dẫn_Repo_Của_Bạn]
cd engineering_drawing
# 2. Cài đặt các thư viện lõi và PyTorch (ưu tiên CPU để chạy web server nhẹ)
pip install torch==2.1.0 torchvision==0.16.0 --index-url https://download.pytorch.org/whl/cpu
# 3. Biên dịch Detectron2 từ Source (Yêu cầu có C++ build tools)
pip install ninja pyyaml==5.1
pip install 'git+https://github.com/facebookresearch/detectron2.git'
# 4. Cài đặt hệ sinh thái phụ trợ (OCR, xử lý ảnh)
pip install paddleocr==2.7.0 paddlepaddle==2.6.2 "numpy<2" gradio opencv-python pillow
# Khởi chạy Pipeline giao diện:
python app.py
# Truy cập giao diện tại http://localhost:7860Source code chuẩn bị sẵn file Dockerfile đã được tùy chỉnh tương thích chặt chẽ để vượt qua các rào cản về dependency.
# Xây dựng Docker Image (khoảng 3GB)
docker build -t drawing-ocr-system .
# Khởi chạy Container
docker run -d -p 7860:7860 drawing-ocr-system(Lưu ý đối với cả hai phương án: Bạn cần tải tệp model_final.pth đặt tại thư mục gốc chung với file app.py để hệ thống inference có não bộ dự đoán).
Vì huấn luyện cấu trúc X-101 yêu cầu tài nguyên lớn, khuyên dùng Google Colab (T4 GPU).
Quá trình thực hiện:
- Chuẩn bị Dữ liệu: Upload thư mục Dataset đã làm nhãn (COCO Format) lên Google Drive.
- Quy trình Huấn luyện:
- Cài đặt PyTorch chuẩn CUDA:
pip install torch==2.1.2 ... --index-url .../cu121 - Cài đặt Detectron2.
- Tại kịch bản Python, ta nạp bộ cấu hình:
COCO-Detection/faster_rcnn_X_101_32x8d_FPN_3x.yaml - Đặt Base Learning Rate (
cfg.SOLVER.BASE_LR) cẩn thận ở mức0.00025để không phá vỡ pre-trained weights. - Bật Max Iterations lên
3000(Khoảng hơn 1 giờ train trên T4).
- Cài đặt PyTorch chuẩn CUDA:
- Kết quả: Quá trình trả về tệp
output/model_final.pthchứa toàn bộ tri thức của model.
- Object Detection (Detectron2): Chúng tôi không dùng các hệ thống YOLO truyền thống vốn hay gặp nhiễu cắt xéo, mà quyết định sử dụng dòng Faster R-CNN kết hợp mạng xương sống đồ sộ ResNeXt-101 (32x8d) + FPN. Việc dùng X-101 đem lại khả năng trích lọc đặc trưng (Feature Extraction) vượt trội chuyên biệt đối với các nét vẽ kỹ thuật thanh mảnh và độ tương phản đen-trắng của bản thiết kế.
- OCR Engine (PaddleOCR): Chúng tôi tích hợp trực tiếp phiên bản Paddle 2.7.0 vào Inference Pipeline. Engine có tham số
use_angle_cls=True, giúp dễ dàng bóc chữ từ các Notes bị in nằm dọc hoặc xoay nghiêng – một đặc điểm luôn xuất hiện trên bản vẽ. - Tiền xử lý và Hậu Xử Lý (Post-Processing): Code tích hợp kỹ thuật tính toán IOU Threshold và Containment Threshold để tự động xóa bỏ những Bounding Box bị "con đẻ mẹ", bọc lồng vào nhau, xuất ra kết quả gọn gàng nhất.
- Thử nghiệm Base Model: Từ ResNet-50 ban đầu, mô hình dính hạn chế thiếu nhạy bén với nhãn
Table. Khi nâng cấp thành công lênResNeXt-101, độ hồi đáp (Recall) tăng vọt, mAP cải thiện rõ rệt, đặc biệt các khu vựcNotenhỏ nhặt không còn bị miss. - Thử nghiệm Dependency Crash: Từng gặp lỗi hệ thống nghiêm trọng do xung đột giữa Torch 2.1 và NumPy 2.0 (mới phát hành). Đội ngũ đã thực nghiệm cô lập hệ thống thông qua tham số chặn đứng phiên bản
"numpy<2"ngay trên cấp độ Dockerfile. - Kiểm soát Nailing Parameters: Setup ngưỡng Confidence Score test tại 0.5 là ranh giới lý tưởng nhất giúp cân bằng giữa độ tin cậy và hạn chế rác (False Positives).
- Khả năng khoanh vùng
PartDrawingcực kỳ chính xác kể cả với bản in lỗi mờ nhòe. - Phát hiện gọn gàng phần lớn toàn bộ thông tin Text (Tolerances, Material Notes, Scale ratios).
- Triển khai thành công Full-stack Web Demo phân phối toàn cầu qua Hugging Face Spaces không gặp lỗi Timeout trên Pipeline CPU.
- Layout Parser Hồi Quy: Không chỉ nhận diện "ĐÂY LÀ CÁI BẢNG", mà hướng tới cắt cấu trúc thành dòng/cột (table structure recognition) bằng mạng Graph Neural Networks hoặc các pre-trained Table-recognizers đặc thù để xuất trực tiếp file Excel/CSV báo giá sản xuất.
- Bơm thêm Dữ liệu Data Augmentation: Tăng cường tự động ghép nhiễu vết cà phê, vết xước giấy, độ nhăn, và bản scan chất lượng siêu thấp để ép mô hình train khỏe khoắn hơn.
- Chuyển đổi TensorRT/ONNX: Hiện tại hệ thống đang được chạy Inference trần thông qua file
.pth. Chuyển đổi mã C++ sang inference bằng OpenVINO hoặc ONNX Runtime sẽ có thể ép giảm độ trễ (latency) khi chạy real-time xuống cực thấp.
Developed with 💖, Detectron2, and Gradio.