TensorFlow基于MNIST數(shù)據(jù)集實(shí)現(xiàn)車牌識(shí)別(初步演示版)
在前幾天寫的一篇博文《如何從TensorFlow的mnist數(shù)據(jù)集導(dǎo)出手寫體數(shù)字圖片》中,我們介紹了如何通過(guò)TensorFlow將mnist手寫體數(shù)字集導(dǎo)出到本地保存為bmp文件。
車牌識(shí)別在當(dāng)今社會(huì)中廣泛存在,其應(yīng)用場(chǎng)景包括各類交通監(jiān)控和停車場(chǎng)出入口收費(fèi)系統(tǒng),在自動(dòng)駕駛中也得到一定應(yīng)用,其原理也不難理解,故很適合作為圖像處理+機(jī)器學(xué)習(xí)的入門案例。
現(xiàn)在我們不妨醞釀一個(gè)大膽的想法:在TensorFlow中通過(guò)卷積神經(jīng)網(wǎng)絡(luò)+mnist數(shù)字集實(shí)現(xiàn)車牌識(shí)別。
實(shí)際上車牌字符除了數(shù)字0-9,還有字母A-Z,以及各省份的簡(jiǎn)稱。只包含數(shù)字0-9的mnist是不足以識(shí)別車牌的。故本文所做實(shí)驗(yàn)僅出于演示目的。
由于車牌數(shù)字是正體,而mnist是手寫體,為提高識(shí)別率,需要從mnist圖片集中挑選出形狀比較規(guī)則工整的圖片作為訓(xùn)練圖片,否則識(shí)別率不高。作為參考,下圖是我挑選出來(lái)的一部分較工整數(shù)字:
(如果你需要我挑選出來(lái)的圖片,可以評(píng)論或私信我留下郵箱)
出于演示目的,我們從網(wǎng)上找到下面這張圖片:
現(xiàn)在我們假設(shè)該車牌號(hào)為閩0-16720(實(shí)際上是閩O-1672Q),暫不識(shí)別省份簡(jiǎn)稱,只識(shí)別0-16720。
上圖經(jīng)過(guò)opencv定位分割處理后,得到以下幾張車牌字符。
現(xiàn)在我們通過(guò)如下代碼,將這幾張字符圖片輸入到上一篇博文《如何用TensorFlow訓(xùn)練和識(shí)別/分類自定義圖片》中構(gòu)建的網(wǎng)絡(luò):
license_num = [] for n in range(2,8): path = "result/%s.bmp" % (n) img = Image.open(path) width = img.size[0] height = img.size[1] img_data = [[0]*784 for i in range(1)] for h in range(0, height): for w in range(0, width): if img.getpixel((w, h)) < 190: img_data[0][w+h*width] = 0 else: img_data[0][w+h*width] = 1 # 獲取softmax結(jié)果前三位的index和概率值 soft_max = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2) result = sess.run(soft_max, feed_dict = {x: np.array(img_data), keep_prob: 1.0}) max1 = 0 max2 = 0 max3 = 0 max1_index = 0 max2_index = 0 max3_index = 0 for j in range(10): if result[0][j] > max1: max1 = result[0][j] max1_index = j continue if (result[0][j]>max2) and (result[0][j]<=max1): max2 = result[0][j] max2_index = j continue if (result[0][j]>max3) and (result[0][j]<=max2): max3 = result[0][j] max3_index = j continue license_num.append(max1_index) print ("softmax結(jié)果前三位概率:%s: %.2f%% %s: %.2f%% %s: %.2f%%" % (max1_index,max1*100, max2_index,max2*100, max3_index,max3*100)) print ("車牌號(hào)為: %s" % license_num)
然后運(yùn)行程序,結(jié)果如下:
可以看出,分類結(jié)果為016720,是正確的,而softmax計(jì)算結(jié)果可信度也是可以接受的。
后續(xù)將給出包含省份簡(jiǎn)稱和字母A-Z的完整例子。
最后附上本文程序的完整代碼(運(yùn)行之前需要確保你的數(shù)據(jù)集和待識(shí)別圖片的位深度都是8,也就是一個(gè)像素的顏色值用一個(gè)字節(jié)(8bits)表示,不然會(huì)出錯(cuò)):
PS:支持省份簡(jiǎn)稱和字母的車牌識(shí)別程序詳見《TensorFlow車牌識(shí)別完整版(含車牌數(shù)據(jù)集)》
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用豆瓣源來(lái)安裝python中的第三方庫(kù)方法
這篇文章主要介紹了使用豆瓣源來(lái)安裝python中的第三方庫(kù)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01python django下載大的csv文件實(shí)現(xiàn)方法分析
這篇文章主要介紹了python django下載大的csv文件實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Django框架下載csv大文件的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-07-07超詳細(xì)注釋之OpenCV旋轉(zhuǎn)圖像任意角度
這篇文章主要介紹了OpenCV旋轉(zhuǎn)圖像任意角度,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09python -m pip install 和 pip in
python -m pip install <package> 使用了 -m 參數(shù)來(lái)確保以 Python 模塊的形式運(yùn)行 pip,適用于確保在不同的環(huán)境中正確使用 pip,這篇文章主要介紹了python -m pip install 和 pip install 的區(qū)別,需要的朋友可以參考下2023-07-07在Python 3中緩存Exception對(duì)象會(huì)造成什么后果?
這篇文章主要介紹了在Python 3中緩存Exception對(duì)象到底會(huì)造成什么后果?下面帶著這個(gè)問(wèn)題一起看看文章的解析,需要的朋友可以參考一下2021-12-12python實(shí)現(xiàn)web應(yīng)用框架之增加動(dòng)態(tài)路由
這篇文章主要介紹web應(yīng)用框架如何添加動(dòng)態(tài)路由,在我們編寫的框架中,我們添加動(dòng)態(tài)路由,是使用了正則表達(dá)式,同時(shí)在注冊(cè)的時(shí)候,需要注明該路由是請(qǐng)求路由,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-05-05