diff --git a/img_recognition.py b/img_recognition.py new file mode 100644 index 0000000..552aabe --- /dev/null +++ b/img_recognition.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +import cv2 +import numpy as np +from numpy.linalg import norm + +SZ = 20 # 训练图片长宽 +MAX_WIDTH = 1000 # 原始图片最大宽度 +Min_Area = 2000 # 车牌区域允许最大面积 +PROVINCE_START = 1000 +# 来自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[:10, 10:], bin[10:, 10:] + mag_cells = mag[:10, :10], mag[10:, :10], mag[:10, 10:], 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", "浙" +] + + +