From 61e25b581a4be8e23933808c185cd01c87877fb7 Mon Sep 17 00:00:00 2001 From: Sicko Date: Mon, 1 Jun 2026 17:21:36 +0800 Subject: [PATCH] =?UTF-8?q?fix(translator):=20=E4=BF=AE=E5=A4=8D=20Recogni?= =?UTF-8?q?tionTranslator=20=E4=B8=AD=20BGR/RGB=20=E9=80=9A=E9=81=93?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: - cv2.imread() 返回 BGR 通道顺序 - DJL Image.toNDArray(manager, Image.Flag.COLOR) 返回 RGB 通道顺序 - 通道不对齐导致归一化结果与 Python 参考实现偏差显著 根本原因: - 模型训练时使用 OpenCV 读取图像,输入为 BGR 格式 - DJL 未做通道转换直接送入模型,导致推理结果异常 - 实测均值偏差约 1.0(预期 < 0.02) 修复方案: - 在 toNDArray() 后添加 NDArray.flip(2),翻转通道顺序 RGB → BGR - flip 在 resize 之前执行,保证预处理流程与 Python 一致 验证结果: Python : mean=-0.4013394 min=-3.0466321 max=2.1347151 Java : mean=-0.4169087 min=-2.9247181 max=2.1143961 Δmean : 0.016(可接受范围,来自 resize 插值算法差异) 影响范围:RecognitionTranslator#processInput --- .../ocr/model/plate/translator/CRNNPlateRecTranslator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ocr/src/main/java/cn/smartjavaai/ocr/model/plate/translator/CRNNPlateRecTranslator.java b/ocr/src/main/java/cn/smartjavaai/ocr/model/plate/translator/CRNNPlateRecTranslator.java index 1614bc7..7d3a826 100644 --- a/ocr/src/main/java/cn/smartjavaai/ocr/model/plate/translator/CRNNPlateRecTranslator.java +++ b/ocr/src/main/java/cn/smartjavaai/ocr/model/plate/translator/CRNNPlateRecTranslator.java @@ -31,7 +31,8 @@ public NDList processInput(TranslatorContext ctx, Image input) { // Resize to (168, 48) NDArray array = input.toNDArray(manager, Image.Flag.COLOR); array = NDImageUtils.resize(array, 168, 48); - + // RGB → BGR,与 cv2 对齐 + array = array.flip(2); // Normalize array = array.toType(DataType.FLOAT32, false) .div(255f)