ホームページ バックエンド開発 Python チュートリアル KNearest および SVM アルゴリズムを使用して、OpenCV-Python で基本的な数字認識 OCR システムを実装するにはどうすればよいですか?

KNearest および SVM アルゴリズムを使用して、OpenCV-Python で基本的な数字認識 OCR システムを実装するにはどうすればよいですか?

Nov 08, 2024 pm 04:21 PM

How can I implement a basic digit recognition OCR system in OpenCV-Python using KNearest and SVM algorithms?

OpenCV-Python での単純な数字認識 OCR

概要

この記事は、ガイドを目的としています基本的な数字認識 OCR (光学式文字認識) の実装を通じて、 OpenCV-Pythonを使用したシステム。 KNearest と SVM という 2 つの一般的な機械学習アルゴリズムについて説明します。

質問 1: Letter_recognition.data ファイル

Letter_recognition.data は、OpenCV-Python に含まれるデータセットです。サンプル。これには、手書きの文字のコレクションと各文字の 16 個の特徴値が含まれています。このファイルは、さまざまな文字認識タスクのトレーニング データとして機能します。

独自の Letter_recognition.data の構築:

次の手順に従って、独自の Letter_recognition.data ファイルを作成できます。 :

  1. 各文字を として表現した文字データセットを準備します。 10x10 ピクセルの画像。
  2. 各画像からピクセル値を抽出して、100 個の値の特徴ベクトルを形成します。
  3. 各文字にラベル (A ~ Z に対応する 0 ~ 25) を手動で割り当てます。
  4. 各行の形式を指定して、特徴ベクトルとラベルをテキスト ファイルに保存します。 <label>、<feature1>、<feature2>、...、<feature100>

質問 2: KNearest の results.ravel()

results.ravel() は配列を変換します認識された数字を多次元配列からフラットな 1D 配列に変換します。これにより、結果の解釈と表示が容易になります。

質問 3: 単純な数字認識ツール

letter_recognition.data を使用して単純な数字認識ツールを作成するには、次の手順に従います。手順:

データ準備:

  • カスタムのletter_recognition.data ファイルをロードするか、OpenCV のサンプルを使用します。

トレーニング:

  • KNearest または SVM 分類器を作成するインスタンス。
  • letter_recognition.data からのサンプルと応答を使用して分類器をトレーニングします。

テスト:

  • 画像をロードします認識される数字が含まれています。
  • 画像を前処理して個々の情報を分離します数字。
  • 各数字を特徴ベクトル (100 ピクセル値) に変換します。
  • トレーニングされた分類子を使用して、各特徴ベクトルに最も近い一致を見つけ、対応する数字を表示します。

コード例:

import numpy as np
import cv2

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

# Create classifier
model = cv2.KNearest()
model.train(samples, responses)

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

# Preprocess image
gray = cv2.cvtColor(test_img, 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) &gt; 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)

# Recognize digits
results = []
for digit in digits:
    roismall = roismall.reshape((1, 100))
    roismall = np.float32(roismall)
    _, results, _, _ = model.find_nearest(roismall, k=1)
    results = results.ravel()
    results = [chr(int(res) + ord('A')) for res in results]

# Display results
output = cv2.cvtColor(test_img, cv2.COLOR_BGR2RGB)
for (digit, (x, y, w, h)) in zip(results, contours):
    cv2.rectangle(output, (x, y), (x + w, y + h), (0, 255, 0), 2)
    cv2.putText(output, str(digit), (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

cv2.imshow('Output', output)
cv2.waitKey(0)
ログイン後にコピー

この例では、数字認識には KNearest を使用しますが、代わりに SVM 分類子を作成することで、SVM に置き換えることができます。

以上がKNearest および SVM アルゴリズムを使用して、OpenCV-Python で基本的な数字認識 OCR システムを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

HTMLを解析するために美しいスープを使用するにはどうすればよいですか? HTMLを解析するために美しいスープを使用するにはどうすればよいですか? Mar 10, 2025 pm 06:54 PM

HTMLを解析するために美しいスープを使用するにはどうすればよいですか?

Pythonでファイルをダウンロードする方法 Pythonでファイルをダウンロードする方法 Mar 01, 2025 am 10:03 AM

Pythonでファイルをダウンロードする方法

Pythonでの画像フィルタリング Pythonでの画像フィルタリング Mar 03, 2025 am 09:44 AM

Pythonでの画像フィルタリング

Pythonを使用してテキストファイルのZIPF配布を見つける方法 Pythonを使用してテキストファイルのZIPF配布を見つける方法 Mar 05, 2025 am 09:58 AM

Pythonを使用してテキストファイルのZIPF配布を見つける方法

Pythonを使用してPDFドキュメントの操作方法 Pythonを使用してPDFドキュメントの操作方法 Mar 02, 2025 am 09:54 AM

Pythonを使用してPDFドキュメントの操作方法

DjangoアプリケーションでRedisを使用してキャッシュする方法 DjangoアプリケーションでRedisを使用してキャッシュする方法 Mar 02, 2025 am 10:10 AM

DjangoアプリケーションでRedisを使用してキャッシュする方法

TensorflowまたはPytorchで深い学習を実行する方法は? TensorflowまたはPytorchで深い学習を実行する方法は? Mar 10, 2025 pm 06:52 PM

TensorflowまたはPytorchで深い学習を実行する方法は?

Natural Language Toolkit(NLTK)の紹介 Natural Language Toolkit(NLTK)の紹介 Mar 01, 2025 am 10:05 AM

Natural Language Toolkit(NLTK)の紹介

See all articles