Adapter mô hình cục bộ RapidOCR
Nếu muốn inference ONNX in-process có cache, hãy dùng adapter DLL native RapidOCR với HPDFCreateRapidOCRDLLOCREngine và THPDFRapidOCRDLLOptions
Adapter native cung cấp các preset THPDFRapidOCRDLLOptions.ForLanguage cho tiếng Trung giản thể và phồn thể, tiếng Anh, các ngôn ngữ Latin, tiếng Nhật, tiếng Hàn, các ngôn ngữ Cyrillic trong đó có tiếng Nga, các ngôn ngữ Ả Rập, và các ngôn ngữ Devanagari
HPDFRapidOCRRecognition cung cấp một adapter tiến trình trên Windows hiện thực IHPDFOCREngine trong các build Delphi, C++Builder, và FPC/Lazarus Win32 lẫn Win64
Hãy tự cấp phát Python với rapidocr và onnxruntime, bridge tools/OCR/rapidocr_tsv.py đi kèm, cùng các mô hình ONNX cục bộ tương thích; adapter không tự cài package hay tải xuống mô hình, từ điển, hoặc font
Python chạy trong một tiến trình ẩn riêng biệt nên kiến trúc của nó có thể khác với ứng dụng gọi; package ONNX Runtime của nó phải khớp với kiến trúc Python của chính nó
Các overload factory
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; const Options: THPDFRapidOCROptions): IHPDFOCREngine; overload;
Overload timeout gốc vẫn tương thích với giao thức bridge hiện có và dùng ba tên file mô hình PP-OCRv4 mặc định; nó kiểm tra đường dẫn executable, script, và thư mục ngay lúc dựng, còn tính khả dụng của mô hình được kiểm tra phía worker
Overload nhận options kiểm tra toàn bộ mô hình bắt buộc, từ điển tùy chọn, và font cục bộ trước khi trả adapter; file thiếu hoặc options không hợp lệ sẽ raise EArgumentException trước khi nhận dạng bắt đầu
Đường dẫn mô hình, từ điển, và font tương đối được phân giải theo ModelDirectory; đường dẫn tuyệt đối có thể trỏ tới các file được cấp phát riêng
Hãy dùng các mô hình tương thích với pipeline phát hiện, phân loại, và nhận dạng CTC của RapidOCR; mô hình từ một pipeline OCR khác có thể đòi hỏi tiền xử lý khác và không thể chọn chỉ vì nó đúng định dạng ONNX
Chọn mô hình theo ngôn ngữ
Adapter tiến trình Python vẫn dùng các đường dẫn THPDFRapidOCROptions tường minh; ForLanguage thuộc về record options của DLL native chứ không phải phương thức của adapter Python
Cấp phát mô hình và từ điển ngôn ngữ cục bộ bằng tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic, hoặc chọn -Language All để lấy đủ chín profile ngôn ngữ
Helper kiểm tra hash SHA256 đã ghim và đặt mỗi recognizer tại <profile>/recognition.onnx kèm <profile>/dictionary.txt tương ứng; nhận dạng khi chạy vẫn ngoại tuyến, không tải xuống tự động
Với tiếng Nga, dùng cyrillic/recognition.onnx và cyrillic/dictionary.txt; tiếng Trung giản thể dùng profile ch còn phồn thể dùng chinese_cht
Models := THPDFRapidOCROptions.Default;
Models.DetectionModel := 'ch_PP-OCRv3_det_infer.onnx';
Models.RecognitionModel := 'cyrillic/recognition.onnx';
Models.CharacterDictionary := 'cyrillic/dictionary.txt';
Models.ClassificationModel := 'ch_ppocr_mobile_v2.0_cls_infer.onnx';
Các tên file gốc detector và classifier ở trên khớp với mô hình dùng chung của helper cấp phát; hãy cung cấp cặp mô hình nhận dạng và từ điển tương ứng cùng lúc, và chọn engine riêng cho những trang hoặc vùng cần một hệ chữ khác
Options và giá trị mặc định
THPDFRapidOCROptions = record
DetectionModel: string;
RecognitionModel: string;
ClassificationModel: string;
CharacterDictionary: string;
FontPath: string;
UseAngleClassifier: Boolean;
IntraOpThreads: Integer;
InterOpThreads: Integer;
MaxPixels: Integer;
TimeoutMilliseconds: Cardinal;
class function Default: THPDFRapidOCROptions; static;
end;
Khởi tạo record bằng THPDFRapidOCROptions.Default trước khi ghi đè các trường
| Trường | Mặc định | Ý nghĩa |
|---|---|---|
DetectionModel | ch_PP-OCRv4_det_mobile.onnx | Mô hình phát hiện cục bộ |
RecognitionModel | ch_PP-OCRv4_rec_mobile.onnx | Mô hình nhận dạng cục bộ |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_mobile.onnx | Chỉ bắt buộc khi bật phân loại góc nghiêng |
CharacterDictionary | Rỗng | Dùng metadata ký tự nhúng trong mô hình nhận dạng; cung cấp từ điển cục bộ khi mô hình không có metadata đó |
FontPath | Rỗng | Phân giải thành %WINDIR%\Fonts\arial.ttf cho container kết quả của RapidOCR |
UseAngleClassifier | True | Bật phân loại góc nghiêng của văn bản; khi tắt, không cần và cũng không truyền mô hình phân loại nào |
IntraOpThreads | 1 | Số thread intra-operation của ONNX, từ 1 đến 64, chặn trên bằng số CPU logical của worker |
InterOpThreads | 1 | Số thread inter-operation của ONNX với giới hạn tương tự |
MaxPixels | 16777216 | Ngân sách pixel đầu vào, từ 1 đến 67,108,864 |
TimeoutMilliseconds | 60000 | Deadline tổng của yêu cầu, từ 1 đến 3,600,000 milli-giây |
Bridge chọn tường minh backend CPU của ONNX Runtime cho mọi giai đoạn và tắt tải xuống tự động; nếu thiếu từ điển ký tự nhúng thì phải cấp phát sẵn CharacterDictionary cục bộ
Ví dụ với mô hình được chọn tường minh
uses SysUtils, HPDFDoc, HPDFRapidOCRRecognition;
procedure AddLocalRapidOCRText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Models: THPDFRapidOCROptions;
Layer: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Models := THPDFRapidOCROptions.Default;
Models.DetectionModel := 'PP-OCRv6_det_small.onnx';
Models.RecognitionModel := 'PP-OCRv6_rec_small.onnx';
Models.UseAngleClassifier := False;
Engine := HPDFCreateRapidOCREngine(
'C:\OCR\Python\python.exe',
'C:\HotPDF\tools\OCR\rapidocr_tsv.py',
'C:\OCR\models', Models);
Layer := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Layer, Info) then
raise Exception.Create('Local RapidOCR text layer was not added');
end;
Kết quả, ngân sách, và hủy thao tác
Mỗi yêu cầu serialize bitmap mượn vào một thư mục tạm riêng, khởi chạy một worker Python cục bộ, và dọn các handle tiến trình cùng file tạm khi yêu cầu kết thúc
Overload options kiểm tra MaxPixels trước khi serialize bitmap; worker cũng kiểm tra kích thước đầu vào trước khi nạp mô hình và nhận các giới hạn MaxWords cùng MaxTextCodeUnits của yêu cầu
Bridge yêu cầu tọa độ ký tự và xác thực hình học, độ tin cậy cùng độ phủ văn bản của từng ký tự, rồi phát ra mỗi dòng nhận dạng hoàn chỉnh với các khoảng trắng và dấu câu bên trong nguyên bản, biên bao trọn theo pixel ảnh gốc, và độ tin cậy trung bình trong khoảng 0 đến 1
Mỗi dòng được phát ra dùng một slot MaxWords; khoảng trắng bên trong tính vào MaxTextCodeUnits, và việc công bố nguyên một dòng tránh cho text layer nhầm khoảng cách ký tự thành khoảng cách từ
Khoảng cách được giữ từ văn bản dòng của recognizer; văn bản mà bước phát hiện tách thành nhiều box riêng vẫn phụ thuộc vào suy luận khoảng cách từ theo không gian, và các trình đọc PDF bên ngoài có thể dựng lại hoặc gộp bớt các khoảng trắng lặp khi trích xuất
Ký tự bổ sung dùng hai đơn vị UTF-16; tọa độ, độ tin cậy, ký tự điều khiển không hợp lệ, hoặc ngân sách cạn kiệt sẽ khiến nhận dạng thất bại và xóa kết quả làm dở
Trang rỗng vẫn thành công với mảng từ rỗng; không có baseline native nào được cung cấp nên text layer dùng cơ chế fallback hình học hiện có
Hủy, timeout, và kích thước đầu ra được thăm dò mỗi 25 milli-giây; một Windows job chứa worker cùng các tiến trình con của interpreter, và việc chấm dứt chờ dọn tiến trình thêm tối đa năm giây
ApplyLoadedOCRTextLayer công bố mọi trang đã chọn một cách nguyên tử sau khi nhận dạng thành công
Đầu ra TSV bị giới hạn 64 MiB và đầu ra chẩn đoán 1 MiB; các ngân sách đầu vào và đầu ra không phải trần cứng cho bộ nhớ mô hình ONNX hay bộ nhớ inference
Khởi tạo mô hình diễn ra trong một tiến trình Python mới cho mỗi yêu cầu và được tính vào deadline
Kiểm chứng
Các runner adapter Delphi và FPC dùng chung bao phủ preflight mô hình, đường dẫn tùy chỉnh, phân loại tùy chọn, Unicode, ngân sách, lỗi worker, hủy, và timeout; tham số RapidOCR tùy chọn của chúng bật nhận dạng thật và các kiểm tra round-trip PDF tìm được
Dùng Tests/Delphi/Run-TesseractRecognitionTests.ps1 hoặc Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 với -RapidOCRPython, -RapidOCRModelDirectory, -RapidOCRDetectionModel, và -RapidOCRRecognitionModel
Xem Các lớp văn bản OCR có thể tìm kiếm để biết các tùy chọn dựng ảnh, ánh xạ văn bản PDF Unicode, nhóm optional content, và giới hạn tuân thủ