图像处理案例03
创始人
2024-11-13 18:38:12

HOG+SVM数字识别

  • 1 . 步骤
  • 2 . 代码

1 . 步骤

  1. 读入数据,把数据划分为训练集和测试集
  2. 用hog提取特征
  3. 用SVM训练数据
  4. 测试、评价模型
  5. 保存模型
  6. 加载模型,应用模型

2 . 代码

import os import cv2 import sklearn import numpy as np from skimage.feature import hog from skimage import data,exposure from sklearn import svm from sklearn.metrics import accuracy_score import matplotlib.pyplot as plt import seaborn as sn import pandas  as pd from joblib import dump,load from sklearn.metrics import confusion_matrix  # 1. 读入数据 # 1.1 处理数据,获取图像的地址和标签,划分训练集、测试集,对数据集打乱顺序 data_path = r'./hand_nums' tmp_train = os.listdir(data_path+'/train') tmp_test = os.listdir(data_path+'/test') train_x ,test_x = [],[] ## 1.2 获取图像的地址,把训练集和测试集的特征和标签 test_y ,test_y = [],[] for i in tmp_train:     if i.endswith('.bmp'):         train_x.append(data_path+'/train/'+i)         train_y.append(int(i.split('-')[0])) for i in tmp_test:     if i.endswith('.bmp'):         test_x.append(data_path+'/test/'+i)         test_y.append(int(i.split('.')[0])) ## 1.3 打乱数据的顺序 ## 训练集、测试集的下标 train_idx = np.arange(len(train_x)) test_idx = np.arange(len(test_x)) ## 打乱顺序 np.random.shuffle(train_idx) np.random.shuffle(test_idx) ## 训练集、测试集打乱顺序 train_x = list(np.array(train_x)[train_idx]) test_x = list(np.array(test_x)[test_idx]) train_y = list(np.array(train_y)[train_idx]) test_y = list(np.array(test_y)[test_idx])  # 2. 用hog提取特征 ## 2.1 hog实例化 train_feature,test_feature = [],[] ## 获取训练集特征 for i in train_x:     img_gray = cv2.imread(i,0)     fd , img_hog = hog(img_gray,orientations=9,pixels_per_cell=(8,8),                      cells_per_block=(2,2),visualize=True)     train_feature.append(img_hog.flatten()) ## 获取测试集特征 for i in test_x:     img_gray = cv2.imread(i,0)     fd,img_hog = hog(img_gray,orientations=9,pixels_per_cell=(8,8),                      cells_per_block=(2,2),visualize=True)     test_feature.append(img_hog.flatten())  # 3 SVM训练 clf = svm.SVC(decision_function_shape='ovo') clf.fit(train_feature ,train_y) # 4. 测试、评价模型 dec = clf.decision_function(test_feature) pred_y = clf.predict(test_feature) accuracy_score(pred_y,test_y) # 5. 保存模型 from joblib import dump,load ## 保存模型 dump(clf,'./hand_nums/models/poly.joblib') ## 加载模型 new_cls = load('./hand_nums/models/poly.joblib') pred_y = new_cls.predict(test_feature) accuracy_score(pred_y,test_y)   # 6. 加载模型,应用模型 clf_poly = svm.SVC(decision_function_shape='ovo',kernel='poly') clf_poly.fit(train_feature ,train_y) dec = clf_poly.decision_function(test_feature) pred_y = clf_poly.predict(test_feature) accuracy_score(pred_y,test_y)  clf_linear = svm.SVC(decision_function_shape='ovo',kernel='linear') clf_linear.fit(train_feature ,train_y) dec = clf_linear.decision_function(test_feature) pred_y = clf_linear.predict(test_feature) accuracy_score(pred_y,test_y) cm = confusion_matrix(test_y,pred_y)  df_cm = pd.Dataframe(cm,index=[i for i in ['0','1','2','3','4','5','6','7','8','9']],                      columns = [i for i in ['0','1','2','3','4','5','6','7','8','9']]) plt.figure(figsize=(10,7)) sn.heatmap(df_cm,annot=True,cmap='Green',fmt='d')  

准确率 1.0
嘻嘻😁
数据集:链接:https://pan.baidu.com/s/1yFCJvcswdSgGcAN6n9u-nA 密码:ryqo

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...