欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 记录Java Tess4j开发身份证照片识别姓名和身份证号

记录Java Tess4j开发身份证照片识别姓名和身份证号

2025/2/25 11:15:14 来源:https://blog.csdn.net/u011314083/article/details/144221342  浏览:    关键词:记录Java Tess4j开发身份证照片识别姓名和身份证号
  • 操作系统:MacOS

一、安装Tesseract OCR

  • brew安装5.x版本:brew install tesseract
  • 下载中文语音包放到data文件夹:/usr/local/share/tessdata
  • 查看版本:tesseract --version
  • 查看安装的语言包:tesseract --list-langs

二、Java编码

  • 引入tess4j
<dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>5.13.0</version>
</dependency>
  • 编码
import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.util.ImageHelper;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;public class IDCardOCR {public static void main(String[] args) {// 图片路径String imagePath = "/Users/qihang/Downloads/sfz1.jpg";// 创建 Tesseract OCR 引擎ITesseract instance = new Tesseract();// 设置 Tesseract 路径,Tesseract 必须已安装并且可通过命令行访问instance.setDatapath("/usr/local/share/tessdata"); // 设置 tesseract 数据文件夹路径instance.setLanguage("chi_sim");try {// 读取身份证图片BufferedImage img = ImageIO.read(new File(imagePath));// 可以对图像进行一些预处理来提高识别效果img = ImageHelper.convertImageToGrayscale(img); // 转为灰度图像// 识别图像中的文本String result = instance.doOCR(img);// 输出识别结果System.out.println("识别结果: ");System.out.println(result);// 使用正则表达式提取身份证号码和姓名String name = extractName(result);String idNumber = extractIDNumber(result);// 输出提取结果System.out.println("姓名: " + name);System.out.println("身份证号码: " + idNumber);} catch (Exception e) {e.printStackTrace();}}// 清洗文本,移除多余的空格和符号public static String cleanText(String text) {// 替换掉非中文字符、数字和不必要的空格text = text.replaceAll("[^\\u4e00-\\u9fa5]", "");  // 只保留中文字符return text;}// 提取姓名,假设姓名在文本的前面,长度为2到4个汉字public static String extractName(String text) {String regex = "^[\u4e00-\u9fa5]{2,4}";  // 姓名假设为2到4个汉字java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(regex);java.util.regex.Matcher matcher = pattern.matcher(text);if (matcher.find()) {return matcher.group();}return "未识别到姓名";}// 提取身份证号码(假设身份证号码是18位数字,最后一位可能是字母X)public static String extractIDNumber(String text) {String regex = "\\d{17}[\\dXx]"; // 身份证号码的正则表达式java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(regex);java.util.regex.Matcher matcher = pattern.matcher(text);if (matcher.find()) {return matcher.group();}return "未识别到身份证号码";}
}

基本能跑起来,还有很多问题,未完待续!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词