refactor: 优化 OcrBuilder 新增通过索引范围控制有效字符集

- 修改 `charset_restrict`类型修改为Option<Vec<usize>> 并重构同名方法数据处理逻辑
- 优化 `ctc_decode_to_string` 内部复用策略计算,通过 `Option` 结构实现无限制请求的全量免检短路加速
- 新增 `CharsetRestrict`枚举新增变体`TopN(usize)` 实现通过索引范围控制有效字符集
This commit is contained in:
2026-06-13 17:01:43 +08:00
parent 0c96fbedbf
commit b7146831f7
3 changed files with 168 additions and 140 deletions

View File

@@ -9,7 +9,7 @@ use image::DynamicImage;
use std::fmt::{Display, Formatter};
// 关键点:直接使用 tract 重导出的 ndarray
use crate::charset::get_default_charset;
use crate::charset::{get_default_charset, CharsetRestrict};
use crate::models::ocr::ColorRange;
use models::det::Det;
use models::loader::ModelSession;
@@ -96,7 +96,8 @@ impl Display for DdddOcr {
impl DdddOcr {
pub fn classification(&self, img: &DynamicImage) -> Result<String> {
match &self.runtime {
Runtime::Ocr(s) => s.predict(img).run(),
// Runtime::Ocr(s) => s.predict(img).run(),
Runtime::Ocr(s) => s.builder().charset_restrict(&CharsetRestrict::Digit).predict(img),
Runtime::Det(_) => Err(anyhow::anyhow!("当前模型是检测模型,无法执行 OCR")),
}
}