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ườngMặc địnhÝ nghĩa
DetectionModelch_PP-OCRv4_det_mobile.onnxMô hình phát hiện cục bộ
RecognitionModelch_PP-OCRv4_rec_mobile.onnxMô hình nhận dạng cục bộ
ClassificationModelch_ppocr_mobile_v2.0_cls_mobile.onnxChỉ bắt buộc khi bật phân loại góc nghiêng
CharacterDictionaryRỗngDù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 đó
FontPathRỗngPhân giải thành %WINDIR%\Fonts\arial.ttf cho container kết quả của RapidOCR
UseAngleClassifierTrueBậ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
IntraOpThreads1Số thread intra-operation của ONNX, từ 1 đến 64, chặn trên bằng số CPU logical của worker
InterOpThreads1Số thread inter-operation của ONNX với giới hạn tương tự
MaxPixels16777216Ngân sách pixel đầu vào, từ 1 đến 67,108,864
TimeoutMilliseconds60000Deadline 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ủ