refactor(ocr): 优化 preprocess_image 逻辑实现,修复部分BUG
- 优化 `OcrBuilder` 重名名为 `OcrPredictor` - 优化 `OcrPredictor` 的 `preprocess_image` 支持多种图像管道。 - 修复 `OcrPredictor` 引发的并发BUG。
This commit is contained in:
73
src/lib.rs
73
src/lib.rs
@@ -10,7 +10,6 @@ use std::fmt::{Display, Formatter};
|
||||
|
||||
// 关键点:直接使用 tract 重导出的 ndarray
|
||||
use crate::charset::{ CharRestrict};
|
||||
use crate::models::ocr::ColorRange;
|
||||
use models::det::Det;
|
||||
use models::loader::ModelSession;
|
||||
use models::ocr::Ocr;
|
||||
@@ -98,9 +97,9 @@ impl DdddOcr {
|
||||
pub fn classification(&self, img: &DynamicImage) -> Result<String> {
|
||||
match &self.runtime {
|
||||
// Runtime::Ocr(s) => s.predict(img).run(),
|
||||
Runtime::Ocr(s) => s.builder().predict(img),
|
||||
// Runtime::Ocr(s) => s.builder().charset_restrict(&CharRestrict::Digit).predict(img),
|
||||
// Runtime::Ocr(s) => s.builder().color_filter(&ColorPreset::Custom(vec![
|
||||
Runtime::Ocr(s) => s.predictor().predict(img),
|
||||
// Runtime::Ocr(s) => s.predictor().charset_restrict(&CharRestrict::Digit).predict(img),
|
||||
// Runtime::Ocr(s) => s.predictor().color_filter(&ColorPreset::Custom(vec![
|
||||
// // 错误:下界 (82, 221, 14) 没问题
|
||||
// // 但上界的 H 通道写成了 240,超过了 180 的法定上限!
|
||||
// HsvRange::new((82, 221, 14), (240, 203, 82)),
|
||||
@@ -116,39 +115,39 @@ impl DdddOcr {
|
||||
}
|
||||
}
|
||||
|
||||
struct Classification {}
|
||||
#[derive(Debug)]
|
||||
struct ClassificationBuilder {
|
||||
img: DynamicImage,
|
||||
png_fix: bool,
|
||||
color_filter_colors: Option<Vec<ColorRange>>,
|
||||
color_filter_custom_ranges: Option<Vec<ColorRange>>,
|
||||
}
|
||||
impl ClassificationBuilder {
|
||||
pub fn new(img: DynamicImage) -> Self {
|
||||
ClassificationBuilder {
|
||||
img,
|
||||
png_fix: false,
|
||||
color_filter_colors: None,
|
||||
color_filter_custom_ranges: None,
|
||||
}
|
||||
}
|
||||
pub fn png_fix(mut self, value: bool) -> Self {
|
||||
self.png_fix = value;
|
||||
self
|
||||
}
|
||||
pub fn color_filter_colors(mut self, value: Vec<ColorRange>) -> Self {
|
||||
self.color_filter_colors = Some(value);
|
||||
self
|
||||
}
|
||||
pub fn color_filter_custom_ranges(mut self, value: Vec<ColorRange>) -> Self {
|
||||
self.color_filter_custom_ranges = Some(value);
|
||||
self
|
||||
}
|
||||
pub fn build(self) -> Classification {
|
||||
Classification {}
|
||||
}
|
||||
}
|
||||
// struct Classification {}
|
||||
// #[derive(Debug)]
|
||||
// struct ClassificationBuilder {
|
||||
// img: DynamicImage,
|
||||
// png_fix: bool,
|
||||
// color_filter_colors: Option<Vec<ColorRange>>,
|
||||
// color_filter_custom_ranges: Option<Vec<ColorRange>>,
|
||||
// }
|
||||
// impl ClassificationBuilder {
|
||||
// pub fn new(img: DynamicImage) -> Self {
|
||||
// ClassificationBuilder {
|
||||
// img,
|
||||
// png_fix: false,
|
||||
// color_filter_colors: None,
|
||||
// color_filter_custom_ranges: None,
|
||||
// }
|
||||
// }
|
||||
// pub fn png_fix(mut self, value: bool) -> Self {
|
||||
// self.png_fix = value;
|
||||
// self
|
||||
// }
|
||||
// pub fn color_filter_colors(mut self, value: Vec<ColorRange>) -> Self {
|
||||
// self.color_filter_colors = Some(value);
|
||||
// self
|
||||
// }
|
||||
// pub fn color_filter_custom_ranges(mut self, value: Vec<ColorRange>) -> Self {
|
||||
// self.color_filter_custom_ranges = Some(value);
|
||||
// self
|
||||
// }
|
||||
// pub fn build(self) -> Classification {
|
||||
// Classification {}
|
||||
// }
|
||||
// }
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
|
||||
Reference in New Issue
Block a user