1.7 KiB
1.7 KiB
OPENCV级联分类器训练
1.收集样本
正样本
- 转化成灰度(可用_RGBtoGray.py脚本)
- 转化成jpg格式(可用_BMP2JPG.py脚本)
- 分辨率20X20
- 从0开始按序号命名(可用_ReName.py脚本)
负样本
- 转化成灰度(可用_RGBtoGray.py脚本)
- 转化成jpg格式(可用_BMP2JPG.py脚本)
- 分辨率随意
- 需要明显多于正样本
- 从0开始按序号命名(可用_ReName.py脚本)
2.生成txt数据集路径表
- 生成文件(可用_GenTXT.py脚本)
- 拷贝到项目顶层目录(可用_copy.py脚本)
3.生成正样本数据集(负样本数据在下一步用于训练)
- 编辑step1.py,根据自己的样本情况修改参数
- 执行step1.py脚本
4.训练
- 编辑step2.py,根据自己的样本情况修改参数
- 执行step2.py脚本
3.得到模型
- 进入xml文件夹,里面就有训练各个层数的模型
5.示范
import cv2
# 读取待检测的图像
image = cv2.imread('12.jpg')
# 获取 XML 文件,加载人脸检测器
faceCascade = cv2.CascadeClassifier('cascade.xml')
# 色彩转换,转换为灰度图像
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
# 调用函数 detectMultiScale
faces = faceCascade.detectMultiScale(gray,scaleFactor = 1.15,minNeighbors = 5,minSize = (5,5))
#print(faces)
# 打印输出的测试结果
print("发现{0}个人脸!".format(len(faces)))
# 逐个标注人脸
for(x,y,w,h) in faces:
cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2) #矩形标注
#cv2.circle(image,(int((x+x+w)/2),int((y+y+h)/2)),int(w/2),(0,255,0),2)
# 显示结果
cv2.imshow("dect",image)
# 保存检测结果
cv2.imwrite("re.jpg",image)
cv2.waitKey(0)
cv2.destroyAllWindows()