refactor: 优化Det算法
- 优化 demo_postprocess,nms算法 - 新增 Slide 滑块识别 - 更新 Cargo.toml 依赖项
This commit is contained in:
@@ -1,7 +1,19 @@
|
||||
use std::fs;
|
||||
use std::path::Path;
|
||||
use image::Rgb;
|
||||
use ddddocr_rs::{DdddOcr, DdddOcrBuilder}; // 假设你的包名是这个
|
||||
use ddddocr_rs::slide_model::Slide;
|
||||
fn load_image<P: AsRef<Path>>(path: P) -> anyhow::Result<image::DynamicImage> {
|
||||
// 1. 先将泛型转为具体的 &Path 引用
|
||||
let path_ref = path.as_ref();
|
||||
|
||||
// 2. 调用 open 时传入引用(image::open 支持 AsRef<Path>)
|
||||
image::open(path_ref)
|
||||
.map_err(|e| {
|
||||
// 3. 此时 path_ref 依然有效,可以安全地在闭包中使用
|
||||
anyhow::anyhow!("无法加载图片 {:?}: {}", path_ref, e)
|
||||
})
|
||||
}
|
||||
/// 将检测结果绘制在图像上并保存
|
||||
fn save_debug_image( image_bytes: &[u8], bboxes: &Vec<Vec<i32>>, output_path: &str) -> anyhow::Result<()> {
|
||||
|
||||
@@ -73,4 +85,37 @@ fn test_det_load()->anyhow::Result<()>{
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn test_real_slide_match() {
|
||||
let engine = Slide::new();
|
||||
|
||||
// 1. 加载你准备好的测试图
|
||||
// 假设图片放在项目根目录下的 assets 文件夹
|
||||
let target_img = load_image("samples/hua.png")
|
||||
.expect("请确保 samples/hua.png 存在");
|
||||
let bg_img = load_image("samples/huatu.png")
|
||||
.expect("请确保 samples/huatu.png 存在");
|
||||
|
||||
// 2. 执行匹配
|
||||
// 如果是那种带有明显阴影边缘的复杂滑块,建议 simple_target 传 false
|
||||
let start = std::time::Instant::now();
|
||||
let result = engine.slide_match(&target_img, &bg_img, false)
|
||||
.expect("Slide match 执行失败");
|
||||
let duration = start.elapsed();
|
||||
|
||||
// 3. 打印结果
|
||||
println!("-------------------------------------------");
|
||||
println!("滑块匹配测试结果:");
|
||||
println!("检测坐标: [x: {}, y: {}]", result.target_x, result.target_y);
|
||||
println!("置信度: {:.4}", result.confidence);
|
||||
println!("耗时: {:?}", duration);
|
||||
println!("-------------------------------------------");
|
||||
|
||||
// 验证基本逻辑:坐标不应为 0 (除非匹配失败)
|
||||
assert_eq!(result.target_x, 237);
|
||||
assert_eq!(result.target_y, 77);
|
||||
assert!(result.confidence > 0.0);
|
||||
}
|
||||
Reference in New Issue
Block a user