iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
AI/ ML & Data

我的深度學習-從0開始實作物件偵測系列 第 24

【Day 24】實戰演練:利用EasyOCR進行辨識!

  • 分享至 

  • xImage
  •  

一、前言

繼上一篇進行簡單的實作後,今天就要將EasyOCR套入之前做好的模型當中去進行辨識,那話不多說,我們開始吧!

二、辨識

  1. 定義名為predict_and_plot_with_ocr的副程式,用途同樣是對輸入進的圖片進行處理,加上EasyOCR對邊界框內的文字進行辨識。
import easyocr
import cv2
import matplotlib.pyplot as plt
from ultralytics import YOLO

def predict_and_plot_with_ocr(path_test_car):

    # 使用模型對測試的圖片做預測
    results = model.predict(path_test_car, device='cpu')
    
    # 使用cv2讀取圖片
    image = cv2.imread(path_test_car)

    # 將影像從BGR轉為RGB
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # 設定辨識的語言
    reader = easyocr.Reader(['en'])

    # 從結果提取出邊界框和標籤
    for result in results:
        for box in result.boxes:

            # 獲取邊界框的座標
            x1, y1, x2, y2 = map(int, box.xyxy[0])

             # 獲取邊界框的信心分數
            confidence = box.conf[0]

            # 在圖片上繪製邊界框
            cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)

            #在圖片周圍繪製信心分數
            cv2.putText(image, f'{confidence*100:.2f}%', (x1, y1 - 10), 
                        cv2.FONT_HERSHEY_SIMPLEX, 0.9, (255, 0, 0), 2)
            
            # 裁剪圖片的邊界框用來辨識OCR
            roi = gray_image[y1:y2, x1:x2]

            # 對裁剪的範圍進行OCR辨識
            text = reader.readtext(roi)
            if len(text) > 0:
                text = text[0][1]
                cv2.putText(image, text, (x1, y1 - 30), 
                            cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 123, 255), 2)
                print(f'Detected text: {text}')
    
    # 使用matploblib繪製出影像
    plt.imshow(image)
    plt.axis('off') 
    plt.show()

  1. 接著輸入測試的圖片。
predict_and_plot_with_ocr(r'c:/Users/sywu0/Documents/projects/Car_License/Modle/test/images/Cars203.png')

三、測試

會得出下圖辨識出的結果以及準確率,可以看到圖片的文字有順利的辨識出來,而且準確率還不錯。

image
不過也有辨識錯誤的時候,如下圖的圖片所示,OCR將S辨識成5的狀況,但這張圖片的清晰度較不清楚。
image

筆者也試著採用測試集外的圖片,筆者也很好奇模型是否能抓取不同國家的車牌,於是從網路上抓了一張台灣的車牌來測試,如下圖。
image
可見模型有正確的將車牌的位置給框選出來,且EasyOCR也有正確的將數字及英文都有正確的辨識,但是在車牌中間的-並沒有正確辨識出來,這是有點可惜的部分。

四、結語

經過以上的測試後,這次實作的車牌辨識也順利告了一個段落,接著會用一篇來說說這個車牌辨識還有哪些可以改善的地方,那我們下篇見。

image


上一篇
【Day 23】深入探索EasyOCR:簡單的應用實例
下一篇
【Day 25】實戰演練:總結及改善
系列文
我的深度學習-從0開始實作物件偵測30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言