rapid-structure-rs 1.0.0

Rust document-structure engine for PaddleOCR-family ONNX models: text detection/recognition (PP-OCRv6), table structure (SLANet-plus) and formula recognition (PP-FormulaNet) on Windows x64 via ONNX Runtime.
//! 公开 API 的唯一重导出出口。
//!
//! 这里只做 `pub use`,不放实现。集中在一个模块里的原因有两个:
//!
//! 1. 平台谓词只需要在 `lib.rs` 写一次,而不是在十几个 `pub use` 上重复;
//! 2. 审查公开面时只需要读这一个文件(阶段 7 的 API 清理门槛)。
//!
//! 模块可见性仍然由各自的 `mod.rs` 决定:本文件只把既有的 `pub` 项提升到 crate 根部。

pub use crate::api::{
    ClassifierPlan, ClassifierPolicy, CoordinateSpace, DetectionOutcome, DetectionPolicy,
    EngineInfo, EnhancementPolicy, FormulaOutcome, FormulaPolicy, ImageInfo, ImageInput, ImageSize,
    InputTimings, OcrEngine, OcrOutput, OcrRegion, OcrRequest, OcrTimings, OcrWord, OutputPolicy,
    OwnedPixelBuffer, PageRoute, PixelFormat, Polygon, PreprocessPolicy, ProviderInfo,
    ProviderPreference as GenericProviderPreference, ProviderResolutionInfo, RecognitionOutcome,
    RecognitionPolicy, RectU32, RegionKind, RegionSource, ResolvedProvider, StagePlan, StageReport,
    StageReports, StageState, StageTiming, TableCellMatch, TableCellOutcome, TableDegradation,
    TableOutcome, TablePolicy, TableStructureConfidence, TableTextPolicy, TextOrder,
    TextOrientation, TilePolicy, ValidatedRequest, WordKind, WordOutputMode,
};
pub use crate::config::{
    ColorOrder, LangCls, LangDet, LangRec, ModelType, OcrVersion, ProviderPreference, RecImage,
    RuntimeConfig,
};
pub use crate::error::{RapidOcrError, Result};
// 输入层:`ImageInput::Encoded` 在管线内部走的就是这两个类型。导出它们是为了让
// `rapidstruct serve` 的 `/annotated.png` 能**复用同一个**解码实现(编码字节上限、header
// 像素探测、EXIF 方向、解码错误语义只有一份),而不是在 serve 里另写一套图片解码
// (docs/05 §4.5:原图只保留编码字节,注释图按需重新解码)。
pub use crate::formula::contract::{
    FORMULA_INPUT_CHANNELS, FORMULA_INPUT_RANK, FORMULA_INPUT_SPATIAL, FORMULA_OUTPUT_RANK,
    FormulaContract, validate_formula_contract,
};
pub use crate::formula::detect::{
    DEFAULT_FORMULA_DETECT_CONFIDENCE, DEFAULT_FORMULA_DETECT_IOU,
    DEFAULT_FORMULA_DETECT_MAX_DETECTIONS, FORMULA_DETECT_INPUT_SIZE, FormulaBox,
    FormulaDetectOptions, FormulaDetector,
};
pub use crate::formula::ftfy::{NOT_APPLICABLE_STEPS, UNIMPLEMENTED_STEPS, fix_text};
pub use crate::formula::model_info::FormulaModelInfo;
// P0-1:三个公式输出转码函数(JSON / Markdown / HTML 三个 `to_formula_*` 变体)生产零调用,
// 已从公开面删除(语义测试迁移到 `to_output_json` / `to_markdown_block` / `render_report`)。
// `order_formula_results` 仍被导出;`to_markdown_block` 由 crate 内部全路径调用,不占公开根面。
pub use crate::formula::output::order_formula_results;
pub use crate::formula::preprocess::{
    FORMULA_INPUT_SIZE, FORMULA_MEAN, FORMULA_STD, FormulaPreprocessor, FormulaTensor,
};
pub use crate::formula::recognizer::{
    DEFAULT_MAX_FORMULA_BATCH_SIZE, DEFAULT_MAX_FORMULA_SEQUENCE_LENGTH, FORMULA_MODEL_LOOP_BOUND,
    FormulaRecognition, FormulaRecognizer,
};
pub use crate::formula::session::FormulaSession;
pub use crate::formula::tokenizer::{FormulaDecode, FormulaTokenizer};
pub use crate::formula::tokenizer_metadata::{
    BOS_ID, BOS_TOKEN, EOS_ID, EOS_TOKEN, FormulaTokenizerMetadata, PAD_ID, PAD_TOKEN, UNK_ID,
    UNK_TOKEN,
};
pub use crate::input::image_loader::{LoadImage, OcrInput};
pub use crate::model_registry::DefaultModelSelection;
pub use crate::model_set::{
    ModelFileSpec, ModelFileState, ModelRole, ModelSet, ModelSetStatus, model_set_status,
    model_set_status_probed, validate_model_file_name, validate_model_files,
    validate_model_files_probed,
};
pub use crate::model_source::{
    MANIFEST_FILE_NAME, ManifestFile, ModelManifest, ModelRequest, ModelSource, ModelSourceKind,
    SUPPORTED_MANIFEST_SCHEMA_VERSION,
};
// 文件身份键控的 SHA-256 校验缓存(`src/model_verify.rs`):`/api/models` 的逐文件状态、
// 公式队列的准入判定与库的两条公式加载路径共用**同一份**校验证据。
// `verification_stats` 是"第一次验证真的哈希了、之后只花一次 stat + 128 KiB 局部读"的
// 如实成本账;`force_verify_file` 是"忽略缓存、现在就重算"的唯一入口
// (`--reverify-models` 与 `POST /api/models/reverify` 用它)。
pub use crate::model_verify::{
    FileIdentity, PARTIAL_DIGEST_WINDOW_BYTES, PartialDigest, ReverifyCause, VerificationOutcome,
    VerificationStats, VerifiedModel, clear_verification_cache, force_verify_file,
    sha256_file_cached, verification_stats, verify_file, verify_sha256,
};
// 加固下载器(`docs/05` §6):库侧的**唯一**下载入口与唯一的错误分类。
// `ensure_downloaded`(可传 `None` 哈希的旧入口)已按 §6.4 删除,不保留兼容层。
pub use crate::model_store::{
    ALLOWED_DOWNLOAD_HOSTS, DEFAULT_ALLOWED_HOSTS, DEFAULT_CONNECT_TIMEOUT,
    DEFAULT_MAX_DOWNLOAD_BYTES, DEFAULT_MAX_DOWNLOAD_MB, DEFAULT_READ_TIMEOUT, DownloadBudget,
    DownloadError, DownloadObserver, DownloadRequest, MAX_REDIRECT_HOPS, NoObserver,
    available_disk_bytes, default_model_store_dir, download_model_set, download_model_set_observed,
    download_verified, require_model_hash, sha256_file, verify_existing_file,
};
pub use crate::ocr::config::{ModelConfig, RecognizeOptions, RecognizerConfig};
pub use crate::ocr::pipeline::{
    config::{EngineConfig, GlobalConfig},
    rapid_structure::{PipelineProviderResolutions, RapidOcr, RapidOcrEngine},
};
pub use crate::ocr::rec::recognizer::BatchRecord;
pub use crate::ocr::types::{
    AlignStatus, LineResult, RecognizeOutput, WordBox, WordInfo, WordType,
};
pub use crate::output::html::sanitize_table_html;
pub use crate::output::html::{
    ReportMode, relative_image_name, render_output_report, render_report,
};
pub use crate::output::json::{OcrJsonItem, OcrTableItem, to_output_items, to_output_json};
pub use crate::output::markdown::to_output_markdown;
pub use crate::output::visualize::draw_output;
pub use crate::runtime::contracts::{ModelIoProbe, TensorSpec};
pub use crate::runtime::memory::{
    MemorySample, PEAK_MEMORY_SOURCE, StageMemRecord, peak_memory_failure_reason,
    peak_memory_source, peak_working_set_bytes, probe_stage, sample_memory, tl_probe,
    tl_probe_begin, tl_probe_end,
};
pub use crate::runtime::ort_runtime::{
    LoadedModule, OrtRuntimeFingerprint, PROVIDER_DLL_NAMES, ProviderDll, is_sha256_hex,
    ort_runtime_fingerprint,
};
pub use crate::runtime::profile::{RuntimeProfile, ThreadPlan, ThreadSource};
// `resolve_execution_providers` 与 `format_provider_preference` 是 serve 侧启动期
// 校验运行配置(§7.5/§7.6)时**必须复用**的两个既有实现:前者给出"provider 名称/
// feature 是否成立 + 运行库是否可用"的唯一判定,后者给出 provider 的唯一展示文本。
// 导出的目的是让 `rapidstruct serve` 不另写一套措辞(docs/05 §7.5 第 3 条)。
pub use crate::runtime::provider::{
    ProviderResolution, ResolvedExecutionProvider, format_provider_preference, ort_runtime_version,
    resolve_execution_providers,
};
// 会话类型仍然对外可见,但公开面上只能**用凭证开会话**(`OrtSession::open_verified`):
// 不经凭证的那条 opener 已收回 crate 内部、且只在测试构建里存在(复审 P1-2)。
pub use crate::runtime::session::OrtSession;
pub use crate::runtime::timing::{LedgerConservation, LedgerShares, TimingLedger};
// 表格识别域(`src/table/`)在 `lib.rs` 里是**私有** `mod table;`(E9 接线前不对外承诺
// 稳定 API),但 `src/bin/` 的评测二进制必须能构造结构会话、跑解码器并发射 HTML。
// 这里逐个列出**评测真正需要**的项,而不是 `pub use crate::table::*`:
// 通配导出会让"评测需要什么"变成"模块里有什么",阶段 7 的 API 清理门槛也就失去意义。
pub use crate::table::cell_content_backfill::{
    BackfillOutcome, BackfillSource, CellMatchKind, CellRecognizer, TABLE_MATCH_MIN_IOU,
    TextConfidence, TextLine, axis_aligned_bbox, backfill, bbox_to_quad, join_line_texts,
    match_cells, match_cells_with_min_iou, match_cells_with_offset, rectangle_distance,
    rectangle_iou,
};
pub use crate::table::decode::{
    CellSlot, GridCoverage, GridSize, LogicCell, SOS_CLASS_INDEX, StructureNode, StructureResult,
    StructureTermination, StructureVocabulary, TableShape, TokenStep, argmax_structure,
    decode_logic_points, decode_token_steps, eos_class_index, is_blank_polygon, parse_cell_tag,
    polygon_to_bbox, rescale_polygon, rescale_ratios, tokens_to_structure,
};
pub use crate::table::emitter::{
    RenderedTable, StructureConfidence, StructureDegradation, TextPolicy, emit_html, emit_markdown,
    emit_table_html, structure_degradations,
};
pub use crate::table::ocr_resolution::TableOcrResolution;
pub use crate::table::preprocess::{
    TABLE_STRUCTURE_MEAN, TABLE_STRUCTURE_SCALE, TABLE_STRUCTURE_STD, TableCanvas,
    resize_dimensions, table_structure_input,
};
pub use crate::table::structure::{
    TABLE_STRUCTURE_SIDE_LEN, TableStructureConfig, TableStructureContract,
    TableStructureModelInfo, TableStructureSession, validate_table_structure_contract,
};

/// 四边形(左上、右上、右下、左下)。
pub type Quad = [[f32; 2]; 4];