python 使用SVM进行简单的图像分类
生活随笔
收集整理的這篇文章主要介紹了
python 使用SVM进行简单的图像分类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.首先進行數據處理
import numpy as np #用于數據處理 from matplotlib import pyplot as plt #用于顯示圖像和畫圖 from sklearn import svm #導入支持向量機 from sklearn.model_selection import train_test_split #用于數據集劃分 from sklearn.metrics import accuracy_score #用于計算正確率 import cv2 #用于讀取圖片 import os #文件讀取 import pickle #用于模型的保存 from PIL import ImageSHAPE = (30, 30) #設置輸入圖片的大小1.1文件的結構如下
圖片不用太多,一類幾張即可
替換成自己的圖片以及目錄即可
1.2接下來圖片的預處理函數(上方有調用到)
def extractFeaturesFromImage(self,image_file):img = cv2.imread(image_file)#讀取圖片img = cv2.resize(img, self.SHAPE, interpolation=cv2.INTER_CUBIC)#對圖片進行risize操作統一大小img = img.flatten()#對圖像進行降維操作,方便算法計算img = img / np.mean(img)#歸一化,突出特征return img2.svm模型訓練
def train(self,dir):#數據獲取,這里Svm_derection是自定義類的名稱feature_array, label_array = Svm_derection.getImageData(self.directory)#數據的分割X_train, X_test, y_train, y_test = train_test_split(feature_array, label_array, test_size=0.2, random_state=42)print("shape of raw image data: {0}".format(feature_array.shape))print("shape of raw image data: {0}".format(X_train.shape))print("shape of raw image data: {0}".format(X_test.shape))#模型的選擇clf = svm.SVC(gamma=0.001, C=100., probability=True)#模型的訓練clf.fit(X_train, y_train);#模型測試Ypred = clf.predict(X_test);print("pre",Ypred)print("test",y_test)#模型保存pickle.dump(clf, open("svm.pkl", "wb"))3.模型讀取使用
def test(self,path,img_file):pkl_file = open(path, 'rb')clf=pickle.load(pkl_file)Ypred = clf.predict(np.reshape(self.extractFeaturesFromImage(img_file),(1,2700)))return Ypred4.運行代碼
path='svm.pkl'#模型保存位置以及名字 img='derection/'#數據集位置 img_file='derection/f1/1.jpg'#測試圖片位置 train(img) t=test(path,img_file) print(t) img = Image.open(os.path.join('derection/f1/1.jpg')) plt.figure("Image") # 圖像窗口名稱 plt.imshow(img) plt.axis('off') # 關掉坐標軸為 off plt.title(t) # 圖像題目 plt.show()5.結果展示
總結
以上是生活随笔為你收集整理的python 使用SVM进行简单的图像分类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运筹帷幄
- 下一篇: 网易企业邮箱搬家步骤