Các lớp văn bản OCR có thể tìm kiếm
HotPDF có thể render các trang đã nạp được chọn cho một engine OCR do ứng dụng cung cấp và thêm nguyên tử văn bản Unicode vô hình có thể tìm kiếm thẳng hàng với từng từ được nhận dạng
Demo console SearchableOCR cung cấp một quy trình chạy được: tạo mẫu ba trang chỉ có ảnh bằng --create-sample, chọn nhận dạng OCR tích hợp sẵn, RapidOCR, hoặc Tesseract DLL/CLI, chọn trang, cấu hình độ tin cậy và giới hạn tài nguyên, rồi lưu một bản sao có thể tìm kiếm kèm thống kê chuyển đổi
Tích hợp engine
Triển khai IHPDFOCREngine với bất kỳ nhà cung cấp OCR đồng bộ nào khả dụng cho ứng dụng
Engine nhận một TBitmap mượn, DPI được yêu cầu, xoay trang đã chuẩn hóa, tọa độ media box, ngân sách từ và UTF-16 còn lại, và token hủy bỏ hiệu lực qua THPDFOCRRequest
Các hộp từ và đường cơ sở tùy chọn dùng tọa độ pixel bitmap trên-trái, và engine không được giữ lại hoặc giải phóng bitmap mượn sau khi Recognize trả về
Engine cục bộ tùy chọn
Phiên bản 2.754.0 bổ sung các factory Tesseract và RapidOCR tường minh trả về IHPDFOCREngine trên Windows; overload không có engine vẫn chọn engine tích hợp sẵn hiện có
Cài đặt và cấp phát engine đã chọn tại chỗ trước khi tạo adapter của nó, rồi truyền adapter đó sang overload engine của ApplyLoadedOCRTextLayer ; executable, package Python và mô hình OCR là các phụ thuộc ngoài tùy chọn và không được đóng gói cùng HotPDF
Tesseract
Adapter DLL native Tesseract tùy chọn bổ sung phân đoạn trang và chế độ engine cấu hình được, nhận dạng đa ngôn ngữ, và baseline từ native qua HPDFCreateTesseractDLLOCREngine và THPDFTesseractOptions
function HPDFCreateTesseractOCREngine(const ExecutablePath,
TessDataDirectory, Language: string;
TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateTesseractOCREngine(const ExecutablePath,
TessDataDirectory, Language: string;
const Options: THPDFTesseractOptions): IHPDFOCREngine; overload;
Khai báo nằm trong HPDFTesseractRecognition ; hãy cung cấp một executable Tesseract có thể xuất TSV và một thư mục dữ liệu chứa mô hình ngôn ngữ được yêu cầu, ví dụ chi_sim.traineddata cho chi_sim
Overload options nhận THPDFTesseractOptions.Default với phân đoạn trang tường minh, chế độ engine nhận dạng, timeout, và giới hạn pixel đầu vào; chọn tpsSingleLine, tpsSingleWord, hoặc tpsSparseText cho khớp bố cục đầu vào, như trình bày trong Tesseract OCR Adapters
Ví dụ này giả định executable và dữ liệu đã được cài sẵn ở các đường dẫn hiển thị và PDF là một thể hiện THotPDF đã tải
uses SysUtils, HPDFDoc, HPDFTesseractRecognition;
procedure AddTesseractText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Options: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Engine := HPDFCreateTesseractOCREngine(
'C:\OCR\Tesseract\tesseract.exe',
'C:\OCR\Tesseract\tessdata', 'chi_sim', 60000);
Options := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Options, Info) then
raise Exception.Create('OCR text layer was not added');
end;
RapidOCR
Adapter DLL native RapidOCR nhận dạng các snapshot bộ nhớ bằng mô hình ONNX CPU in-process bền vững qua HPDFCreateRapidOCRDLLOCREngine, với phân loại góc nghiêng tùy chọn và hủy hợp tác trong các build Delphi, C++Builder, và Windows FPC/Lazarus
Adapter mô hình cục bộ RapidOCR còn cung cấp một overload THPDFRapidOCROptions cho đường dẫn mô hình ONNX tường minh, phân loại góc nghiêng tùy chọn, từ điển và font ký tự cục bộ, giới hạn thread CPU, và ngân sách pixel đầu vào trong các build Delphi, C++Builder, và FPC/Lazarus
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine;
Khai báo nằm trong HPDFRapidOCRRecognition ; hãy cấp phát Python với rapidocr và onnxruntime , bridge tools/OCR/rapidocr_tsv.py được cung cấp, cùng ba mô hình cục bộ này
ch_PP-OCRv4_det_mobile.onnxch_PP-OCRv4_rec_mobile.onnxch_ppocr_mobile_v2.0_cls_mobile.onnx
Bridge còn đòi hỏi %WINDIR%\Fonts\arial.ttf cho container kết quả của RapidOCR, tắt tải xuống tự động, và dùng một thread ONNX cho mỗi nhóm thực thi đã cấu hình; thiếu mô hình, package hoặc font cục bộ khiến việc nhận dạng thất bại
Bridge hiện tại dùng cấu hình mô hình Tiếng Trung giản thể và giữ nguyên dấu câu nhận dạng được mà không thay thế toàn phần nửa phần
uses SysUtils, HPDFDoc, HPDFRapidOCRRecognition;
procedure AddRapidOCRText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Options: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Engine := HPDFCreateRapidOCREngine(
'C:\OCR\Python\python.exe',
'C:\HotPDF\tools\OCR\rapidocr_tsv.py',
'C:\OCR\RapidOCR\models', 60000);
Options := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Options, Info) then
raise Exception.Create('OCR text layer was not added');
end;
Cả hai factory đều kiểm tra đường dẫn executable và data hiện có, nhận timeout từ 1 đến 3,600,000 milli-giây, mặc định 60,000; cấu hình không hợp lệ sẽ raise EArgumentException
Adapter dùng chung khởi chạy một tiến trình cục bộ ẩn với đường dẫn có ngoặc kép và các handle kế thừa bị hạn chế, thăm dò hủy, timeout và kích thước đầu ra mỗi 25 milli-giây, và chấm dứt tiến trình khi thất bại trước khi dọn các tệp tạm
Xuất TSV bị giới hạn 64 MiB và xuất tệp chẩn đoán 1 MiB, với chẩn đoán trả về bị cắt ở 4,096 ký tự; các từ được nhận dạng cũng phải vừa ngân sách từ và UTF-16 của yêu cầu cùng bounds bitmap hợp lệ
Đầu ra nhận dạng TSV phải là UTF-8 hợp lệ và không chứa byte NUL hay ký tự điều khiển C0/C1 bên trong các từ được nhận dạng; đầu ra dị dạng làm cả yêu cầu nhận dạng thất bại ngay cả khi các từ hợp lệ đứng trước lỗi
Đây là các giới hạn đầu ra và yêu cầu, không phải trần cứng trên bộ nhớ của engine ngoài; hủy và lỗi engine trả về qua trạng thái text-layer mà không công bố các trang một phần
Bằng chứng và giới hạn nhận dạng
Chuẩn cơ sở RapidOCR 3.8.4 cục bộ vượt qua cả 15 lần lặp trên năm vùng scan Trung văn cố định: hai vùng clear ở 300 DPI và ba vùng áp lực độ phân giải thấp ở 150 DPI, đánh giá so với các bản ghi tham chiếu hiện tại với tỉ lệ lỗi ký tự tối đa 5% và tỉ lệ xóa tối đa 2%
Mọi lần lặp đều vượt qua kiểm tra thứ tự đọc, tổng cộng 5,190 kiểm tra tọa độ từ hoặc ký tự, và bằng đẳng pixel hiển thị ở 72 DPI; hai vùng clear có zero lỗi ký tự so với các tham chiếu đó
Hai lượt duyệt ảnh bằng AI thống nhất về văn bản và số Trung văn, nhưng một số điểm mã dấu câu trong raster vẫn mơ hồ và phần phán xử của con người chưa xong; khác biệt dấu câu vẫn bị tính là lỗi và các kết quả này là bằng chứng ngữ liệu, không phải đảm bảo độ chính xác chung
Hình học và văn bản tìm kiếm
HotPDF đảo ngược biến đổi trang của renderer để các đường cơ sở từ vẫn thẳng hàng trên các trang xoay 0, 90, 180 hoặc 270 độ
Mỗi từ được chấp nhận được ghi với chế độ render văn bản 3 Tr, một tỷ lệ văn bản ngang khớp và một ma trận văn bản nhận biết xoay, để raster trang không đổi trong khi vẫn giữ thứ tự nội dung có thể chọn
Một font Type 0 Identity-H dùng chung gán các CID cục bộ tài liệu có giới hạn cho các vô hướng Unicode và ghi một bản đồ ToUnicode hoàn chỉnh, bao gồm các đích surrogate UTF-16 cho các ký tự bổ sung
Các từ Latin và Cyrillic kề nhau trên cùng một baseline nhận được một dấu cách Unicode tường minh khi hình học của chúng cho thấy có khoảng cách từ; các từ CJK kề nhau giữ nguyên văn bản gốc, không chèn dấu cách
Xử lý một PDF bản scan
Ví dụ console Demo/Delphi/SearchableOCR/SearchableOCR.dpr nạp một PDF bản scan, chạy RapidOCR native với một profile ngôn ngữ cục bộ tường minh, công bố văn bản Unicode vô hình trên mọi trang đủ điều kiện, và lưu một PDF mới mà không mở trình đọc
SearchableOCR.exe scan.pdf searchable.pdf --dll C:\HotPDF\Lib\Native\RapidOCR\Win64\HotPDFRapidOCR.dll --models C:\HotPDF\Lib\Native\RapidOCR\Models --language ru --dpi 300
Dùng --language ch cho tiếng Trung giản thể hoặc --language chinese_cht cho tiếng Trung phồn thể; DLL phải khớp kiến trúc executable và bộ mô hình cục bộ đã chọn phải được cài
Ví dụ từ chối ghi đè file đầu ra đã có và chấp nhận --replace-ocr khi cập nhật một lớp OCR HotPDF đã đánh dấu
Giải mã scan JPEG trên Windows FPC vẽ vào đúng định dạng pixel bitmap cuối trước khi nhận dạng để việc chuyển đổi định dạng LCL giữ lại ảnh đã giải mã
Cập nhật lớp OCR hiện có
Đặt THPDFOCRTextLayerOptions.ReplaceExistingOCRTextLayer thành True để thay thế các stream OCR HotPDF đã đánh dấu tạo trước đó trên các trang được nhận dạng, trong cùng giao dịch với văn bản mới
Điều này chỉ bỏ qua SkipPagesWithText trên các trang đã đánh dấu và có tác dụng cả sau khi lưu rồi nạp lại; THPDFOCRTextLayerInfo.ReplacedPageCount báo số trang đã được thay thế
Lỗi nhận dạng và các trang không có từ nào được chấp nhận giữ nguyên lớp văn bản cũ; các stream chưa đánh dấu, kể cả OCR của bên thứ ba và các lớp do các bản HotPDF trước tạo, đều được giữ lại
Việc thay thế ngắt kết nối các stream nội dung OCR cũ nhưng không xóa tài nguyên font hay nhóm optional content vẫn có thể được tham chiếu ở nơi khác; lưu tăng dần có thể giữ lại các đối tượng bị thay thế từ các lần sửa trước
Mặc định vẫn là bỏ qua mọi trang có văn bản trích xuất được, kể cả số trang hay header nằm trên bản scan; tắt SkipPagesWithText sẽ nhận dạng cả trang và có thể nhân đôi văn bản native sẵn có, nên các trang trộn lẫn cần do ứng dụng tự chọn cách xử lý
Giới hạn, hủy bỏ và tính nguyên tử
THPDFOCRTextLayerOptions.Default bật nhận dạng 300 DPI, bỏ qua các trang đã phơi bày văn bản, và giới hạn số trang, pixel, từ, đơn vị UTF-16 và byte nội dung được tạo
HotPDF xác thực mọi kết quả engine và xây dựng toàn bộ nội dung trang trước khi bắt đầu một giao dịch đồ thị copy-on-write, nên lỗi engine, hình học không hợp lệ, cạn kiệt ngân sách, hủy bỏ hoặc lỗi cam kết để đồ thị đối tượng đã nạp không đổi
Một mảng chỉ số trang rỗng chọn mọi trang đã nạp, trong khi các chỉ số trang trùng được nhận dạng một lần theo thứ tự xuất hiện đầu tiên
MaxTotalWords đếm mọi từ đã nhận, bao gồm các từ độ tin cậy thấp hoặc không hợp lệ bị loại bỏ sau đó, và mỗi yêu cầu trang chỉ nhận phần hạn mức còn lại
Nếu ngân sách từ hoặc UTF-16 cạn kiệt mà vẫn còn một trang đủ điều kiện, việc xử lý trả về otlsBudgetExceeded trước khi dựng hoặc nhận dạng trang đó và không công bố lớp văn bản nào trong số đã hoạch định; các trang bị bỏ qua vì đã có văn bản không tốn ngân sách nhận dạng còn lại
Nhóm nội dung tùy chọn
Đặt UseOptionalContentGroup để ràng buộc toàn bộ văn bản được tạo vào một lớp được đặt tên qua từ điển Resources/Properties của mỗi trang
Tùy chọn này yêu cầu PDF 1.5 và tuân theo StrictVersionLock; mặc định giữ văn bản vô hình ngoài một nhóm nội dung tùy chọn để tương thích rộng nhất
Ghi chú tuân thủ
Lớp có thể tìm kiếm được tạo cố ý dùng một font tổng hợp không nhúng vì chế độ render 3 không bao giờ vẽ glyph
API này tự nó không tạo đầu ra OCR tuân thủ PDF/A, nên một quy trình PDF/A nên dùng một đường lớp văn bản font nhúng và chạy xác thực tuân thủ được yêu cầu trước khi công bố
API chính
THotPDF.ApplyLoadedOCRTextLayerIHPDFOCREngineTHPDFOCRRequestTHPDFOCRWordTHPDFOCRTextLayerOptionsTHPDFOCRTextLayerInfoTHPDFOCRTextLayerStatus
Progressive Rendering and Cancellation · Phương thức ExtractLoadedPageText