• 大小: 13.6MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-06-26
  • 语言: Python
  • 标签: LPR  

资源简介

用python3+opencv3做的中国车牌识别,包括算法和客户端界面,只有2个文件,surface.py是界面代码,predict.py是算法代码,界面不是重点所以用tkinter写得很简单。 ### 使用方法: 版本:python3.4.4,opencv3.4和numpy1.14和PIL5 下载源码,并安装python、numpy、opencv的python版、PIL,运行surface.py即可 ### 算法实现: 算法思想来自于网上资源,先使用图像边缘和车牌颜色定位车牌,再识别字符。车牌定位在predict方法中,为说明清楚,完成代码和测试后,加了很多注释,请参看源码。车牌字符识别也在predict方法中,请参看源码中的注释,需要说明的

资源截图

代码片段和文件信息

import cv2
import numpy as np
from numpy.linalg import norm
import sys
import os
import json

SZ = 20          #训练图片长宽
MAX_WIDTH = 1000 #原始图片最大宽度
Min_Area = 2000  #车牌区域允许最大面积
PROVINCE_START = 1000
#读取图片文件
def imreadex(filename):
return cv2.imdecode(np.fromfile(filename dtype=np.uint8) cv2.IMREAD_COLOR)

def point_limit(point):
if point[0] < 0:
point[0] = 0
if point[1] < 0:
point[1] = 0

#根据设定的阈值和图片直方图,找出波峰,用于分隔字符
def find_waves(threshold histogram):
up_point = -1#上升点
is_peak = False
if histogram[0] > threshold:
up_point = 0
is_peak = True
wave_peaks = []
for ix in enumerate(histogram):
if is_peak and x < threshold:
if i - up_point > 2:
is_peak = False
wave_peaks.append((up_point i))
elif not is_peak and x >= threshold:
is_peak = True
up_point = i
if is_peak and up_point != -1 and i - up_point > 4:
wave_peaks.append((up_point i))
return wave_peaks

#根据找出的波峰,分隔图片,从而得到逐个字符图片
def seperate_card(img waves):
part_cards = []
for wave in waves:
part_cards.append(img[: wave[0]:wave[1]])
return part_cards

#来自opencv的sample,用于svm训练
def deskew(img):
m = cv2.moments(img)
if abs(m[‘mu02‘]) < 1e-2:
return img.copy()
skew = m[‘mu11‘]/m[‘mu02‘]
M = np.float32([[1 skew -0.5*SZ*skew] [0 1 0]])
img = cv2.warpAffine(img M (SZ SZ) flags=cv2.WARP_INVERSE_MAP | cv2.INTER_LINEAR)
return img
#来自opencv的sample,用于svm训练
def preprocess_hog(digits):
samples = []
for img in digits:
gx = cv2.Sobel(img cv2.CV_32F 1 0)
gy = cv2.Sobel(img cv2.CV_32F 0 1)
mag ang = cv2.cartToPolar(gx gy)
bin_n = 16
bin = np.int32(bin_n*ang/(2*np.pi))
bin_cells = bin[:10:10] bin[10::10] bin[:1010:] bin[10:10:]
mag_cells = mag[:10:10] mag[10::10] mag[:1010:] mag[10:10:]
hists = [np.bincount(b.ravel() m.ravel() bin_n) for b m in zip(bin_cells mag_cells)]
hist = np.hstack(hists)

# transform to Hellinger kernel
eps = 1e-7
hist /= hist.sum() + eps
hist = np.sqrt(hist)
hist /= norm(hist) + eps

samples.append(hist)
return np.float32(samples)
#不能保证包括所有省份
provinces = [
“zh_cuan“ “川“
“zh_e“ “鄂“
“zh_gan“ “赣“
“zh_gan1“ “甘“
“zh_gui“ “贵“
“zh_gui1“ “桂“
“zh_hei“ “黑“
“zh_hu“ “沪“
“zh_ji“ “冀“
“zh_jin“ “津“
“zh_jing“ “京“
“zh_jl“ “吉“
“zh_liao“ “辽“
“zh_lu“ “鲁“
“zh_meng“ “蒙“
“zh_min“ “闽“
“zh_ning“ “宁“
“zh_qing“ “靑“
“zh_qiong“ “琼“
“zh_shan“ “陕“
“zh_su“ “苏“
“zh_sx“ “晋“
“zh_wan“ “皖“
“zh_xiang“ “湘“
“zh_xin“ “新“
“zh_yu“ “豫“
“zh_yu1“ “渝“
“zh_yue“ “粤“
“zh_yun“ “云“
“zh_zang“ “藏“
“zh_zhe“ “浙“
]
class StatModel(object):
def load(self fn):
self.model = self.model.load(fn)  
def save(self fn):
self.model.save(fn)
class SVM(StatModel):
def __init__(self C = 1 gamma = 0.5):
self.model = cv2.ml.SVM_create()
self.model.setGamma(gamma)
self.model.setC(C)
self.model.setKernel(cv2.ml.SVM_RBF)
self.model.setT

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1157  2019-05-08 11:06  License-Plate-Recognition-master\.gitignore

     文件        398  2019-09-25 13:20  License-Plate-Recognition-master\.idea\License-Plate-Recognition-master.iml

     文件        223  2019-09-25 13:20  License-Plate-Recognition-master\.idea\misc.xml

     文件        316  2019-09-25 13:20  License-Plate-Recognition-master\.idea\modules.xml

     文件      25010  2019-10-05 19:35  License-Plate-Recognition-master\.idea\workspace.xml

     文件        262  2019-05-08 11:06  License-Plate-Recognition-master\config.js

     文件       1060  2019-05-08 11:06  License-Plate-Recognition-master\LICENSE

     文件      18413  2019-10-05 14:29  License-Plate-Recognition-master\predict.py

     文件       1804  2019-05-08 11:06  License-Plate-Recognition-master\README.md

     文件       4637  2019-09-30 12:31  License-Plate-Recognition-master\surface.py

     文件    4595678  2019-05-08 11:06  License-Plate-Recognition-master\svm.dat

     文件    3645216  2019-05-08 11:06  License-Plate-Recognition-master\svmchinese.dat

     文件      32852  2019-10-02 10:05  License-Plate-Recognition-master\test\0.jpg

     文件    4543569  2019-05-08 11:06  License-Plate-Recognition-master\test\1.jpg

     文件    2718121  2019-05-08 11:06  License-Plate-Recognition-master\test\2.jpg

     文件      62588  2019-05-08 11:06  License-Plate-Recognition-master\test\cAA662F.jpg

     文件      27089  2019-05-08 11:06  License-Plate-Recognition-master\test\car3.jpg

     文件      25090  2019-05-08 11:06  License-Plate-Recognition-master\test\car4.jpg

     文件      28604  2019-05-08 11:06  License-Plate-Recognition-master\test\car5.jpg

     文件      27744  2019-05-08 11:06  License-Plate-Recognition-master\test\car7.jpg

     文件      24073  2019-05-08 11:06  License-Plate-Recognition-master\test\lLD9016.jpg

     文件      24131  2019-10-04 19:00  License-Plate-Recognition-master\test\p12.jpg

     文件      52515  2019-05-08 11:06  License-Plate-Recognition-master\test\wA87271.jpg

     文件     116063  2019-05-08 11:06  License-Plate-Recognition-master\test\wATH859.jpg

     文件     141788  2019-05-08 11:06  License-Plate-Recognition-master\test\wAUB816.jpg

     文件    3336217  2019-05-08 11:06  License-Plate-Recognition-master\train\chars2.7z

     文件    1099009  2019-05-08 11:06  License-Plate-Recognition-master\train\charsChinese.7z

     文件      14990  2019-10-01 15:53  License-Plate-Recognition-master\__pycache__\predict.cpython-35.pyc

     目录          0  2019-10-04 18:24  License-Plate-Recognition-master\.idea\inspectionProfiles

     目录          0  2019-10-11 09:36  License-Plate-Recognition-master\.idea

............此处省略7个文件信息

评论

共有 条评论