refactor: 抽象解耦推理引擎并重构为多Crate工作空间架构
- 移除 核心层与 tract/Tensor 的强耦合,前/后处理全线转用标准 ndarray - 针对 OCR 与目标检测(Det)分别设计独立的强类型输出小枚举(OcrOutput/DetOutput) - 利用 Trait 关联类型(Associated Type)InferenceEngine,OcrEngine,DetEngine 统一接口,实现多后端解耦 - 引入 thiserror 库,建立完备的强类型错误处理机制(DdddError/Result) - 完成项目结构初拆,剥离为 ddddocr-core 和 ddddocr-tract
This commit is contained in:
37
ddddocr-core/src/lib.rs
Normal file
37
ddddocr-core/src/lib.rs
Normal file
@@ -0,0 +1,37 @@
|
||||
mod algo;
|
||||
pub mod error;
|
||||
pub mod models;
|
||||
pub mod utils;
|
||||
|
||||
pub use crate::algo::{SlideResult, Slider};
|
||||
use crate::error::Result;
|
||||
pub use crate::models::det::{DetBuilder, DetectionResult, Detector};
|
||||
pub use crate::models::ocr::{Ocr, OcrBuilder, OcrResult};
|
||||
pub use models::ocr::metadata::ModelMetadata;
|
||||
// DetSession
|
||||
|
||||
pub enum OcrOutput {
|
||||
Indices(ndarray::Array1<i64>), // 拥有完整所有权的 1维数组,可任意传递和返回
|
||||
Logits(ndarray::Array2<f32>),
|
||||
}
|
||||
/// 2. 目标检测专属的、编译期安全的输出枚举
|
||||
pub enum DetOutput {
|
||||
Detection(ndarray::Array3<f32>), // 拥有完整所有权的 2维矩阵,可任意传递和返回
|
||||
}
|
||||
|
||||
/// 核心层定义的统一推理引擎接口。
|
||||
/// 未来的 ddddocr-tract 和 ddddocr-ort 都必须实现这个 Trait
|
||||
|
||||
pub trait InferenceEngine {
|
||||
/// 关联类型:具体的 Session 需要声明自己到底产出什么枚举
|
||||
type Output;
|
||||
fn inference(&self, input_array: ndarray::Array4<f32>) -> Result<Self::Output>;
|
||||
}
|
||||
|
||||
pub trait OcrEngine: InferenceEngine<Output = OcrOutput> {
|
||||
fn metadata(&self) -> &ModelMetadata;
|
||||
}
|
||||
|
||||
pub trait DetEngine: InferenceEngine<Output = DetOutput> {}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user