Datawhale CV之街道字符識別-賽題理解

活動介紹

本賽題是由Datawhale組織的組隊自學活動,感興趣的都可以報名參加。本次自學活動是通過進行街道字符識別比賽來進行的,目標導向明確。學習期限一個月,通過博客方式進行學習總結來打卡,是非常好的學習機會。

賽題介紹

街道字符識別是識別街道圖片中的字符,本題是識別數字。和最基本的手寫數字識別不同,街道圖片字符識別需要定位到字符的位置,並且字符長度不固定。數據集來源自SVHN
在這裏插入圖片描述

字符表示

爲了降低賽事難度,Datawhale舉辦方將數據集進行了簡化,標註了街道圖片中字符的位置,通過json格式進行組織

Field Description
top 左上角座標X
left 左上角最表Y
height 字符高度
width 字符寬度
label 字符標籤

在這裏插入圖片描述
每張圖片會有多個字符,多個字符的json表示爲:
在這裏插入圖片描述
比如height,這個對象數組裏的元素分別是每個字符的表示。

多字符的情況
在這裏插入圖片描述

評測標準

評價標準爲準確率,選手提交結果與實際圖片的編碼進行對比,以編碼整體識別準確率爲評價指標,結果越大越好,具體計算公式如下:
score= score=\frac{識別正確的數量}{總測試集數量}

數據集

數據集圖片:mchar_train.zip(3萬張)
數據集圖片標籤:mchar_train.json
驗證集圖片:mchar_val.zip(1萬張)
驗證集標籤:mchar_val.json
測試集:mchar_test_a.zip(4萬張)
最後提交格式:mchar_sample_submit_A.csv

解題思路

  1. 簡單的不定長字符轉成定長
    比如最長的字符爲6位,那麼不滿6位的用特殊字符補齊。
    比如
    12->12XXXXXX
    12345->12345X
  2. 用CRNN對不定長字符進行識別
  3. 先檢測字符再識別
    在這裏插入圖片描述

數據讀取

可以根據座標信息把圖片中的數字提取出來。

import json
train_json = json.load(open('../input/train.json'))

# 數據標註處理
def parse_json(d):
   arr = np.array([
       d['top'], d['height'], d['left'],  d['width'], d['label']
   ])
   arr = arr.astype(int)
   return arr

img = cv2.imread('../input/train/000000.png')
arr = parse_json(train_json['000000.png'])

plt.figure(figsize=(10, 10))
plt.subplot(1, arr.shape[1]+1, 1)
plt.imshow(img)
plt.xticks([]); plt.yticks([])

for idx in range(arr.shape[1]):
   plt.subplot(1, arr.shape[1]+1, idx+2)
   plt.imshow(img[arr[0, idx]:arr[0, idx]+arr[1, idx],arr[2, idx]:arr[2, idx]+arr[3, idx]])
   plt.title(arr[4, idx])
   plt.xticks([]); plt.yticks([])

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章