javaCV图像处理系列:

一、实现的功能

1、车牌检测(支持图片中含有单车牌和多车牌检测)

2、车牌定位

3、车牌字符识别

4、千份测试单次检测识别完成平均耗时39ms,准确率99.9%

二、项目维护

github项目地址:https://github.com/eguid/vlpr4j

注意:由于授权协议具有传染性,本项目采用GPL v2.0与ODL(Open Database License)授权协议,本项目不适用于任何商业性行为,包括销售或者赠送。

三、使用方式

 
package cc.eguid.charsocr;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferByte;
import java.awt.image.SampleModel;
import java.math.BigDecimal;
import java.util.Vector; import org.bytedeco.javacpp.opencv_imgcodecs;
import org.bytedeco.javacpp.Pointer;
import org.bytedeco.javacpp.opencv_core;
import org.bytedeco.javacpp.opencv_core.CvType;
import org.bytedeco.javacpp.opencv_core.CvTypeInfo;
import org.bytedeco.javacpp.opencv_core.Mat; import cc.eguid.charsocr.core.CharsRecognise;
import cc.eguid.charsocr.core.PlateDetect; /**
* 车牌识别
* @author eguid
*
*/
public class PlateRecognition {
static PlateDetect plateDetect =null;
static CharsRecognise cr=null;
static{
plateDetect=new PlateDetect();
plateDetect.setPDLifemode(true);
cr = new CharsRecognise();
} /**
* 单个车牌识别
* @param mat
* @return
*/
public static String plateRecognise(Mat mat){
Vector<Mat> matVector = new Vector<Mat>(1);
if (0 == plateDetect.plateDetect(mat, matVector)) {
if(matVector.size()>0){
return cr.charsRecognise(matVector.get(0));
}
}
return null;
}
/**
* 多车牌识别
* @param mat
* @return
*/
public static String[] mutiPlateRecognise(Mat mat){
PlateDetect plateDetect = new PlateDetect();
plateDetect.setPDLifemode(true);
Vector<Mat> matVector = new Vector<Mat>(10);
if (0 == plateDetect.plateDetect(mat, matVector)) {
CharsRecognise cr = new CharsRecognise();
String[] results=new String[matVector.size()];
for (int i = 0; i < matVector.size(); ++i) {
String result = cr.charsRecognise(matVector.get(i));
results[i]=result;
}
return results;
}
return null;
}
/**
* 单个车牌识别
* @param mat
* @return
*/
public static String plateRecognise(String imgPath){
Mat src = opencv_imgcodecs.imread(imgPath);
return plateRecognise(src);
}
/**
* 多车牌识别
* @param mat
* @return
*/
public static String[] mutiPlateRecognise(String imgPath){
Mat src = opencv_imgcodecs.imread(imgPath);
return mutiPlateRecognise(src);
} public static void main(String[] args){
int sum=100;
int errNum=0;
int sumTime=0;
long longTime=0;
for(int i=sum;i>0;i--){
String imgPath = "res/image/test_image/plate_judge.jpg";
Mat src = opencv_imgcodecs.imread(imgPath);
long now =System.currentTimeMillis();
String ret=plateRecognise(src);
System.err.println(ret);
long s=System.currentTimeMillis()-now;
if(s>longTime){
longTime=s;
}
sumTime+=s;
if(!"川A0CP56".equals(ret)){
errNum++;
}
}
System.err.println("总数量:"+sum);
System.err.println("单次最长耗时:"+longTime+"ms"); BigDecimal errSum=new BigDecimal(errNum);
BigDecimal sumNum=new BigDecimal(sum);
BigDecimal c=sumNum.subtract(errSum).divide(sumNum).multiply(new BigDecimal(100));
System.err.println("总耗时:"+sumTime+"ms,平均处理时长:"+sumTime/sum+"ms,错误数量:"+errNum+",正确识别率:"+c+"%");
}
}

最新文章

  1. Swift-数组
  2. sql查询中datetime显示的格式为yyyy-DD-mm
  3. freeregex-0.01 使用文档
  4. 【JAVA 小结】Java关于类与对象的代码
  5. Eclipse Java注释模板设置详解,更改 ${user}和${date}
  6. Linux下软件包的多种安装方式
  7. Cloudera的安装
  8. wuzhicms字段的添加以及实现下载功能
  9. http和HTTPS的区别及SSL介绍
  10. sublime3 ctl+b无效
  11. 关于sys、system、sysman等在EM中登录的问题
  12. Javascript或jQuery方法产生任意随机整数
  13. FindChildControl与FindComponent
  14. Android业务组件化之Gradle和Sonatype Nexus搭建私有maven仓库
  15. js中判断鼠标滚轮方向的方法
  16. Python——模块——fnmatch(文件名对比)
  17. 微信公众号_订阅号_微信JS-SDK网页开发
  18. C++ 使用命名规范
  19. 一文了解JAVA虚拟机的重要组成
  20. esp8266(3) Arduino通过ESP8266连接和获取网站源代码

热门文章

  1. Java Tomcat 启动失败的解决思路
  2. Redisson入门
  3. DirectFB 之 通过多Window实现多元素处理
  4. [进程管理]Linux进程状态解析之T、Z、X
  5. linux 下创建管理员权限账户
  6. 【Atom】在一个中/大型项目中,那些好用而强大的atom功能
  7. SCP“免密” 远程COPY较多文件
  8. eclipse配置相关
  9. POJ 1007
  10. 非学习型单层感知机的java实现(日志三)