ホームページ  >  記事  >  バックエンド開発  >  letter_recognition.data データセットを使用して OpenCV-Python で単純な数字認識を実装するにはどうすればよいですか?

letter_recognition.data データセットを使用して OpenCV-Python で単純な数字認識を実装するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-08 07:19:02415ブラウズ

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. インスタンスを作成します。 KNearest 分類子。
  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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。