From 6996c14f7b7ead06f8a38af8b62063e0165135a4 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Wed, 20 Mar 2024 10:21:02 +0800
Subject: [PATCH] test4j 优化

---
 src/main/java/org/springblade/modules/test4j/Test4jController.java |   40 +++++++++++--
 src/main/java/org/springblade/modules/test4j/util/Test4jUtil.java  |   85 ++++++++++++++++++++++++++++
 2 files changed, 119 insertions(+), 6 deletions(-)

diff --git a/src/main/java/org/springblade/modules/test4j/Test4jController.java b/src/main/java/org/springblade/modules/test4j/Test4jController.java
index 54ffb4a..7aced56 100644
--- a/src/main/java/org/springblade/modules/test4j/Test4jController.java
+++ b/src/main/java/org/springblade/modules/test4j/Test4jController.java
@@ -2,8 +2,11 @@
 
 import io.swagger.annotations.Api;
 import lombok.AllArgsConstructor;
+import net.sourceforge.tess4j.ITesseract;
 import net.sourceforge.tess4j.Tesseract;
+import net.sourceforge.tess4j.TesseractException;
 import org.springblade.core.tool.api.R;
+import org.springblade.modules.test4j.util.Test4jUtil;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -11,6 +14,11 @@
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
 
 @RestController
 @AllArgsConstructor
@@ -20,17 +28,37 @@
 
 	@PostMapping("/read-id")
 	public R readText(@RequestParam("file") MultipartFile file) {
-		// 在这里添加识别文本的代码,例如Tesseract OCR
-		Tesseract tesseract = new Tesseract();
+		try {
+			BufferedImage grayscaleImage = grayscale(ImageIO.read(file.getInputStream()));
+			String text = recognizeText(grayscaleImage);
+			return R.data(text);
+		} catch (IOException e) {
+			e.printStackTrace();
+			return null;
+		}
+	}
+
+	public BufferedImage grayscale(BufferedImage image) {
+		int width = image.getWidth();
+		int height = image.getHeight();
+		BufferedImage result = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
+		Graphics g = result.getGraphics();
+		g.drawImage(image, 0, 0, null);
+		g.dispose();
+		return result;
+	}
+
+	public String recognizeText(BufferedImage image) {
+		ITesseract tesseract = new Tesseract();
 		// 设置Tesseract的路径
 		tesseract.setDatapath("F:\\test4jdata");
 		// 设置为中文简体
 		tesseract.setLanguage("chi_sim");
 		try {
-			String text = tesseract.doOCR(ImageIO.read(file.getInputStream()));
-			return R.data(text);
-		} catch (Exception e) {
-			return R.data(e.getMessage());
+			return tesseract.doOCR(image);
+		} catch (TesseractException e) {
+			e.printStackTrace();
+			return null;
 		}
 	}
 }
diff --git a/src/main/java/org/springblade/modules/test4j/util/Test4jUtil.java b/src/main/java/org/springblade/modules/test4j/util/Test4jUtil.java
new file mode 100644
index 0000000..40752e1
--- /dev/null
+++ b/src/main/java/org/springblade/modules/test4j/util/Test4jUtil.java
@@ -0,0 +1,85 @@
+package org.springblade.modules.test4j.util;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 身份证信息读取工具
+ */
+public class Test4jUtil {
+	/**
+	 * 去掉字符串里的非中文字符
+	 *
+	 * @param inputString 字符串
+	 * @return 中文字符串
+	 */
+	public static String removeNonChinese(String inputString) {
+		// 匹配非汉字字符的正则表达式
+		String regex = "[^\u4E00-\u9FA5]";
+		Pattern pattern = Pattern.compile(regex);
+		Matcher matcher = pattern.matcher(inputString);
+		// 替换非汉字字符为空格
+		return matcher.replaceAll("");
+	}
+
+	/**
+	 * 提取出生日期
+	 *
+	 * @param inputString 字符串
+	 * @return 出生日期
+	 */
+	private static String extractBirthDate(String inputString) {
+		// 匹配日期格式的正则表达式
+		String regex = "(\\d{4}年\\d{2}月\\d{2}日)";
+		Pattern pattern = Pattern.compile(regex);
+		Matcher matcher = pattern.matcher(inputString);
+		// 提取匹配到的日期
+		if (matcher.find()) {
+			return matcher.group(1);
+		} else {
+			return "未找到日期";
+		}
+	}
+
+	/**
+	 * 截取指定字符
+	 *
+	 * @param inputString 字符串
+	 * @param indexStart  开始Index
+	 * @return 截取的字符串
+	 */
+	public static String getStringByIndex(String inputString, int indexStart) {
+		return getStringByIndex(inputString, indexStart, -1);
+	}
+
+	/**
+	 * 截取指定字符
+	 *
+	 * @param inputString 字符串
+	 * @param indexStart  开始Index
+	 * @param size        截取的字符个数
+	 * @return 截取的字符串
+	 */
+	public static String getStringByIndex(String inputString, int indexStart, int size) {
+		// 去除字符串两端的空白字符
+		String trimmedString = inputString.trim();
+		// 将字符串以空白字符分割
+		StringBuilder res = new StringBuilder();
+		String[] words = trimmedString.split("\\s+");
+		int length = words.length;
+		int contentSize = indexStart + size;
+		if (length > indexStart) {
+			int index = length;
+			if (size > 0 && length > contentSize) {
+				index = contentSize;
+			}
+			for (int i = indexStart; i < index; i++) {
+				res.append(words[i]);
+			}
+		}
+		return res.toString();
+	}
+
+
+
+}

--
Gitblit v1.9.3