λμ μμ± μ½λ
import cv2
import numpy as np
import matplotlib.pylab as plt
# 0~158 κ΅¬κ° μμμ μ 25 x 2 μμ± ---β
a = np.random.randint(0,158,(25,2))
# 98~255 κ΅¬κ° μμμ μ 25 x 2 μμ± ---β‘
b = np.random.randint(98, 255,(25,2))
# a, bλ₯Ό λ³ν©, 50 x 2μ μμμ μ μμ± ---β’
trainData = np.vstack((a, b)).astype(np.float32)
# 0μΌλ‘ μ±μμ§ 50κ° λ°°μ΄ μμ± ---β£
responses = np.zeros((50,1), np.int32)
# 25 ~ 50 κΉμ§ 1λ‘ λ³κ²½ ---β€
responses[25:] = 1
# 0κ³Ό κ°μ μ리μ νμ΅ λ°μ΄νλ λΉ¨κ°μ μΌκ°νμΌλ‘ λΆλ₯ λ° νμ ---β₯
red = trainData[responses.ravel()==0]
plt.scatter(red[:,0],red[:,1],80,'r','^')
# 1κ³Ό κ°μ μ리μ νμ΅ λ°μ΄νλ νλμ μ¬κ°νμΌλ‘ λΆλ₯ λ° νμ ---β¦
blue = trainData[responses.ravel()==1]
plt.scatter(blue[:,0],blue[:,1],80,'b','s')
# 0~255 ꡬκ°μ μλ‘μ΄ μμμ μ μμ± λ° μ΄λ‘μ μμΌλ‘ νμ ---β§
newcomer = np.random.randint(0,255,(1,2)).astype(np.float32)
plt.scatter(newcomer[:,0],newcomer[:,1],80,'g','o')
# SVM μκ³ λ¦¬μ¦ κ°μ²΄ μμ± λ° νλ ¨---β¨
svm = cv2.ml.SVM_create()
svm.trainAuto(trainData, cv2.ml.ROW_SAMPLE, responses)
# svm_random.xml λ‘ μ μ₯ ---β©
svm.save('./svm_random.xml')
# μ μ₯ν λͺ¨λΈμ λ€μ μ½κΈ° ---βͺ
svm2 = cv2.ml.SVM_load('./svm_random.xml')
# μλ‘μ΄ μμμ μ μμΈ‘ ---β«
ret, results = svm2.predict(newcomer)
# κ²°κ³Ό νμ ---β¬
plt.annotate('red' if results[0]==0 else 'blue', xy=newcomer[0], xytext=(newcomer[0]+1))
print("return:%s, results:%s"%(ret, results))
plt.show()
μ½λ ν΄μ€
-
κ°κ° 25κ°μ λμ μμ±, μ½κ° κ²ΉμΉλ ꡬκ°μ΄ μκ² 0~158, 98~255
-
μ΄ λμ ν©μ³μ 50κ°μ λμ λ§λ€κΈ°
-
λ μ΄λΈλ‘ μ¬μ©ν 50κ°μ 0μΌλ‘ μ±μμ§ λ°°μ΄ λ§λ€κΈ°
-
κ·Έ μ€ 25λ²μ¨° μ΄νμ λͺ¨λ μμλ₯Ό 1λ‘ μ±μμ μ λ°μ© 0 κ³Ό 1μ΄ μ±μμ§κ²ν¨.
-
κ°κ°μ λ μ΄λΈμ λ§λ μλ²μ νμ΅ λ°μ΄ν°λ₯Ό redμ blueλ‘ λΆλ₯νκ³ νμ
-
μμΈ‘μ μ¬μ©ν μλ‘μ΄ λμλ₯Ό λ°μνκ³ μ΄λ‘μ μμΌλ‘ νμ
-
SVM μκ³ λ¦¬μ¦ κ°μ²΄λ₯Ό μμ±νκ³ trainAuto()ν¨μ μ¨μ νλ ¨
-
λͺ¨λΈ κ°μ²΄ νμΌλ‘ μ μ₯νλ€κ° λ€μ μ½μ΄λ€μ΄λ λͺ¨μ΅ 보μ¬μ£ΌκΈ°
-
μλ‘μ΄ λμλ₯Ό μμΈ‘νκ³ κ·Έ κ²°κ³Όλ₯Ό μ½λμ νκΈ°