GitHub 車牌檢測識別項目調研

語言: CN / TW / HK

開啟掘金成長之旅!這是我參與「掘金日新計劃 · 12 月更文挑戰」的第3天,點擊查看活動詳情。 - 一,EasyOCR - 1.1,倉庫介紹 - 1.2,使用記錄 - 二,HyperLPR - 2.1,HyperLPR 概述 - 2.3,使用記錄 - 2.3,使用建議 - 三,simple-car-plate-recognition-2 - 3.1,倉庫介紹 - 3.2,使用記錄 - 3.3,使用建議 - 四,車牌檢測-License-Plate-Detector - 4.1,倉庫介紹 - 4.2,建議 - 五,MMOCR - 5.1,倉庫介紹 - 5.2,使用記錄 - 5.3,使用建議 - 六,推薦 YOLOv5-LPRNet-Licence-Recognition - 6.1,倉庫介紹 - 6.2,使用記錄

一,EasyOCR

1.1,倉庫介紹

EasyOCR 是一個用於從圖像中提取文本的 python 庫, 它是一種通用的 OCR,既可以讀取自然場景文本,也可以讀取文檔中的密集文本。目前支持 80 多種語言和所有流行的書寫腳本,包括:拉丁文、中文、阿拉伯文、梵文、西里爾文等。

EasyOCR 倉庫 截止到 2022-11-8日,star 數為 16.2k,其文件目錄和作者給出的一些示例效果如下。

bash ├── custom_model.md ├── Dockerfile ├── easyocr ├── easyocr.egg-info ├── examples ├── LICENSE ├── MANIFEST.in ├── README.md ├── releasenotes.md ├── requirements.txt ├── scripts ├── setup.cfg ├── setup.py ├── trainer └── unit_test image

1.2,使用記錄

1,安裝較為麻煩

在自行安裝了 cuda 庫和 pytorch 的基礎上,可通過 pip install easyocr 命令安裝 easyocr 庫,但是注意卸載掉之前安裝的 opencv-python 庫(如果有)。

2,代碼自動下載模型速度很慢

下載的倉庫裏面默認是不提供任何模型的,因此第一次運行快速推理腳本會自動下載對應的 ocr 模型,但是!如果網絡不穩定,其下載速度非常慢,試了 n 次,基本不可能下載成功。

所以一般必須通過 Model hub 頁面藉助瀏覽器手動點擊下載對應中英文 ocr 識別模型,然後手動把模型文件移動到 ~/.EasyOCR/model 文件夾下。

EasyOCR 倉庫主要是通過 download_and_unzip 接口下載對應模型文件的,其也是通過調用 urllib 模塊提供的 urlretrieve() 函數來實現文件的下載,其定義如下:

python def download_and_unzip(url, filename, model_storage_directory, verbose=True): zip_path = os.path.join(model_storage_directory, 'temp.zip') reporthook = printProgressBar(prefix='Progress:', suffix='Complete', length=50) if verbose else None # url 下載鏈接,zip_path 文件保存的本地路徑, reporthook 利用這個回調函數來顯示當前的下載進度 urlretrieve(url, zip_path, reporthook=reporthook) with ZipFile(zip_path, 'r') as zipObj: zipObj.extract(filename, model_storage_directory) # 解壓到指定目錄 os.remove(zip_path) # 移除下載的壓縮包文件 3,車牌場景識別準確率非常低

經過我的大量測試,其在中國車牌場景下識別率幾乎為 0,我猜測是因為作者提供的訓練模型所用的訓練數據沒有車牌場景的,而 ocr 效果又非常依賴場景數據,所以導致汽車車牌識別率幾乎為 0 ,具體實踐效果如下。

image

二,HyperLPR

2.1,HyperLPR 概述

HyperLPR 框架是 github 作者 szad670401 開源的基於深度學習高性能中文車牌識別框架,支持多平台,提供了 Window、Linux、Android、IOS、ROS 平台的支持。 Python 依賴於 Keras (>2.0.0) 和 Theano(>0.9) or Tensorflow(>1.1.x) 機器學習庫。項目的 C++ 實現和 Python 實現無任何關聯,均為單獨實現

作者提供的測試用例效果如下:

image

2.3,使用記錄

倉庫 README 文件描述説 HyperLPR 框架對 python 包支持一鍵安裝: pip install hyperlpr 。但是經過我實際測試發現,pip install hyperlpr 命令只能成功安裝 hyperlpr 庫.

1,快速上手的 py 代碼運行會出錯:

image

2,我把 demo 代碼移動到 hyperlpr_py3 目錄下運行,不再報上圖的錯誤,但是又報了 opencv 函數版本的問題。

bash hyperlpr) root@crowd-max:/framework/HyperLPR/hyperlpr_py3# python test.py (1, 3, 150, 400) 40 22 335 123 Traceback (most recent call last): File "test.py", line 7, in <module> print(HyperLPR_plate_recognition(image)) File "/opt/miniconda3/envs/hyperlpr/lib/python3.8/site-packages/hyperlpr/__init__.py", line 8, in HyperLPR_plate_recognition return PR.plate_recognition(Input_BGR,minSize,charSelectionDeskew) File "/opt/miniconda3/envs/hyperlpr/lib/python3.8/site-packages/hyperlpr/hyperlpr.py", line 311, in plate_recognition cropped_finetuned = self.finetune(cropped) File "/opt/miniconda3/envs/hyperlpr/lib/python3.8/site-packages/hyperlpr/hyperlpr.py", line 263, in finetune g = self.to_refine(image_, pts) File "/opt/miniconda3/envs/hyperlpr/lib/python3.8/site-packages/hyperlpr/hyperlpr.py", line 231, in to_refine mat_ = cv2.estimateRigidTransform(org_pts, target_pts, True) AttributeError: module 'cv2' has no attribute 'estimateRigidTransform' 3,ubuntu16.04+python3.8+cuda11.0 環境下,pip install -r requirements.txt 命令安裝依賴包依然會出錯。

image

2.3,使用建議

個人建議直接使用 C++ 版本,截止到 2022-11-8 日為止,純 Python 版本還是有各種問題。

三,simple-car-plate-recognition-2

3.1,倉庫介紹

simple-car-plate-recognition-2倉庫 簡稱:簡易車牌字符識別 2-Inception/CTC

作者使用的字符識別模型是參考 HyperLPR 裏面的一個叫 SegmenationFree-Inception 的模型結構,並改用 pytorch 框架實現,然後訓練模型,最後測試用整張車牌圖片進行字符識別。

作者所用的車牌訓練集,是利用 generateCarPlate 這個車牌生成工具生成的。

3.2,使用記錄

直接用車牌做識別,實際測試下來,不管用作者給的模型,還是自己訓練的模型,效果都很差

image

3.3,使用建議

雖然代碼簡單,模型結構容易看懂,但是不建議使用,效果不穩定和太差。

四,車牌檢測-License-Plate-Detector

4.1,倉庫介紹

License-Plate-Detector 倉庫 作者利用 Yolov5 模型進行了車牌檢測,訓練集使用 CCPD 數據集,測試效果如下:

image

4.2,建議

不建議使用,代碼寫的不夠整潔,使用不夠方便,使用 yolov5 用作車牌檢測的模型的方法還是可以參考下。

五,MMOCR

5.1,倉庫介紹

mmocr 是商湯 + openmmlab 實驗室開發的 OCR 框架MMOCR 是基於 PyTorchmmdetection 的開源工具箱,專注於文本檢測,文本識別以及相應的下游任務,如關鍵信息提取。 它是 OpenMMLab 項目的一部分。

主分支目前支持 PyTorch 1.6 以上的版本。mmocr 庫的安裝,可參考我之前的文章-ubuntu16.04安裝mmdetection庫

5.2,使用記錄

1,官方提供中文字符識別模型只有一個,其使用步驟如下:

  1. 創建 mmocr/data/chineseocr/labels 目錄;
  2. 為了模型推理成功,下載中文字典,並放置到 labels 目錄;

bash wget -c https://download.openmmlab.com/mmocr/textrecog/sar/dict_printed_chinese_english_digits.txt mv dict_printed_chinese_english_digits.txt mmocr/data/chineseocr/labels 3. 運行推理腳本。

bash python mmocr/utils/ocr.py --det DB_r18 --recog SAR_CN demo/car1.jpeg --output='./' 車牌識別效果不好,測試結果如下:

image

image

image

2,官方提供的測試用例的推理效果如下:

image

5.3,使用建議

官方提供的不管是中文還是英文文本識別模型,在車牌場景下識別效果都不好,不推薦在車牌識別場景下使用,更適合通用場景。

六,推薦 YOLOv5-LPRNet-Licence-Recognition

6.1,倉庫介紹

YOLOv5-LPRNet-Licence-Recognition 項目是使用 YOLOv5sLPRNet 對中國車牌進行檢測和識別,車牌數據集是使用 CCPD

車牌字符識別的準確率如下:

|model|數據集|epochs|acc|size| | ----- | ----- | ----- | ----- | ----- | |LPRNet|val|100|94.33%|1.7M| |LPRNet|test|100|94.30%|1.7M|

總體模型速度:(YOLOv5 + LPRNet)速度:47.6 FPS(970 GPU)。

6.2,使用記錄

作者提供的模型實際測試下來效果還不錯,部分示例如下:

image

image

image