java调用opencv身份证号识别详解

 更新时间:2024年03月06日 10:36:08   作者:冒泡的肥皂  
这篇文章主要为大家详细介绍了java如何调用opencv实现身份证号的识别,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

一、实现思路

1.矫正图片 这个可以参考上篇文章 Java调用opencv图片矫正

2.因为身份证大小是固定的 这里可以按照比例截取身份证号的区域

3.把截取图像用tess4j进行识别

4.效果图

二、部分代码

2.1图片剪辑

public static Mat cutRect(Mat image) {
Mat clone=image.clone();
Mat src=image.clone();

Imgproc.GaussianBlur(clone, clone, new Size(3, 3), 0, 0);
HighGui.imshow("GaussianBlur1", clone);

Imgproc.cvtColor(clone, clone,Imgproc.COLOR_BGR2GRAY);
HighGui.imshow("GRY1", clone);

int lowThresh=20;
//边缘检测
Imgproc.Canny(clone, clone,lowThresh, lowThresh*3,3);
HighGui.imshow("Canny1", clone);

List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Mat hierarchy = new Mat();

// 寻找轮廓
Imgproc.findContours(clone, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_NONE);
System.out.println("轮廓:"+contours.size());
// 找出匹配到的最大轮廓
double area = Imgproc.boundingRect(contours.get(0)).area();
int index = 0;

// 找出匹配到的最大轮廓
for (int i = 0; i < contours.size(); i++) {
    double tempArea = Imgproc.boundingRect(contours.get(i)).area();
    if (tempArea > area) {
        area = tempArea;
        index = i;
    }
}

MatOfPoint2f matOfPoint2f = new MatOfPoint2f(contours.get(index).toArray());

RotatedRect rect = Imgproc.minAreaRect(matOfPoint2f);

Mat temp = new Mat(src , rect.boundingRect());
Mat t = new Mat();
temp.copyTo(t);

HighGui.imshow("cut", temp);
return t;
}

2.2身份证提取位置

参考

public static String card(Mat mat){
    Point point1=new Point(mat.cols()*0.34,mat.rows()*0.80);
    Point point2=new Point(mat.cols()*0.34,mat.rows()*0.80);
    Point point3=new Point(mat.cols()*0.89,mat.rows()*0.91);
    Point point4=new Point(mat.cols()*0.89,mat.rows()*0.91);
    List<Point> list=new ArrayList<>();
    list.add(point1);
    list.add(point2);
    list.add(point3);
    list.add(point4);
    Mat card= shear(mat,list);
    card=ImageUtil.drawContours(card,50);
    HighGui.imshow("card", card); 
  //高斯滤波
  	Imgproc.cvtColor(card, card,Imgproc.COLOR_BGR2GRAY);
  	Imgproc.GaussianBlur(card, card, new Size(3, 3), 0, 0);
  	Imgproc.threshold(card, card, 165, 255, Imgproc.THRESH_BINARY);
	 //Imgproc.Canny(image, image,lowThresh, lowThresh*3,3);
    System.out.println(ImageUtil.getImageMessage(Mat2BufImg(card,".jpg"),"eng"));
    return null;
}

2.3图片数字识别 tess4j

语言包的下载

pom

<dependency>
  <groupId>net.sourceforge.tess4j</groupId>
  <artifactId>tess4j</artifactId>
  <version>4.5.4</version>
</dependency>
public static String getImageMessage(BufferedImage img,String language){
    String result="";
    try{
        ITesseract instance = new Tesseract();
        instance.setTessVariable("user_defined_dpi", "300");
        //语言包的位置
        File tessDataFolder = new File("E:\\tessdata-master");
        instance.setLanguage(language);
        instance.setDatapath(tessDataFolder.getAbsolutePath());
        result = instance.doOCR(img);
        System.out.println(result);
    }catch(Exception e){
    	e.printStackTrace();
    }
    return result;
}

到此这篇关于java调用opencv身份证号识别详解的文章就介绍到这了,更多相关java opencv身份证号识别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • jvm细节探索之synchronized及实现问题分析

    jvm细节探索之synchronized及实现问题分析

    这篇文章主要介绍了jvm细节探索之synchronized及实现问题分析,涉及synchronized的字节码表示,JVM中锁的优化,对象头的介绍等相关内容,具有一定借鉴价值,需要的朋友可以参考下。
    2017-11-11
  • java书店系统毕业设计 总体设计(1)

    java书店系统毕业设计 总体设计(1)

    这篇文章主要介绍了java书店系统毕业设计,第一步系统总体设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Java中可变长度参数代码详解

    Java中可变长度参数代码详解

    这篇文章主要介绍了Java中可变长度参数代码详解,涉及了实参个数可变的定义方法,数组包裹实参等几个问题,具有一定参考价值,需要的朋友可以了解下。
    2017-12-12
  • java通过jni调用opencv处理图像的方法

    java通过jni调用opencv处理图像的方法

    今天小编就为大家分享一篇java通过jni调用opencv处理图像的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • 关于Lombok @Data注解:简化Java代码的魔法棒

    关于Lombok @Data注解:简化Java代码的魔法棒

    Lombok库通过@Data注解自动生成常见的样板代码如getter、setter、toString等,极大减少代码量,提高开发效率,@Data注解集成了@ToString、@EqualsAndHashCode、@Getter、@Setter、@RequiredArgsConstructor等注解的功能
    2024-10-10
  • java 在file的尾部添加数据的两种方法总结

    java 在file的尾部添加数据的两种方法总结

    这篇文章主要介绍了java 在file的尾部添加数据的两种方法总结的相关资料,这里提供了两种在file尾部添加数据的方法,希望能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • Idea 2020.2 创建web、Spring项目的教程图解

    Idea 2020.2 创建web、Spring项目的教程图解

    这篇文章主要介绍了Idea 2020.2 创建web、Spring项目的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java中的服务发现与负载均衡及Eureka与Ribbon的应用小结

    Java中的服务发现与负载均衡及Eureka与Ribbon的应用小结

    这篇文章主要介绍了Java中的服务发现与负载均衡:Eureka与Ribbon的应用,通过使用Eureka和Ribbon,我们可以在Java项目中实现高效的服务发现和负载均衡,需要的朋友可以参考下
    2024-08-08
  • jdbc和mybatis的流式查询使用方法

    jdbc和mybatis的流式查询使用方法

    有些时候我们所需要查询的数据量比较大,但是jvm内存又是有限制的,数据量过大会导致内存溢出。这个时候就可以使用流式查询,本文就主要介绍了jdbc和mybatis的流式查询,感兴趣的可以了解一下
    2021-11-11
  • SpringBoot使用spring.factories加载默认配置的实现代码

    SpringBoot使用spring.factories加载默认配置的实现代码

    在日常开发过程中,发布一些产品或者框架时,会遇到某些功能需要一些配置才能正常运行,这时我们需要的提供默认配置项,同时用户也能覆盖进行个性化
    2024-06-06

最新评论