為了用深度學習來訓練一個車牌識別的字元識別模型,首先需要解決的問題是處理資料的問題,為了能夠把資料傳入到網路裡進行訓練,我這裡使用的one_hot編碼,具體的細節如下:
首先準備資料集: 一部分自己的資料集,一部分是 Easypr的資料集(後500張圖片作為測試集,其他的作為訓練集)67617張
類別:65類
0-9共十個類,A-Z共二十四個類(除了O,I),
中文漢字共三十一個類( '鄂','贛','甘','貴','桂','黑','滬','冀','吉','津','晉','京','遼','魯','蒙','閩','寧','青','瓊','陝','蘇','皖','湘','新','豫', '渝','粵','雲','藏','浙')
歸一化:
將每張輸入字元圖片大小歸一化為20X20,並轉成灰階;
圖片的命名格式:
將資料集中的圖片命名為label.num.jpg(比如:0.0.jpg),目的是在於更方便的取得圖片的標籤與圖片;
省份使用拼音字串儲存:
chuan.0.jpg
標籤使用one-hot編碼:
得到圖片類別標籤後,將其轉成one-hot編碼;
處理成.npy的資料格式:
將之前處理好的圖片資料與標籤,使用numpy函數形成資料檔案.npy。
顯示處理過的部分資料:
圖1為車牌字元的圖片
圖2為車牌字元圖片相對應的標籤即類別
核心代碼如下:
def label_img(img):
label = np.eye(65, dtype=int)
word_lable = img
label = np.eye(65, dtype=int)
word_lable = img
def create_train_data():
training_data = []
for fpathe, dirs, fs in tqdm(os.walk(train_dir)):
for f in fs:
img = cv2.imread(os.path.join(fpathe, f),cv2.IMREAD_GRAYSCALE)
image_name = os.path.join(fpathe, f).split('\\')[2]
image=image_name.split('.')[0]
label = label_img(image)
img = cv2.resize(img, (IMG_SIZE, IMG_SIZE))
training_data.append([np.array(img), np.array(label)])
shuffle(training_data)
np.save('路徑,training_data)
return training_data