零基礎入門CV賽事- 街景字符編碼識別Task1

在阿里天池拿到任務,總體判斷大賽目標和走向。街景字符編碼識別,從題目看就是計算機視覺的賽題。下面聊聊,我從拿到題目下來對賽題的理解。

1.賽題數據與實際的理解

從天池平臺下載下來包括3個zip壓縮文件,兩個json文件,和一個CSV數據文件。zip壓縮文件是一些png的圖片文件,也是機器學習的主要文件,分別爲訓練集,驗證集,和預測集。大概看了一下圖片,數字的大小,數量,位置,方向各不一樣。不過,好處就在大賽爲了降低難度,已經用json文件告知你圖片的大小,位置和圖片的內容的範圍。如下000000.png圖片及json內容:

{"000000.png": {"height": [219, 219], "label": [1, 9], "left": [246, 323], "top": [77, 81], "width": [81, 96]}}

做個解釋:

  1. height:字符的高度;
  2. label:字符的內容範圍;
  3. left:字符的左邊距;
  4. top:字符的上邊距;
  5. width:字符的寬度

不過有一點需要判斷的難點在於,字符的數量。

2.需要用到的Python模塊

這裏大概介紹一下,這裏可能需要用到的主要模塊。
numpy :提供了python對多維數組對象的支持:ndarray,具有矢量運算能力,快速、節省空間。numpy支持高級大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。這裏主要針對圖片字符位置的矢量運算。

torch:自稱爲神經網絡界的 Numpy, 因爲他能將 torch 產生的 tensor 放在 GPU 中加速運算 (前提是你有合適的 GPU), 就像 Numpy 會把 array 放在 CPU 中加速運算. 所以神經網絡的話, 當然是用 Torch 的 tensor 形式數據最好

torchvision:torchvision包是服務於pytorch深度學習框架的,用來生成圖片,視頻數據集,和一些流行的模型類和預訓練模型。我認爲這個是最關鍵的模塊

OpenCV(import時候是cv2):一款強大的跨平臺的計算機視覺庫,使用它能完成我們對於圖像和視頻處理的很多功能。它以電信號的方式加以捕捉、記錄、處理、儲存、傳送與重現的各種技術。這裏主要是用來對圖片的處理

json:這個就是json的讀寫庫,處理json文件的

3.代碼思路

import numpy as np
import cv2
import matplotlib.pyplot as plt
import json
train_json = json.load(open('cv/mchar_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('cv/mchar_train/mchar_train/000001.png')
arr = parse_json(train_json['000001.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([])
plt.show()

如上代碼,實現圖片字符的讀取,但是字符數量需要考慮的問題。處理思路有3種:

  1. 將不定長字符轉化爲定長處理,不足部分用標記爲代替
  2. 按照不定長字符處理
  3. 將不定長字符分類在進行處理

總結:

總的來說,還不錯,大概清楚解題思路,是一次自我提高的過程。

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