/puke-reco

Primary LanguageC++BSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

本项目使用libsvm, 进行扑克牌识别, 语言使用python, 项目中已经集成了libsvm

Libsvm 在 http://www.csie.ntu.edu.tw/~cjlin/libsvm 可以获取到。

目录
=================

- 初步运行
- 特征获取
- 创建训练集合
- 结果执行

初步运行
===========

运行python python/feature_train.py 得到 feature/train.txt
运行python python/feature_test.py 得到 feature/test.txt

运行python python/test.py 输出测试结果

optimization finished, #iter = 1
nu = 0.200000
obj = -1.000000, rho = 0.000000
nSV = 2, nBSV = 0
Total nSV = 12
Accuracy = 28.5714% (2/7) (classification)

准确率为28.5714%,当然这个准确率让人失望

特征获取(python/jpgtodata.py)
============================

项目目前采用的特征获取方法是以x和y轴的投影

例如train_sample/1j.jpg,先将图片压缩成75*100的图片。然后进行二值化处理

以x轴,y轴遍历, 获得如下

x轴的投影矩阵为
[  0.  16.   8.   7.   8.  15.  13.  17.   8.   4.  60.  33.  39.  36.  42.
  40.  37.  37.  51.  48.  40.  42.  31.  40.  35.  33.  34.  31.  34.  35.
  35.  42.  42.  48.  48.  38.  43.  48.  44.  43.  45.  48.  45.  40.  37.
  48.  33.  32.  32.  31.  36.  40.  38.  36.  41.  49.  42.  47.  37.  41.
  33.  42.  31.  33.  33.  27.  40.   4.  10.  10.   8.   6.   5.   6.   4.]

y轴的投影矩阵为
[  0.   0.   1.   4.   4.   3.   6.   7.  23.  19.  31.  24.  33.  21.  17.
  15.  23.  19.  25.  28.  31.  27.  28.  12.  20.  16.  16.  26.  31.  37.
  32.  34.  36.  41.  29.  28.  32.  29.  37.  24.  35.  29.  34.  30.  30.
  27.  28.  38.  34.  42.  25.  31.  28.  41.  20.  34.  28.  28.  29.  35.
  39.  36.  33.  32.  27.  34.  28.  19.  30.  29.  39.  26.  31.  30.  25.
  28.  12.  12.  14.  12.  20.  32.  28.  28.  26.  23.  14.  16.  15.  24.
  30.  22.  22.  24.  28.   4.   1.   2.   4.   1.]

水平合并x, y轴投影矩阵,形成175长的一维矩阵

运行python python/feature_train.py 得到 feature/train.txt

第一位为类别分别是

0: 黑桃J
1: 红桃J
2: 草花J
3: 方块J
4: 黑桃Q
5: 红桃Q
6: 草花Q
7: 方块Q
8: 黑桃K
9: 红桃K
10: 草花K
11: 方块K

后面175位为175长的特征矩阵
格式为[索引值:数值](libsvm规定格式)

同理运行python python/feature_test.py 得到 feature/test.txt

结果执行
===================

执行python/test.py

svm_read_problem 为读取特征文件(feature/train.txt, feature/test.txt)

svm_train 训练样本, 返回结果为分类器,可以用svm_save_model和svm_load_model保存和读取。

svm_predict 测试样本,也可以用来验证新来样本,新来样本的txt文件的第一位分类可以随便填写或者填写不存在的分类都可

结果

optimization finished, #iter = 1
nu = 0.200000
obj = -1.000000, rho = 0.000000
nSV = 2, nBSV = 0
Total nSV = 12
Accuracy = 28.5714% (2/7) (classification)