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

