python+pyhyper實(shí)現(xiàn)識(shí)別圖片中的車牌號(hào)思路詳解
背景
最近領(lǐng)導(dǎo)給布置了一個(gè)基于圖片識(shí)別車牌號(hào)的工具開(kāi)發(fā)任務(wù),然后就去研究實(shí)現(xiàn)邏輯,自己根據(jù)opencv寫(xiě)了一個(gè)小demo,發(fā)現(xiàn)不僅速度慢而且成功率極低。然后,就找到了Hyperlpr開(kāi)源項(xiàng)目。
環(huán)境搭建
排雷1:有教程說(shuō)在github上下載源碼:https://github.com/zeusees/HyperLPR,自己編譯,結(jié)果github上已經(jīng)停止維護(hù)了,然后再gitee找到了:Hyperlpr項(xiàng)目
排雷2:hyperlpr環(huán)境搭建比較苛刻,建議直接在requirements.txt文件中維護(hù)好版本號(hào)
實(shí)現(xiàn):
我是直接pip install hyperlpr
安裝的
驗(yàn)證
import cv2 from hyperlpr import HyperLPR_plate_recognition if __name__ == '__main__': image = cv2.imread("one.jpeg") result = HyperLPR_plate_recognition(image)
報(bào)錯(cuò):
mat_ = cv2.estimateRigidTransform(org_pts, target_pts, True)
AttributeError: module 'cv2' has no attribute 'estimateRigidTransform'
修改hyperlpr.py文件,大概在231行
將mat_ = cv2.estimateRigidTransform(org_pts, target_pts, True)
修改為
mat_,inlier = cv2.estimateAffine2D(org_pts, target_pts)
再次執(zhí)行,執(zhí)行成功,返回一個(gè)列表,依次是車牌號(hào),準(zhǔn)確率,車牌號(hào)在圖片中的坐標(biāo)
二次開(kāi)發(fā)
經(jīng)過(guò)實(shí)驗(yàn)發(fā)現(xiàn),如果圖片中存在多個(gè)車牌號(hào),只能識(shí)別圖片中的一個(gè)車牌號(hào)
拜讀源碼發(fā)現(xiàn)self.detect_ssd(image)
函數(shù)返回的是一個(gè)可迭代變量,追蹤進(jìn)去應(yīng)該可以發(fā)現(xiàn)點(diǎn)東西
和猜測(cè)一致,self.detect_ssd(image)返回的是一個(gè)列表,但是找到一個(gè)車牌就返回了,只需要將 return cropped_images
放到for循環(huán)外賣外面即可
修改前:
修改后:
驗(yàn)證:
標(biāo)記
附源碼:
import cv2 import numpy as np from PIL import ImageFont, Image, ImageDraw from hyperlpr import HyperLPR_plate_recognition if __name__ == '__main__': image = cv2.imread("two.jpeg") result = HyperLPR_plate_recognition(image) print(result) # 標(biāo)記車牌號(hào) if result: for index, item in enumerate(result): # 車牌號(hào) car_code = item[0] # 可信度 conf = item[1] # 車牌框左上角坐標(biāo) pt1 = (item[2][0], item[2][1]) # 車牌框右下角坐標(biāo) pt2 = (item[2][2], item[2][3]) # 繪制車牌框 cv2.rectangle(image, pt1=pt1, pt2=pt2, color=(255, 0, 0), thickness=3) # 設(shè)置需要顯示的字體 font_path = 'fonts/simsun.ttc' font = ImageFont.truetype(font_path, size=40, index=1) image = Image.fromarray(image) draw = ImageDraw.Draw(image) # 繪制文字信息 draw.text((pt1[0] + 30, pt1[1] - 30), car_code, font=font, fill=(0, 0, 255)) image = np.array(image) # cv2.namedWindow('image', 0) # cv2.imshow('image', image) # cv2.waitKey(100000) cv2.imwrite('d:/two.jpeg', image)
到此這篇關(guān)于python+pyhyper實(shí)現(xiàn)識(shí)別圖片中的車牌號(hào)的文章就介紹到這了,更多相關(guān)python車牌號(hào)識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python獲取央視節(jié)目單的實(shí)現(xiàn)代碼
這篇文章主要介紹了Python獲取央視節(jié)目單的實(shí)現(xiàn)代碼,涉及Python頁(yè)面采集的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07python構(gòu)造函數(shù)init實(shí)例方法解析
這篇文章主要介紹了python構(gòu)造函數(shù)init實(shí)例方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(三)模型訓(xùn)練與評(píng)估
這篇文章主要介紹了YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(三)模型訓(xùn)練與評(píng)估,在這個(gè)教程中,我們將一步步教你如何使用YOLOv5進(jìn)行車牌識(shí)別,幫助你快速掌握YOLOv5車牌識(shí)別技能,需要的朋友可以參考下2023-04-04Pycharm搭建Django項(xiàng)目詳細(xì)教程(看完這一篇就夠了)
這篇文章主要給大家介紹了關(guān)于Pycharm搭建Django項(xiàng)目的詳細(xì)教程,想要學(xué)習(xí)的小伙伴看完這一篇就夠了,pycharm是一種Python?IDE,帶有一整套可以幫助用戶在使用Python語(yǔ)言開(kāi)發(fā)時(shí)提高其效率的工具,需要的朋友可以參考下2023-11-11python神經(jīng)網(wǎng)絡(luò)MobileNetV3?small模型的復(fù)現(xiàn)詳解
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)MobileNetV3?small模型的復(fù)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Anaconda安裝pytorch及配置PyCharm 2021環(huán)境
小編使用的是python3.8版本,為了防止訪問(wèn)量過(guò)大導(dǎo)致http連接失敗,所以采用本地安裝,具體安裝方法本文給大家詳細(xì)介紹,在文章底部給大家提到了PyCharm 2021配置環(huán)境的方法,感興趣的朋友一起看看吧2021-06-06Python中網(wǎng)絡(luò)請(qǐng)求中Retry策略實(shí)現(xiàn)方式
這篇文章主要介紹了Python中網(wǎng)絡(luò)請(qǐng)求中Retry策略實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06