java調(diào)用opencv身份證號識別詳解
一、實(shí)現(xiàn)思路
1.矯正圖片 這個(gè)可以參考上篇文章 Java調(diào)用opencv圖片矯正
2.因?yàn)樯矸葑C大小是固定的 這里可以按照比例截取身份證號的區(qū)域
3.把截取圖像用tess4j進(jìn)行識別
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圖片數(shù)字識別 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; }
到此這篇關(guān)于java調(diào)用opencv身份證號識別詳解的文章就介紹到這了,更多相關(guān)java opencv身份證號識別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
jvm細(xì)節(jié)探索之synchronized及實(shí)現(xiàn)問題分析
這篇文章主要介紹了jvm細(xì)節(jié)探索之synchronized及實(shí)現(xiàn)問題分析,涉及synchronized的字節(jié)碼表示,JVM中鎖的優(yōu)化,對象頭的介紹等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-11-11java書店系統(tǒng)畢業(yè)設(shè)計(jì) 總體設(shè)計(jì)(1)
這篇文章主要介紹了java書店系統(tǒng)畢業(yè)設(shè)計(jì),第一步系統(tǒng)總體設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10java通過jni調(diào)用opencv處理圖像的方法
今天小編就為大家分享一篇java通過jni調(diào)用opencv處理圖像的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08關(guān)于Lombok @Data注解:簡化Java代碼的魔法棒
Lombok庫通過@Data注解自動(dòng)生成常見的樣板代碼如getter、setter、toString等,極大減少代碼量,提高開發(fā)效率,@Data注解集成了@ToString、@EqualsAndHashCode、@Getter、@Setter、@RequiredArgsConstructor等注解的功能2024-10-10java 在file的尾部添加數(shù)據(jù)的兩種方法總結(jié)
這篇文章主要介紹了java 在file的尾部添加數(shù)據(jù)的兩種方法總結(jié)的相關(guān)資料,這里提供了兩種在file尾部添加數(shù)據(jù)的方法,希望能幫助到大家,需要的朋友可以參考下2017-09-09Idea 2020.2 創(chuàng)建web、Spring項(xiàng)目的教程圖解
這篇文章主要介紹了Idea 2020.2 創(chuàng)建web、Spring項(xiàng)目的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08Java中的服務(wù)發(fā)現(xiàn)與負(fù)載均衡及Eureka與Ribbon的應(yīng)用小結(jié)
這篇文章主要介紹了Java中的服務(wù)發(fā)現(xiàn)與負(fù)載均衡:Eureka與Ribbon的應(yīng)用,通過使用Eureka和Ribbon,我們可以在Java項(xiàng)目中實(shí)現(xiàn)高效的服務(wù)發(fā)現(xiàn)和負(fù)載均衡,需要的朋友可以參考下2024-08-08SpringBoot使用spring.factories加載默認(rèn)配置的實(shí)現(xiàn)代碼
在日常開發(fā)過程中,發(fā)布一些產(chǎn)品或者框架時(shí),會遇到某些功能需要一些配置才能正常運(yùn)行,這時(shí)我們需要的提供默認(rèn)配置項(xiàng),同時(shí)用戶也能覆蓋進(jìn)行個(gè)性化2024-06-06