letter_recognition.data 檔案是包含20,000 個手寫字母樣本的資料集,每個字母代表16 個特徵。要從您自己的資料集建立類似的文件,您可以按照以下步驟操作:
results.reval() 是 OpenCV 的 KNearest 類別的 find_nearest() 函數傳回的輸出陣列。它包含給定樣本的預測標籤。
要使用letter_recognition.data 檔案編寫一個簡單的數位辨識工具,您可以按照以下步驟操作:
訓練:
測試:
以下是示範訓練和測試過程的範例程式碼:
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中文網其他相關文章!