赞
踩
选取网站:
保存方式:
其中正例与负例需要分开放置 同时我利用代码分别完成了正负例图片的重命名
对图片文件进行批量重命名的python代码:
import os
path = "cat\\"
n = 0
for file in os.listdir(path):
os.rename(path+file, path+""+str(n+1) + '.jpg')
n += 1
正负例样本:
样本初步完成收集后 如下所示:
weight = 40
height = 40
path = "cat\\"
outpath = "positive\\"
for file in os.listdir(path):
img = cv.imread(path+file)
img = cv.resize(img, (weight, height))
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
cv.imwrite(outpath+file,gray)
完成处理后,图像如下:
对正例输出样本描述的文本文件
workpath = os.getcwd()+"\\"
path = "positive\\"
f = "positive.txt"
for file in os.listdir(path):
with open(f,"a") as f1:
f1.write(str(workpath+path+file)+" 1 0 0 "+str(weight)+" "+str(height)+" \n")
文本内容如下:
<图片绝对地址 识别对象 图像起始坐标 图像宽高>
对于负例同样需要进行处理 但是只需要保存图片地址即可
不必如正例一般添加详细信息
OpenCV库训练采用的是Viola-Jones框架,选择了一种类Haar矩形特征,采用Ada-Boost这种自适应上升的算法来选择用于分类的特征并进行分类,最后使用弱分类器级联的架构来实现快速运算。
在项目文件夹目录下 进入cmd环境
输入如下语句生成vec文件
opencv_createsamples.exe -info 正例样本描述.txt -vec cat.vec -bg negative.txt -num 2037 -w 40 -h 40
如下:
而后利用该vec文件 生成属于自身的分类器:
opencv_traincascade.exe -data xml -vec cat.vec -bg negative.txt -numPos 1800 -numNeg 5015 -numStages 10 -featureType HAAR -w 40 -h 40 -maxDepth 3
如下 该cascade.xml文件便是我们使用的分类器:
正例 40×30 灰度图 数量25
负例 40×30 灰度图 数量25
模型参数 stage=2 type=harr maxDepth=1
训练用时:0s
效果如下:
评价:
将非生物的物品如窗帘地板均当作特征进行了抓取
较为混乱 基本没能抓住重要特征。
正例 40×30 灰度图 数量772
负例 120×90 灰度图 数量2599
模型参数 stage=10 type=LBP maxDepth=1
训练用时:3mins
效果如下:
评价:
能够抓住一定的猫的特征了 比如独特的猫耳朵 猫爪子
但是还是效果不佳 如无环境干扰下将狗的毛发认作了猫的特征
正例 60×45 灰度图 数量772
负例 180×135 灰度图 数量2599
模型参数 stage=10 type=LBP maxDepth=1
训练用时:1h30mins
效果如下:
正例 20×20 灰度图 数量2037
负例 60×60 灰度图 数量5015
模型参数 stage=10 type=HAAR maxDepth=3
训练用时: 5h 30mins
效果如下:
当干扰较少时 能够较好地抓取到猫猫的独特特征
但如果环境较为复杂 则极容易出错
将地毯的绒毛看作了猫猫的特征:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。