Engine: - ocr.rs MỚI: find_tesseract (sidecar như qpdf, env FOFREEXIT_TESSERACT_PATH); ocr_page_words (render 300 DPI → tesseract tsv → lọc confidence ≥30 → quy đổi pixel→điểm PDF); ocr_add_text_layer — thêm text object render-mode INVISIBLE đúng khung từng từ lên CHÍNH trang gốc (searchable PDF chuẩn, ảnh không đổi), font Unicode nhúng 1 lần, mặc định vie+eng - convert.rs MỚI: export_images (PNG mỗi trang theo DPI), export_text, export_docx tự viết (gom char boxes thành dòng thị giác → đoạn Word với cỡ chữ xấp xỉ + ngắt trang; DOCX = zip STORE tự ghi kèm CRC-32, không thêm dependency); find_soffice + office_to_pdf + pdf_to_docx_via_soffice (LibreOffice headless, profile riêng -env:UserInstallation) Tauri + UI (thanh 🔁 Chuyển đổi): - Commands: ocr_run, convert_images, convert_txt, convert_docx (tự chọn LibreOffice nếu có → fallback bộ cơ bản, báo engine đã dùng), office_convert, convert_tools_status (UI disable nút + báo thiếu công cụ), pick_office_file, pick_save_as - Nút: OCR (select Việt+Anh/Việt/Anh), Xuất PNG 150 DPI, Xuất TXT, Xuất Word, Office→PDF (mở luôn kết quả) Test (6 mới → engine 73/73 xanh ngoài 2 fixture qpdf Linux): - OCR tiếng Anh trên PDF-scan giả lập THẬT (xoá text chỉ còn ảnh render): extract + search thấy từ, toạ độ lớp ẩn khớp vùng chữ - OCR tiếng Việt đúng dấu ("Việt Nam đất nước") - export PNG 3 trang / TXT / DOCX (unzip hệ thống giải được, có ngắt trang) - LibreOffice round-trip 2 chiều (tự bỏ qua nếu máy không có soffice) Docs: 19-phase7-summary (+ giới hạn v-sau), 20-phase7-user-tests (C1–C10 kèm hướng dẫn cài Tesseract/LibreOffice trên Windows), README, roadmap (Phase 7 HOÀN TẤT lõi), 14 (kế tiếp: Phase 8 phát hành). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HgnbPwSoRGNH7LHsDUmRpk
67 lines
4.1 KiB
Markdown
67 lines
4.1 KiB
Markdown
# 19 — Tổng kết Phase 7 (OCR & Convert)
|
|
|
|
> Trạng thái: **HOÀN TẤT lõi.** OCR Tesseract (Việt + Anh) tạo lớp text ẨN
|
|
> khớp toạ độ lên trang gốc; PDF→PNG/TXT/DOCX; Office↔PDF qua LibreOffice.
|
|
> 6 test mới, tổng engine **73/73 xanh** (ngoài 2 fixture qpdf Linux).
|
|
|
|
## 1. Khảo sát Foxit (chuẩn nghiệm thu)
|
|
- **OCR (Recognize Text)**: chọn ngôn ngữ → chạy trên tài liệu scan → file
|
|
thành searchable/copy được, hình ảnh gốc GIỮ NGUYÊN (text ẩn dưới ảnh).
|
|
- **Convert**: PDF→ảnh/Word/Excel/text; Office→PDF.
|
|
|
|
## 2. Kiến trúc — sidecar CLI như qpdf
|
|
- **Tesseract** (OCR) và **LibreOffice headless** (Office↔PDF) là công cụ
|
|
ngoài, tìm qua env (`FOFREEXIT_TESSERACT_PATH`/`FOFREEXIT_SOFFICE_PATH`) →
|
|
PATH. Không có thì các tính năng khác vẫn chạy, nút liên quan báo rõ.
|
|
- PDF→PNG/TXT/DOCX cơ bản tự làm bằng PDFium + code riêng — không phụ thuộc gì.
|
|
|
|
## 3. Đã làm — Engine
|
|
|
|
### `ocr.rs`
|
|
- `ocr_page_words`: render trang **300 DPI** → `tesseract ... tsv` → parse
|
|
bảng từ (bbox pixel + confidence, lọc <30) → quy đổi pixel→điểm PDF.
|
|
- `ocr_add_text_layer`: OCR các trang rồi thêm text object **render mode
|
|
Invisible** đúng khung từng từ lên CHÍNH trang gốc (không đổi hình ảnh) —
|
|
đúng cơ chế searchable PDF chuẩn. Font Unicode (đủ dấu tiếng Việt) nhúng 1
|
|
lần. Ngôn ngữ `vie+eng` mặc định.
|
|
|
|
### `convert.rs`
|
|
- `export_images(dpi)`: mỗi trang 1 PNG `<tên>-pN.png`.
|
|
- `export_text`: toàn bộ text các trang → .txt.
|
|
- `export_docx` (tự viết, "đủ dùng"): gom char boxes thành DÒNG thị giác
|
|
(cùng heuristic UI edit) → mỗi dòng 1 đoạn Word với **cỡ chữ xấp xỉ** +
|
|
ngắt trang giữa các trang; DOCX = zip tự ghi (method STORE, CRC-32 tự tính,
|
|
không thêm dependency) — Word/LibreOffice/unzip đọc chuẩn.
|
|
- `office_to_pdf` / `pdf_to_docx_via_soffice`: LibreOffice headless với
|
|
profile riêng (`-env:UserInstallation`) để không đụng LibreOffice đang mở;
|
|
PDF→DOCX dùng `--infilter=writer_pdf_import` (layout tốt hơn bản tự viết).
|
|
|
|
## 4. Tauri + UI (thanh "🔁 Chuyển đổi")
|
|
- Commands: `ocr_run` (chọn ngôn ngữ), `convert_images`, `convert_txt`,
|
|
`convert_docx` (**tự chọn engine**: LibreOffice nếu có → fallback bộ cơ bản,
|
|
báo rõ đã dùng gì), `office_convert`, `convert_tools_status` (UI disable
|
|
nút + hiện thiếu công cụ nào).
|
|
- Nút: 🔍 OCR (select Việt+Anh/Việt/Anh), 🖼 Xuất PNG (150 DPI), 📄 Xuất TXT,
|
|
📘 Xuất Word, 📥 Office→PDF (mở luôn PDF kết quả).
|
|
|
|
## 5. Test (6 mới → engine 73/73)
|
|
- `ocr_makes_scanned_pdf_searchable_english` — dựng PDF-scan giả lập THẬT
|
|
(xoá hết text, chỉ còn ảnh render — extract rỗng như scan) → OCR → từ tìm
|
|
được qua extract + search, **toạ độ lớp ẩn khớp vùng chữ** trên ảnh.
|
|
- `ocr_vietnamese_diacritics` — "Việt Nam đất nước" nhận dạng ĐÚNG DẤU.
|
|
- `export_images_per_page` (3 trang → 3 PNG đúng cỡ); `export_text_all_pages`.
|
|
- `export_docx_basic_layout` — docx là zip chuẩn (unzip hệ thống giải được),
|
|
document.xml chứa text + ngắt trang.
|
|
- `libreoffice_round_trip_when_available` — PDF→DOCX (LibreOffice) và
|
|
DOCX→PDF: PDF kết quả mở được, nội dung giữ nguyên. Tự bỏ qua nếu máy
|
|
không có soffice.
|
|
|
|
## 6. Giới hạn (v-sau, không chặn dùng)
|
|
- OCR: chưa tiền xử lý ảnh (deskew/denoise) cho scan nghiêng/mờ; chưa chọn
|
|
vùng OCR; lớp ẩn đặt theo khung TỪ (chuẩn phổ biến), chưa scale ngang từng
|
|
glyph (Tz) nên bôi chọn có thể lệch nhẹ ở từ rất dài.
|
|
- PDF→DOCX bản tự viết: giữ text + thứ tự đọc + cỡ chữ tương đối; KHÔNG tái
|
|
tạo cột/bảng/ảnh (LibreOffice lo phần đó khi máy có cài). PDF→Excel chưa làm.
|
|
- Windows: cần cài Tesseract (UB Mannheim build, tick gói Vietnamese) và/hoặc
|
|
LibreOffice; ghi trong docs/05 + checklist docs/20.
|