文章目录
前言
利用halcon实现基于机器学习的GMM算法的分类器
一、halcon脚本
*************************************train***************************************
ImageDir:='../../DataSet/DataImage_Cls/DataImage'
ModelFile:='model_GMM.dat'
ClassFile:='classes.txt'
ImageDataList:=[]
ClassDataList:=[]
FeatureVector:=-1
list_files (ImageDir, 'directories', Dirs)
for Index1 := 0 to |Dirs|-1 by 1
eachDir:= Dirs[Index1]
list_files (eachDir, 'files', ImageFiles)
for Index2 := 0 to |ImageFiles|-1 by 1
eachfileName:= ImageFiles[Index2]
parse_filename (eachfileName, BaseName, Extension, Directory)
tuple_regexp_match (Directory, '.*/(.*?)/', Class_Name)
tuple_concat (ImageDataList, eachfileName, ImageDataList)
tuple_concat (ClassDataList, Class_Name, ClassDataList)
if(FeatureVector==-1)
read_image (Image, eachfileName)
gen_features (Image, FeatureVector)
endif
endfor
endfor
tuple_uniq (ClassDataList, Class_Names)
open_file (ClassFile, 'output', FileHandle)
for Index3 := 0 to |Class_Names|-1 by 1
fwrite_string (FileHandle, Class_Names[Index3])
fnew_line (FileHandle)
endfor
close_file (FileHandle)
create_class_gmm (|FeatureVector|, |Dirs|, 10, 'spherical', 'normalization', |FeatureVector|, 42, GMMHandle)
for Indexfile:=0 to |ImageDataList|-1 by 1
read_image (Image, ImageDataList[Indexfile])
gen_features (Image, FeatureVector)
tuple_find (Class_Names, ClassDataList[Indexfile], Indices)
add_sample_class_gmm (GMMHandle, FeatureVector, Indices, 0)
endfor
*训练
train_class_gmm (GMMHandle, 2000000, 0.0001, 'training', 0.0001, Centers, Iter)
write_class_gmm (GMMHandle, ModelFile)
clear_class_gmm (GMMHandle)
stop()
*************************************test***************************************
ModelFile:='model_GMM.dat'
ClassFile:='classes.txt'
TestImageDir:='../../DataSet/DataImage_Cls/test'
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'white', WindowID)
dev_set_color ('black')
dev_set_draw ('margin')
dev_clear_window ()
ClassNames:=[]
open_file (ClassFile, 'input', FileHandle)
repeat
fread_line(FileHandle, oneline, IsEOF)
if(IsEOF == 1)
break
endif
if(oneline == ' ' or oneline=='/n')
continue
endif
tuple_regexp_replace (oneline, '/n', '', oneline)
tuple_regexp_replace (oneline, '\n', '', oneline)
tuple_concat (ClassNames, oneline, ClassNames)
until (IsEOF)
close_file (FileHandle)
read_class_gmm (ModelFile, GMMHandle)
list_image_files (TestImageDir, 'default', [], ImageFiles)
for Index := 0 to |ImageFiles|-1 by 1
read_image (Image, ImageFiles[Index])
gen_features (Image, FeatureVector_test)
classify_class_gmm (GMMHandle, FeatureVector_test, 1, Class, ClassProb, Density, KSigmaProb)
classname:= ClassNames[Class]
stop()
endfor
总结
实现了基于gmm的分类器