# -*- coding: utf-8 -*-
#zhangtao 2016/06/14
#QQ 406878851
import os
import numpy as np
import mlpy
import sys
import time
from PIL
import Image
from ImageHelper
import *
from common
import *
def checkSampleSucc(train_label, test_result):
if len(train_label) != len(test_result):
print "checkSampleSucc shape no match" return total = len(train_label)
succ = 0
for i
in xrange(total):
item1 = test_result[i]
item2 = train_label[i]
if int(item1) == int(item2):
succ += 1
succRate = float(succ) / float(total)
print "checkSampleSucc : ", (succ, total), succRate
def getDataListFromFile(srcfilepath):
im = Image.open(srcfilepath).convert(
'RGB')
helper = ImageHelper(im)
return helper.getDataListWithOffset()
def loadSampleFromDir(label, srcdir, x, y):
print "load ..", srcdir
srcfiles = os.listdir(srcdir)
tm = int(time.time())
k = 0
for srcfilename
in srcfiles:
srcfilepath = os.path.join(srcdir, srcfilename)
if srcfilename[0] ==
'a':
pass # continue
# print srcfilename
dataList = getDataListFromFile(srcfilepath)
idx = 0
for data
in dataList:
x.append(data)
y.append(label)
# createImageFromData(srcdir,data,idx)
idx += 1
newfilename =
"{0}\\{1}.png".format(srcdir, k + tm)
os.rename(srcfilepath,newfilename)
k += 1
def loadSampleFiles():
x = []
y = []
label_count = 0
for c
in xrange(ord(
'a'), ord(
'z') + 1, 1):
if c == ord(
'i'):
pass #continue
srcdir = r
'sample\{0}'.format(chr(c))
#mkdir(srcdir)
loadSampleFromDir(c, srcdir, x, y)
label_count += 1
for i
in xrange(1,10,1):
srcdir=r
'sample\{0}'.format( i )
#mkdir(srcdir)
loadSampleFromDir(i,srcdir,x,y)
label_count += 1
print "label_count:",label_count
return (x, y)
def train():
(x, y) = loadSampleFiles()
train_data = np.array(x, dtype=
'float32')
train_label = np.array(y, dtype=
'int32')
svm = mlpy.LibSvm(svm_type=
'c_svc', kernel_type=
'poly', gamma=10, probability=True)
print "svm learn
." print "len(x):",len(x)
svm.learn(train_data, train_label)
print "svm learn done!" result = svm.pred(train_data)
print result
checkSampleSucc(y, result)
svm.save_model(ImageHelper.model_file)
# print result
def main():
begin = time.time()
train()
#test()
end = time.time()
t = end - begin
print "done:", t, t / (60)
# test2()
if __name__ ==
"__main__":
print __file__ main()
----