python安装libsvm
⑴ 如何在linux中libsvm与gunplot
1、下载:先到http://www.csie.ntu.e.tw/~cjlin/libsvm/下载Linux下对版本tar.gz 。
2、解压缩:解压缩到任一目录下,这里我解压到/home/xxxxxx/libsvm-2.91。/home/xxxxxx/是我的用户目录,xxxxxx是用户名。
3、编译:进入到/home/xxxxxx/libsvm-2.91,输入命令make(即可完成安装,但有时候会出现下列错误)
g++ -Wall -Wconversion -O3 -fPIC -c svm.cpp
make: g++: Command not found
make: *** [svm.o] Error 127
4、错误解决:此错误为没有对应编译器,需要安装。
5、安装g++编译器:在终端输入命令 apt-get install g++
6、再编译:安装g++成功后,即可再编译,编译成功即可用libsvm
7、Libsvm使用
A.使用svm-train训练:在终端中输入./svm-train heart_scale
B.使用svm-predict预测:在终端输入./svm-predict heart_scale heart_scale.model out
heart_scale为test file, heart_scale.model是由svm-train训练出来对模型文件,out为预测输出文件。
8、如果想使用easy.py和grid.py更快的执行以上第7步骤的工作。因为Ubuntu中已经安装了python和gunplot,所以这两个软件对安装工作可以省略。进入/home/xxxxxx/libsvm-2.91/tools到目录后,只需要在终端中输入:
python easy.py /home/xxxxxx/libsvm-2.91/SYN /home/xxxxxx/libsvm-2.91/SYN2NMF
这里SYN为用来构建模型对训练文件;SYN2NMF为需要预测对文件
运行结果:
Best c=2.0, g=0.0078125 CV rate=77.45
Training...
Output model: SYN.model
Scaling testing data...
Testing...
Accuracy = 83.35% (1667/2000) (classification)
Output prediction: SYN2NMF.predict
关于Linux命令的介绍,看看《linux就该这么学》,具体关于这一章地址3w(dot)linuxprobe/chapter-02(dot)html
PS:在安装过程中,最好首先在终端中输入 sudo -i 切换为root用户模式,避免权限错误。
⑵ 如何利用Python做简单的验证码识别
1摘要
验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的防火墙功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻。本文介绍了一套字符验证码识别的完整流程,对于验证码安全和OCR识别技术都有一定的借鉴意义。
然后经过了一年的时间,笔者又研究和get到了一种更强大的基于CNN卷积神经网络的直接端到端的验证识别技术(文章不是我的,然后我把源码整理了下,介绍和源码在这里面):
基于python语言的tensorflow的‘端到端’的字符型验证码识别源码整理(github源码分享)
2关键词
关键词:安全,字符图片,验证码识别,OCR,Python,SVM,PIL
3免责声明
本文研究所用素材来自于某旧Web框架的网站完全对外公开的公共图片资源。
本文只做了该网站对外公开的公共图片资源进行了爬取,并未越权做任何多余操作。
本文在书写相关报告的时候已经隐去漏洞网站的身份信息。
本文作者已经通知网站相关人员此系统漏洞,并积极向新系统转移。
本报告的主要目的也仅是用于OCR交流学习和引起大家对验证安全的警觉。
4引言
关于验证码的非技术部分的介绍,可以参考以前写的一篇科普类的文章:
互联网安全防火墙(1)--网络验证码的科普
里面对验证码的种类,使用场景,作用,主要的识别技术等等进行了讲解,然而并没有涉及到任何技术内容。本章内容则作为它的技术补充来给出相应的识别的解决方案,让读者对验证码的功能及安全性问题有更深刻的认识。
5基本工具
要达到本文的目的,只需要简单的编程知识即可,因为现在的机器学习领域的蓬勃发展,已经有很多封装好的开源解决方案来进行机器学习。普通程序员已经不需要了解复杂的数学原理,即可以实现对这些工具的应用了。
主要开发环境:
python3.5
python SDK版本
PIL
图片处理库
libsvm
开源的svm机器学习库
准备原始图片素材
图片预处理
图片字符切割
图片尺寸归一化
图片字符标记
字符图片特征提取
生成特征和标记对应的训练数据集
训练特征标记数据生成识别模型
使用识别模型预测新的未知图片集
达到根据“图片”就能返回识别正确的字符集的目标
- def get_feature(img): """
- 获取指定图片的特征值,
- 1. 按照每排的像素点,高度为10,则有10个维度,然后为6列,总共16个维度
- :param img_path:
- :return:一个维度为10(高度)的列表 """
- width, height = img.size
- pixel_cnt_list = []
- height = 10 for y in range(height):
- pix_cnt_x = 0 for x in range(width): if img.getpixel((x, y)) == 0: # 黑色点
- pix_cnt_x += 1
- pixel_cnt_list.append(pix_cnt_x) for x in range(width):
- pix_cnt_y = 0 for y in range(height): if img.getpixel((x, y)) == 0: # 黑色点
- pix_cnt_y += 1
- pixel_cnt_list.append(pix_cnt_y) return pixel_cnt_list
关于环境的安装,不是本文的重点,故略去。
6基本流程
一般情况下,对于字符型验证码的识别流程如下:
7素材准备
7.1素材选择
由于本文是以初级的学习研究目的为主,要求“有代表性,但又不会太难”,所以就直接在网上找个比较有代表性的简单的字符型验证码(感觉像在找漏洞一样)。
最后在一个比较旧的网站(估计是几十年前的网站框架)找到了这个验证码图片。
原始图:
然后就将图片素材特征化,按照libSVM指定的格式生成一组带特征值和标记值的向量文
⑶ python下使用libsvm能处理数据格式为复数(complex)的数据吗
毋庸置疑,LibSVM是台湾牛人为世界机器学习的卓越贡献之一。一般都是基于Matlab的,其实LibSVM也可以用Python跑。
第一步,确定本机Python的版本:
32位的最易配置,哈哈,我的机器就是这么的古董。64位的童鞋请Google。
第二步,到官网http://www.csie.ntu.e.tw/~cjlin/libsvm/,来下载LibSVM软件包,我选择的是zip包。
第三步,将zip包解压到一个特定位置,我放到了C:盘根目录,当然也可以放到program files中。
第四步,就可以测试一下LibSVM是否可用了,打开Python IDE,输入以下代码:
能够看到输出,84%的分类准确性。
第五步,使用我的个人数据
libsvm的数据格式如下:
第一列代表标签,第二列是第一个特征值,第三列是第二个特征值。所以,先要把数据按规定格式整理好。然后开始训练。
import os
import sys
os.chdir('C:\libsvm-3.17\python')
from svmutil import *
y, x = svm_read_problem('../lkagain.txt')
m = svm_train(y[:275], x[:275], '-c 5')
y, x = svm_read_problem('../lk2.txt')
p_label, p_acc, p_val = svm_predict(y[0:], x[0:], m)
print p_label
print p_acc
print p_val
第六步,Python接口
在libsvm-3.16的python文件夹下主要包括了两个文件svm.py和svmutil.py。
svmutil.py接口主要包括了high-level的函数,这些函数的使用和LIBSVM的MATLAB接口大体类似
svmutil中主要包含了以下几个函数:
svm_train() : train an SVM model
svm_predict() : predict testing data
svm_read_problem() : read the data from a LIBSVM-format file.
svm_load_model() : load a LIBSVM model.
svm_save_model() : save model to a file.
evaluations() : evaluate prediction results.