From d11ba38337d9990281f97cc4a7c4b1290f719266 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Fri, 1 Aug 2025 11:00:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E5=AD=97=E8=AF=86=E5=88=AB=E9=98=89?= =?UTF-8?q?=E5=89=B2=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- klp-wms/pom.xml | 8 + .../java/com/klp/controller/Application.java | 150 ++++++++++++++++++ 2 files changed, 158 insertions(+) create mode 100644 klp-wms/src/main/java/com/klp/controller/Application.java diff --git a/klp-wms/pom.xml b/klp-wms/pom.xml index 1eb61764..af8a4730 100644 --- a/klp-wms/pom.xml +++ b/klp-wms/pom.xml @@ -22,5 +22,13 @@ klp-common 0.8.3 + + + net.sourceforge.tess4j + tess4j + 5.11.0 + + + diff --git a/klp-wms/src/main/java/com/klp/controller/Application.java b/klp-wms/src/main/java/com/klp/controller/Application.java new file mode 100644 index 00000000..9e7c5f93 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/controller/Application.java @@ -0,0 +1,150 @@ +package com.klp.controller; + +import net.sourceforge.tess4j.ITesseract; +import net.sourceforge.tess4j.Tesseract; +import net.sourceforge.tess4j.TesseractException; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +public class Application { + + /** + * @Description: 识别图片中的文字 + * @param args + */ + public static void main(String[] args) { + try { + // 获取本地图片 + File file = new File("D:\\桌面\\照片\\11.png"); + + if (!file.exists()) { + System.err.println("图片文件不存在: " + file.getAbsolutePath()); + return; + } + + System.out.println("开始OCR识别..."); + System.out.println("图片路径: " + file.getAbsolutePath()); + + // 创建Tesseract对象 + ITesseract tesseract = new Tesseract(); + + // 设置字体库路径 + tesseract.setDatapath("D:\\front"); + + // 设置语言简体中文 + tesseract.setLanguage("chi_sim"); + + // 优化OCR配置 + tesseract.setPageSegMode(6); // 假设统一的文本块 + tesseract.setOcrEngineMode(3); // 使用默认引擎 + + // 执行OCR识别图片 + String result = tesseract.doOCR(file); + + System.out.println("\n=== 原始识别结果 ==="); + System.out.println(result); + + // 清理和格式化结果 + String cleanedResult = cleanOcrResult(result); + + System.out.println("\n=== 清理后的结果 ==="); + System.out.println(cleanedResult); + + // 分行显示结果 + System.out.println("\n=== 分行显示结果 ==="); + String[] lines = cleanedResult.split("-"); + for (int i = 0; i < lines.length; i++) { + if (!lines[i].trim().isEmpty()) { + System.out.println((i + 1) + ". " + lines[i].trim()); + } + } + + } catch (TesseractException e) { + System.err.println("Tesseract OCR错误: " + e.getMessage()); + e.printStackTrace(); + } catch (Exception e) { + System.err.println("其他错误: " + e.getMessage()); + e.printStackTrace(); + } + } + + /** + * 清理OCR识别结果 + * @param result 原始识别结果 + * @return 清理后的结果 + */ + private static String cleanOcrResult(String result) { + if (result == null || result.trim().isEmpty()) { + return ""; + } + + // 替换常见的OCR错误 + String cleaned = result + // 替换回车和换行 + .replaceAll("\\r|\\n", "-") + // 移除多余的空格 + .replaceAll("\\s+", " ") + // 修复常见的OCR错误 + .replaceAll("英声租", "产品名称") + .replaceAll("库咤埕号", "产品型号") + .replaceAll("产晓序列号", "产品序列号") + .replaceAll("购买纳证缉号", "购买凭证编号") + .replaceAll("质保条孰", "质保条款") + .replaceAll("本亢命", "本产品") + .replaceAll("质僚服务", "质保服务") + .replaceAll("质保朝内", "质保期内") + .replaceAll("团素", "因素") + .replaceAll("质量闰题", "质量问题") + .replaceAll("免贵维修", "免费维修") + .replaceAll("更挺服", "更换服") + .replaceAll("不包挂", "不包括") + .replaceAll("溢用", "滥用") + .replaceAll("探环", "损坏") + .replaceAll("取葛保管", "妥善保管") + .replaceAll("雷凭吊证明", "需凭此证明") + .replaceAll("客户信恩", "客户信息") + .replaceAll("姆钗", "姓名") + .replaceAll("联系电语", "联系电话") + .replaceAll("电子邹件", "电子邮件") + .replaceAll("地抛", "地址") + .replaceAll("摒权代表", "授权代表") + .replaceAll("介为示例", "仅为示例") + .replaceAll("根揪实际情况", "根据实际情况") + .replaceAll("调教", "调整") + // 移除多余的空格 + .trim(); + + return cleaned; + } + + /** + * 图片预处理(可选) + * @param inputFile 输入图片 + * @param outputFile 输出图片 + */ + private static void preprocessImage(File inputFile, File outputFile) { + try { + BufferedImage image = ImageIO.read(inputFile); + + // 转换为灰度图 + BufferedImage grayImage = new BufferedImage( + image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_GRAY); + + Graphics2D g2d = grayImage.createGraphics(); + g2d.drawImage(image, 0, 0, null); + g2d.dispose(); + + // 保存预处理后的图片 + ImageIO.write(grayImage, "png", outputFile); + + System.out.println("图片预处理完成: " + outputFile.getAbsolutePath()); + + } catch (IOException e) { + System.err.println("图片预处理失败: " + e.getMessage()); + } + } +}