作者:恒创智能 时间:2021-03-26 10:26 来源:未知 浏览:次
实际生活中,车牌识别是很常见的:高速公路,停车系统,电子警察,甚至还有车载设备。
作为车牌识别专业厂商的恒创智能,为您讲述车牌识别系统的工作原理及程序组成。
其工作原理大致是这样的:使用摄像头作为“眼睛”,使用 openCV和深度学习作为“大脑”。车辆牌照识别的实时工作步骤:摄像头抓拍—> openCV对车牌位置进行初步定位——>对车牌位置的左右上下边界进行二次确认——>车牌倾斜校正——>牌号字符分割——>字符识别。而车牌检测是车牌识别的前提和重要基础。
安卓车牌识别:android端使用openCV如何实现车牌检测。
关于openCV的初始化,调用车牌识别JNI接口时,首先进行初始化,加载caffe训练模型相关文件:
plateRecognition = new PlateRecognition(this, mHandler);
//init plate recognizer
new Thread(new Runnable() {
@Override
public void run() {
plateRecognition.initRecognizer("pr");
}
}).start();
摄像头实时捕获,并回调每帧数据以识别车牌线程。需要注意的是,车牌识别中openCV操作对象是Mat,而不是Bitmap:
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
//每次进行车牌识别间隔3s
long currentTime = System.currentTimeMillis();
if((currentTime - lastRecognizeTime) > 3000){
lastRecognizeTime = currentTime;
//回调给车牌识别线程处理
if(onNewFrameListener != null){
onNewFrameListener.onNewFrame(inputFrame.rgba());
return inputFrame.rgba();
public void onNewFrame(Mat newFrame) {
if(dstMat == null){
dstMat = new Mat(newFrame.rows(), newFrame.cols(), CvType.CV_8UC4);
//mat格式转换
newFrame.copyTo(dstMat);
//添加到车牌识别线程的队列中
if(recognizeThread != null){
recognizeThread.addMat(dstMat);
其中,车牌识别线程调用native层执行,最终把识别结果返回给java层:
while (isRunning){
Mat mat = null;
synchronized (lock){
//从队列取出mat对象
if(matQueue != null && matQueue.size() > 0){
mat = matQueue.poll();
//调用native层,执行车牌识别
if(mat != null && plateRecognition != null){
plateRecognition.doPlateRecognize(mat);
使用openCV的级联分类器CascadeClassifier去检测,得到车牌所在整个图像的矩形区域,然后二次确认车牌的左右、上下边界,判断车牌是否发生倾斜,如果有倾斜则进行校正。通过滑动窗口来切割车牌字符,使用CNN深度学习对每个字符进行识别。最终得到识别结果与识别置信度,如果置信度大于一定阈值,那么该轮识别结果可靠。
购买车牌识别产品,认准恒创智能。
上一篇 智能翼闸在景区安装有什么好处
下一篇 智能人行通道闸的分类方式与应用范围
在线咨询
联系电话
微信咨询
返回顶部