javacpp-opencv图像处理系列:国内车辆牌照检测识别系统(万份测试车牌识别准确率99.7%以上,单次平均耗时39ms)
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+"%");
}
}
javacpp-opencv图像处理系列:国内车辆牌照检测识别系统(万份测试车牌识别准确率99.7%以上,单次平均耗时39ms)的更多相关文章
- 目标检测---搬砖一个ALPR自动车牌识别的环境
目标检测---搬砖一个ALPR自动车牌识别的环境 参考License Plate Detection and Recognition in Unconstrained Scenarios@https: ...
- Python+OpenCV图像处理(十四)—— 直线检测
简介: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像中分离出具有某种相同特征的几何形状(如,直线 ...
- OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现
# OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-环 ...
- 《Mastering Opencv ...读书笔记系列》车牌识别(II)
http://blog.csdn.net/jinshengtao/article/details/17954427 <Mastering Opencv ...读书笔记系列>车牌识别(I ...
- 《Mastering Opencv ...读书笔记系列》车牌识别(I)
http://blog.csdn.net/jinshengtao/article/details/17883075/ <Mastering Opencv ...读书笔记系列>车牌识别(I ...
- 机器视觉及图像处理系列之一(C++,VS2015)——搭建基本环境
自<人脸识别>系列发布至今,已一年多矣,期间除答复些许同好者留言外,未再更新文,盖因项目所迫,不得已转战它途,无暇.无料更博耳.其时,虽人已入项目中,然终耿怀于人脸识别方案之谬.初,写此文 ...
- OpenCV图像处理篇之边缘检测算子
OpenCV图像处理篇之边缘检测算子 转载: http://xiahouzuoxin.github.io/notes/ 3种边缘检测算子 一阶导数的梯度算子 高斯拉普拉斯算子 Canny算子 Open ...
- Python+OpenCV图像处理(一)
Python+OpenCV图像处理(一): 读取,写入和展示图片 调用摄像头拍照 调用摄像头录制视频 1. 读取.写入和展示图片 图像读入:cv2.imread() 使用函数cv2.imread() ...
- cv2.cornerHarris()详解 python+OpenCV 中的 Harris 角点检测
参考文献----------OpenCV-Python-Toturial-中文版.pdf 参考博客----------http://www.bubuko.com/infodetail-2498014. ...
随机推荐
- [No0000E9]Microsoft Help Viewer 2.3绿色版
今天没事,提取了一下2017的Microsoft Help Viewer 2.3绿色版,自测没发现什么问题,有问题请后补. 下载地址:http://files.cnblogs.com/files/Ch ...
- Vue 普通对象数据更新与 file 对象数据更新
最近在做一个多图片上传的组件,需求是做到多文件依次上传,并显示上传进度条. 逻辑部分实现了以后,在更新进度条视图的时候出现一点问题:动态计算生产的进度 progress 属性不会自动更新. 原来的代码 ...
- 为RecyclerView的item之间设置相同的间距
项目中经常碰到列表当中的每一项之间需要设置间距的问题,我们可以通过给列表中的每一项设置margin值来实现,例如纵向的间距可以给每一项设置right_margin,这种方法下,整个列表的最左边会紧贴屏 ...
- selenium IDE的3种下载安装方式
第一种方式: 打开firefox浏览器-----点击右上角-----附加组件----插件----搜索框输入“selenium”-----搜索的结果中下拉到页面尾部,点击“查看全部的37项结果”---进 ...
- Thinkphp模板简单入门
Thinkphp模板概述: ThinkPHP内置了一个基于XML的性能卓越的模板引擎,这是一个专门为ThinkPHP服务的内置模板引擎,使用了XML标签库技术的编译型模板引擎,支持两种类型的模板标签, ...
- mysql5.7.16二进制安装
1.下载二进制文件 cd /data wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-linux-glibc2.5-x ...
- 关于开发微信小程序后端linux使用xampp配置https
关于开发微信小程序后端linux使用xampp配置https 背景 由于最近开发微信小程序,前后端交互需要使用https协议,故需要配置https服务 服务器环境 服务器系统 ubuntu 环境 xa ...
- 数值类型中JDk的编译期检查和编译期优化
byte b1 = 5;//编译期检查,判断是否在byte范围内 byte b2 = 5+4;//编译期优化,相当于b2=9 byte b3 = 127;//编译通过,在byte范围内 byte b4 ...
- Java线程安全 关于原子性与volatile的试验
1. 变量递增试验 static /*volatile*/ int shared=0;//volatile也无法保证++操作的原子性 static synchronized int incrShare ...
- C语言解析17monipdb.dat(http://www.ipip.net/)免费数据库
官方给的链接打不开,而且里面的逻辑,每次都会打开文件,所以自己做了点个修改,发上来,借大家参考: #include <stdio.h> #include <stdlib.h> ...