From 044a2269af3e803eb1d82ee61062586274b0406d Mon Sep 17 00:00:00 2001 From: JR <3573153686@qq.com> Date: Sat, 2 Aug 2025 10:38:28 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20OCR=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WmsPurchasePlanController.java | 14 +++++++++++ .../com/klp/service/ITesseractOcrService.java | 2 +- .../service/impl/TesseractOcrServiceImpl.java | 24 ++++++++++++++----- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/klp-wms/src/main/java/com/klp/controller/WmsPurchasePlanController.java b/klp-wms/src/main/java/com/klp/controller/WmsPurchasePlanController.java index 15b9ebe5..afaf615f 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsPurchasePlanController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsPurchasePlanController.java @@ -2,7 +2,9 @@ package com.klp.controller; import java.util.List; import java.util.Arrays; +import java.util.Map; +import com.klp.service.ITesseractOcrService; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; @@ -35,6 +37,7 @@ import com.klp.common.core.page.TableDataInfo; public class WmsPurchasePlanController extends BaseController { private final IWmsPurchasePlanService iWmsPurchasePlanService; + private final ITesseractOcrService iTesseractOcrService; /** * 新增采购计划(含明细) @@ -52,6 +55,17 @@ public class WmsPurchasePlanController extends BaseController { return R.ok(planVo); } + /** + * 识别图片中的文字 + * @param request 图片地址 + * @return 识别出的文字 + */ + @PostMapping("/recognizeText") + public R recognize(@RequestBody Map request) { + String imgUrl = request.get("imgUrl"); + return R.ok(iTesseractOcrService.recognizeText(imgUrl)); + } + /** * 查询采购计划主列表 */ diff --git a/klp-wms/src/main/java/com/klp/service/ITesseractOcrService.java b/klp-wms/src/main/java/com/klp/service/ITesseractOcrService.java index 77846c64..9b3ad1c8 100644 --- a/klp-wms/src/main/java/com/klp/service/ITesseractOcrService.java +++ b/klp-wms/src/main/java/com/klp/service/ITesseractOcrService.java @@ -7,5 +7,5 @@ public interface ITesseractOcrService { * @param imageUrl 图片URL * @return 识别结果 */ - String recognizeText(String imageUrl) throws Exception; + String recognizeText(String imageUrl); } diff --git a/klp-wms/src/main/java/com/klp/service/impl/TesseractOcrServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/TesseractOcrServiceImpl.java index dda54114..aef63eec 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/TesseractOcrServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/TesseractOcrServiceImpl.java @@ -4,12 +4,14 @@ import com.klp.common.config.TesseractConfig; import com.klp.service.ITesseractOcrService; import net.sourceforge.tess4j.ITesseract; import net.sourceforge.tess4j.Tesseract; +import net.sourceforge.tess4j.TesseractException; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; +import java.io.IOException; import java.io.InputStream; import java.net.URL; @@ -19,12 +21,17 @@ public class TesseractOcrServiceImpl implements ITesseractOcrService { @Resource private TesseractConfig tesseractConfig; @Override - public String recognizeText(String imageUrl) throws Exception { + public String recognizeText(String imageUrl){ // 读取网络图片为 BufferedImage - URL url = new URL(imageUrl); - InputStream inputStream = url.openStream(); - BufferedImage image = ImageIO.read(inputStream); - inputStream.close(); + BufferedImage image = null; + try { + URL url = new URL(imageUrl); + InputStream inputStream = url.openStream(); + image = ImageIO.read(inputStream); + inputStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } // 预处理图片 BufferedImage bufferedImage = preprocessImage(image); System.out.println("开始OCR识别..."); @@ -38,7 +45,12 @@ public class TesseractOcrServiceImpl implements ITesseractOcrService { tesseract.setPageSegMode(6); // 假设统一的文本块 tesseract.setOcrEngineMode(3); // 使用默认引擎 // 执行OCR识别图片 - String result = tesseract.doOCR(bufferedImage); + String result = null; + try { + result = tesseract.doOCR(bufferedImage); + } catch (TesseractException e) { + throw new RuntimeException(e); + } // 清理和格式化结果 String cleanedResult = cleanOcrResult(result);