SVM+hog特征实现手势识别

上一篇写到了SVM, 自己也花了大量的时间去看了原理。。。但总觉得没有示例的话还是有点虚。同时也一直想要做一个手势分类的项目玩。那趁自己还没有忘记,赶紧把项目给搞了,顺带巩固一下知识。使用MATLAB实现。

前提知识:

需要了解:

hog特征:https://blog.csdn.net/yuanjiteng/article/details/99608311

SVM分类的基本原理:https://blog.csdn.net/yuanjiteng/article/details/99413090

MATLAB使用到的函数解析:

1. imageDatastore

imageDatastore:imds = imageDatastore('./images', 'IncludeSubfolders', true, 'labelsource', 'foldernames')

创建一个图像数据储存体以处理图像集

其中第一个属性可以是文件名,可以是图片文件夹路径,可以是所有文件

第二个参数:‘IncludeSubfolders’ 是否包括子文件夹 、true/false 子文件夹递归/不递归(recusively)

参数:FileExtensions’,EXTENSIONS 要包括的文件的扩展名,比如“.png”,".jpg"

参数:‘ReadSize’,READSIZE 调用读取函数时要读取的图像文件数。默认情况下,读取大小为 1。

参数:‘LabelSource’,SOURCE LABELS 指定标签来源,默认是无,是’foldernames’就是文件夹名称做标签

参数:‘Labels’ LABELS 指定数据存储标签,LABELS是一数组或向量。

imd属性:Files ReadSize ReadFcn Lables

可以对imd执行的操作函数:

​ read - 读取下一个连续文件
​ reset - 将数据存储重置为数据的开头
​ preview - 从数据存储读取第一个图像
​ readimage - 从数据存储读取指定图像
​ readall - 从数据存储读取所有图像文件
​ partition - 返回表示单个 原始数据存储的分区部分
​ numpartitions - 返回合理数量的估计值分区与分区函数一起使用,
countEachLable - 计数图像数据存储中的唯一标签的数量

有一个很重要的 [imds1,imds2] = splitEachLabel(imds, p); p为小数代表百分比,p为整数代表从该整数分

  1. extractHogFeatures

    提取hog特征 使用方法 其中获得的features就是hog特征矩阵:

    features = extractHOGFeatures(I)

    [features, validPoints] = extractHOGFeatures(I, points)

    %这个用法了解不多,对特殊的点求特征值

    [..., visualization] = extractHOGFeatures(I, ...)

    %一般而言使用这个,optionally returns a HOG feature visualization that can be shown using plot(visualization)

    [...] = extractHOGFeatures(..., Name, Value)

    其中可以设置参数和值:

    CellSize 默认是[8,8]

    BlockSize 默认是[2,2]

    BlockOverlap 默认 ceil(BlockSize/2)

    ‘NumBins’ 默认9

    ‘UseSignedOrientation’ 默认false 代表0-180°,true就是-180-180°

    使用案例:

    I1 = imread('gantrycrane.png'); [hog1, visualization] = extractHOGFeatures(I1,'CellSize',[32 32]); subplot(1,2,1); imshow(I1); subplot(1,2,2); plot(visualization);

  2. fitcecoc 这个是MATLAB自带的分类函数 用libsvm的自己了解

    用法:OBJ=FITCECOC(TBL,Y) TBL就是数据集向量 Y是标签 返回object 1v1方法

    关于MATLAB其他多分类可以参考:https://cloud.tencent.com/info/b061682362bea1b7040237c09413d437.html

    分类matlab代码

clear;clc
imdsTrain=  imageDatastore('./trainimages', 'IncludeSubfolders', true,  'labelsource', 'foldernames');
%这里选择自己的文件夹路径,我的是文件夹trainimages里面含有left right 等图片文件夹
imdsTest = imageDatastore('./Test1');  %测试文件夹路径
Train_disp = countEachLabel(imdsTrain);imageSize = [256,256];% 对所有图像进行此尺寸的缩放
image1 = readimage(imdsTrain,1);
scaleImage = imresize(image1,imageSize);
[features, visualization] = extractHOGFeatures(scaleImage);%获取feature的大小numImages = length(imdsTrain.Files)%获取训练图片数
featuresTrain = zeros(numImages,size(features,2),'single'); %构造矩阵for i = 1:numImages  imageTrain = readimage(imdsTrain,i);  imageTrain = imresize(imageTrain,imageSize);  featuresTrain(i,:) = extractHOGFeatures(imageTrain);
end  %获取所有features 存储在featuresTrain中
trainLabels = imdsTrain.Labels; %训练标签
%开始训练并验证
classifer = fitcecoc(featuresTrain,trainLabels);
cvecoc = crossval(classifer);
oosLoss=kfoldLoss(cvecoc);
%%预测
numTest = length(imdsTest.Files);for i=1:numTest
testImage = readimage(imdsTest,i);
scaleTestImage = imresize(testImage,imageSize);
featureTest = extractHOGFeatures(scaleTestImage);
[predictIndex,score] = predict(classifer,featureTest);
figure;
imshow(testImage);
title(['predictImage: ',char(predictIndex)]);
end

运行结果

oosLoss=0.0806 分类结果还行,可以接受。

如果想要进一步把训练的

MATLAB的.mat文件 转换为.yml文件,从而可以在opencv打开,参考下面:

:https://www.jianshu.com/p/ad6a2f8a3fc8

总结

视觉图像领域的函数使用起来总是非常的复杂,其中fitcecoc函数可以实现的功能很多,想要彻底了解其用法还是去MATLAB打开文件慢慢看吧。我这只是拿来练习一下svm的使用。

实现了图片分类之后,下一步就应该是实现视频的实时读取和预测,其中又涉及到滑窗建立然后概率判断问题,再有就是GPU的使用提高效率,具体就参看hog行人检测代码。实时手势识别使用openpose在opencv实现或者yolo都是不错的选择。

# 支持向量机+hog特征实现手势识别相关推荐

  1. 使用opencv作物件识别(一) —— 积分直方图加速HOG特征计算

    使用opencv作物件识别(一) -- 积分直方图加速HOG特征计算 博客分类: 图像识别.机器学习.数据挖掘 CC++C#  方向梯度直方图(Histograms of Oriented Gradi ...

  2. 图像特征提取与描述_角点特征04:LBP算法+HOG特征算子

    1.LBP算法 LBP(Local Binary Pattern)指局部二值模式,是一种用来描述图像局部特征的算子,LBP特征具有灰度不变性和旋转不变性等显著优点.它是由T. Ojala, M.Pie ...

  3. 深入浅出理解HOG特征---梯度方向直方图

    梯度方向直方图 原文路径:https://www.learnopencv.com/histogram-of-oriented-gradients/ 最近在搞车牌识别的时候,训练样本去识别车牌的时候用到 ...

  4. 目标检测(三)传统目标检测与识别的特征提取——基于HOG特征的目标检测原理

    目录 简介 提取HOG特征的步骤 1.预处理获取要计算其特征的输入图像 2.计算图像的梯度 3.计算8×8细胞梯度直方图 4.直方图归一化 5.计算HOG特征向量 Opencv利用HOG特征实现行人检 ...

  5. 【特征检测】HOG特征算法

    简介 HOG(Histogram of Oriented Gridients的简写)特征检测算法,最早是由法国研究员Dalal等在CVPR-2005上提出来的,一种解决人体目标检测的图像描述子,是一种 ...

  6. svm性别识别及HOG特征原理浅析

     HOG特征原理主要参考http://blog.csdn.net/abcjennifer/article/details/7365651 HOG即histogram of oriented gra ...

  7. 图像特征提取三大法宝:HOG特征、LBP特征、Haar-like特征

    (一)HOG特征 1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和 ...

  8. 车牌识别--提取HOG特征

    最近在研究车牌识别,利用到Opencv的ml.hpp,里面实现了各种机器学习算法,包括harrcascade.traincascade.支持向量机SVM提取HOG梯度向量特征,人工神经网络等等,而车牌 ...

  9. LBP和HOG特征算子

    1.LBP算法 LBP(Local Binary Pattern)指局部二值模式,是一种用来描述图像局部特征的算子,LBP特征具有灰度不变性和旋转不变性等显著优点.它是由T. Ojala, M.Pie ...

最新文章

  1. 数学图形(1.40)T_parameter
  2. 推荐8款我最常用的办公软件,解决痛点问题!
  3. 大数系列三——斐波那契数列——高效万进制,亿进制
  4. 哈希运算python实现_一致性哈希算法 python实现
  5. python标准库有pickle_Python标准库05 存储对象 (pickle包,cPickle包)-阿里云开发者社区...
  6. c语言字符型运算符,C语言试题:数据类型、运算符与表达式
  7. tf.get_variable与tf.variable_scope
  8. centos linux 通过yum安装nginx
  9. Excel VBA 设计调查问卷
  10. 如何突破四维空间,进入五维空间
  11. 解决在Python的matplotlib.pyplot图表中显示中文
  12. Python中条件判读语句if的使用详解
  13. js-array数组-slice-splice
  14. 翔工作室网站策划逻辑图:(online.cumt.edu.cn)
  15. vmware虚拟机windows xp 登录后死掉不能修复的错误的解决
  16. MySQL自然连接删除重复列的问题
  17. 发一份魔兽改键工具的代码,vc6.0环境,带聊天模式识别功能
  18. SitePoint播客#47:将死苹果
  19. json数据和对象的区别
  20. 推荐收藏!10大程序员必备生产力工具

热门文章

  1. 【开源案例】基于机智云物联网平台的懒人版智能花盆
  2. Android Study 之真正解决TextView字间距,那些扯淡的边儿去吧
  3. J2EE--自定义mvc增删改查
  4. 故事版(StoryBoard)的学习-----使用prepareForSegue方法
  5. IOS App的生命周期
  6. 爱奇艺、新英体育宣布成立合资公司,共造超级在线体育平台
  7. fatal The remote end hung up unexpectedly
  8. 面试题系列:Mysql 夺命13问,你能扛到第几问?
  9. 【No server address listed in hbase:meta for region XX】
  10. Day10.事件下(学习日记10)