如何使用 letter_recognition.data 資料集在 OpenCV-Python 中實現簡單的數字識別?

Barbara Streisand
發布: 2024-11-08 07:19:02
原創
412 人瀏覽過

How to Implement Simple Digit Recognition in OpenCV-Python using the letter_recognition.data Dataset?

OpenCV-Python 中的簡單數字識別OCR

問題1

letter_recognition.data 檔案是包含20,000 個手寫字母樣本的資料集,每個字母代表16 個特徵。要從您自己的資料集建立類似的文件,您可以按照以下步驟操作:

  1. 從每個字母影像中提取像素值。
  2. 將像素值儲存在陣列中。
  3. 建立一個包含每個字母標籤的對應陣列。
  4. 使用 NumPy 的 savetxt() 函數將兩個陣列儲存到文字檔案。

問題 2

results.reval() 是 OpenCV 的 KNearest 類別的 find_nearest() 函數傳回的輸出陣列。它包含給定樣本的預測標籤。

問題3

要使用letter_recognition.data 檔案編寫一個簡單的數位辨識工具,您可以按照以下步驟操作:

訓練:

  1. 載入letter_recognition.data 檔案。
  2. 從文件中提取樣本和回應。
  3. 建立一個實例K最近的分類器。
  4. 使用樣本和反應訓練分類器。

測試:

  1. 載入包含數字的圖像
  2. 預處理圖像以提取單個數字。
  3. 從每個數字中提取像素值並將它們儲存在數組中。
  4. 使用經過訓練的分類器來預測每個數字的標籤。
  5. 在影像上顯示辨識的數字。

以下是示範訓練和測試過程的範例程式碼:

import numpy as np
import cv2

# Load training data
samples = np.loadtxt('letter_recognition.data', np.float32, delimiter=',', converters={0: lambda ch: ord(ch) - ord('A')})
responses = samples[:, 0]
samples = samples[:, 1:]

# Create KNearest classifier
model = cv2.KNearest()

# Train the classifier
model.train(samples, responses)

# Load test image
test_image = cv2.imread('test_image.png')

# Preprocess the image
gray = cv2.cvtColor(test_image, cv2.COLOR_BGR2GRAY)
thresh = cv2.adaptiveThreshold(gray, 255, 1, 1, 11, 2)

# Extract digits
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

digits = []

for cnt in contours:
    if cv2.contourArea(cnt) > 50:
        [x, y, w, h] = cv2.boundingRect(cnt)
        roi = thresh[y:y + h, x:x + w]
        roismall = cv2.resize(roi, (10, 10))
        digits.append(roismall)

# Predict labels for digits
results = model.find_nearest(np.array(digits), 10)
labels = [chr(ch + ord('A')) for ch in results[0]]

# Display recognized digits on the image
for i, label in enumerate(labels):
    cv2.putText(test_image, str(label), (digits[i][0], digits[i][1]), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0))

cv2.imshow('Recognized Digits', test_image)
cv2.waitKey(0)
登入後複製

透過遵循這些步驟並利用OpenCV 中的KNearest 分類器,您可以建立一個基本的數位識別工具,可以進一步改進該工具以執行更複雜的數位識別任務。

以上是如何使用 letter_recognition.data 資料集在 OpenCV-Python 中實現簡單的數字識別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板