๐Ÿ˜Svm Handwritten

import cv2
import numpy as np
import mnist
import svm_mnist_hog_train 


# ํ›ˆ๋ จํ•ด์„œ ์ €์žฅํ•œ SVM ๊ฐ์ฒด ์ฝ๊ธฐ ---โ‘  
svm = cv2.ml.SVM_load('./svm_mnist.xml')
# ์ธ์‹ํ•  ์†๊ธ€์”จ ์ด๋ฏธ์ง€ ์ฝ๊ธฐ ---โ‘ก
image = cv2.imread('../img/4027.png')
cv2.imshow("image", image)
cv2.waitKey(0) 

# ์ธ์‹ํ•  ์ด๋ฏธ์ง€๋ฅผ ๊ทธ๋ ˆ์ด ์Šค์ผ€์ผ๋กœ ๋ณ€ํ™˜ ๋ฐ ์Šค๋ ˆ์‹œํ™€๋“œ ์ ์šฉ ---โ‘ข
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (5, 5), 0)
_, gray = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)

# ์ตœ์™ธ๊ณฝ ์ปจํˆฌ์–ด๋งŒ ์ฐพ๊ธฐ ---โ‘ฃ
contours, _ = cv2.findContours(gray, cv2.RETR_EXTERNAL, \
                                        cv2.CHAIN_APPROX_SIMPLE)[-2:]
for c in contours:
    # ์ปจํˆฌ์–ด๋ฅผ ๊ฐ์‹ธ๋Š” ์™ธ์ ‘ ์‚ฌ๊ฐํ˜• ๊ตฌํ•˜๊ธฐ ---โ‘ค
    (x, y, w, h) = cv2.boundingRect(c)    
    # ์™ธ์ ‘ ์‚ฌ๊ฐํ˜•์˜ ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์ž‘์€๊ฒƒ์€ ์ œ์™ธ ---โ‘ฅ
    if w >= 5 and h >= 25:
        # ์ˆซ์ž ์˜์—ญ๋งŒ roi๋กœ ํ™•๋ณดํ•˜๊ณ  ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ ---โ‘ฆ
        roi = gray[y:y + h, x:x + w]
        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 1)
        # ํ…Œ์ŠคํŠธ ๋ฐ์ดํƒ€ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ ---โ‘ง
        px20 = mnist.digit2data(roi, False)
        # ๊ธฐ์šธ์–ด์ง„ ์ˆซ์ž๋ฅผ ๋ฐ”๋กœ ์„ธ์šฐ๊ธฐ ---โ‘จ
        deskewed = svm_mnist_hog_train.deskew(px20)
        # ์ธ์‹ํ•  ์ˆซ์ž์— ๋Œ€ํ•œ HOG ๋””์Šคํฌ๋ฆฝํ„ฐ ๊ณ„์‚ฐ ---โ‘ฉ
        hogdata = svm_mnist_hog_train.hogDesc.compute(deskewed)
        testData = np.float32(hogdata).reshape(-1, hogdata.shape[0])
        # ๊ฒฐ๊ณผ ์˜ˆ์ธกํ•ด์„œ ํ‘œ์‹œ ---โ‘ช
        ret, result = svm.predict(testData)
        cv2.putText(image, "%d"%result[0], (x , y + 155), \
                        cv2.FONT_HERSHEY_COMPLEX, 2, (255, 0, 0), 2)
        cv2.imshow("image", image)
        cv2.waitKey(0) 
cv2.destroyAllWindows()

์‹คํ–‰๊ฒฐ๊ณผ