feat(ocr,det,slide): 重构项目结构
- 优化 规范化模型目录 - 重构 Ocr,Detector,Slide 拆分规范化
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
use ddddocr_rs::{Ocr, Slider, Detector, ModelMetadata, OcrSession, DetBuilder, DetSession}; // 假设你的包名是这个
|
||||
use ddddocr_rs::models::det::DetectionResult;
|
||||
use ddddocr_rs::{DetBuilder, DetSession, Detector, ModelMetadata, Ocr, OcrSession, Slider}; // 假设你的包名是这个
|
||||
use image::{DynamicImage, Rgb};
|
||||
use std::fs;
|
||||
use std::path::Path;
|
||||
use ddddocr_rs::models::det::DetectionResult;
|
||||
mod char_slice;
|
||||
use char_slice::CHARSET_BETA;
|
||||
use ddddocr_rs::models::ocr::metadata::{Normalization, Resize};
|
||||
|
||||
fn load_image<P: AsRef<Path>>(path: P) -> anyhow::Result<image::DynamicImage> {
|
||||
// 1. 先将泛型转为具体的 &Path 引用
|
||||
@@ -16,8 +19,8 @@ fn load_image<P: AsRef<Path>>(path: P) -> anyhow::Result<image::DynamicImage> {
|
||||
}
|
||||
/// 将检测结果绘制在图像上并保存
|
||||
fn save_debug_image(
|
||||
dynamic_img: &DynamicImage, // 【优化点 1】直接传入解码好的引用,拒绝重复解码
|
||||
bboxes: &[DetectionResult], // 【修改点 1】类型改为自定义结构体切片
|
||||
dynamic_img: &DynamicImage, // 【优化点 1】直接传入解码好的引用,拒绝重复解码
|
||||
bboxes: &[DetectionResult], // 【修改点 1】类型改为自定义结构体切片
|
||||
output_path: &str,
|
||||
) -> anyhow::Result<()> {
|
||||
// 删除了原本的 let dynamic_img = image::load_from_memory(image_bytes)?;
|
||||
@@ -60,17 +63,29 @@ fn save_debug_image(
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn test_full_classification() {
|
||||
// 1. 初始化模型
|
||||
let ocr = OcrSession::new("D:\\CNWei\\CNW\\Rust\\ddddocr-rs\\models\\common_sml2h3_f32.onnx",ModelMetadata::from_builtin_beta()).expect("模型加载失败");
|
||||
let ocr = OcrSession::new(
|
||||
"D:\\CNWei\\CNW\\Rust\\ddddocr-rs\\models\\common_sml2h3_f32.onnx",
|
||||
ModelMetadata::from_static_slice(
|
||||
CHARSET_BETA,
|
||||
false,
|
||||
Resize::DynamicWidth(64),
|
||||
1,
|
||||
Normalization::MinusOneToOne,
|
||||
),
|
||||
)
|
||||
.expect("模型加载失败");
|
||||
|
||||
// 2. 加载测试图片
|
||||
let img = image::open("samples/code2.png").expect("测试图片不存在");
|
||||
|
||||
// 3. 执行识别
|
||||
let result = Ocr::new(&ocr).predict(&img).expect("识别过程出错").into_text();
|
||||
let result = Ocr::new(&ocr)
|
||||
.predict(&img)
|
||||
.expect("识别过程出错")
|
||||
.into_text();
|
||||
|
||||
println!("识别结果: {}", result);
|
||||
assert!(!result.is_empty());
|
||||
@@ -101,10 +116,7 @@ fn test_det_load() -> anyhow::Result<()> {
|
||||
|
||||
for (i, bbox) in bboxes.iter().enumerate() {
|
||||
// 【修改点 3】将原来的 bbox[0].. 索引访问改为结构体字段访问
|
||||
println!(
|
||||
"目标 [{}]: x1={}, y1={}, x2={}, y2={}, 分数={:.4}, 类别ID={}",
|
||||
i, bbox.x1, bbox.y1, bbox.x2, bbox.y2, bbox.score, bbox.class_id
|
||||
);
|
||||
println!("目标 [{}]: {}", i, bbox);
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
@@ -129,9 +141,7 @@ fn test_real_slide_match() {
|
||||
|
||||
// 3. 打印结果
|
||||
println!("-------------------------------------------");
|
||||
println!("滑块匹配测试结果:");
|
||||
println!("检测坐标: [x: {}, y: {}]", result.target_x, result.target_y);
|
||||
println!("置信度: {:.4}", result.confidence);
|
||||
println!("{}", result);
|
||||
println!("耗时: {:?}", duration);
|
||||
println!("-------------------------------------------");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user