当前位置:网站首页>基于OpenCV haarcascades的对象检测
基于OpenCV haarcascades的对象检测
2022-07-04 19:44:00 【Just_Paranoid】
OpenCV:https://github.com/opencv/opencv
haarcascades - 该文件夹包含经过训练的用于检测对象的特定类型的分类器,例如 人脸(正面、侧面)、行人等。一些分类器有一个特殊的许可证请查看文件以获取详细信息。
OpenCV已经包含许多用于面部,眼睛,笑脸等的预先分类器。这些XML文件存储在opencv/data/haarcascades/文件夹中
OpenCV随附教练机和探测器。如果你想为汽车,飞机等任何物体训练你自己的分类器,你可以使用OpenCV创建一个。它的全部细节在这里给出:级联分类器培训。
https://docs.opencv.org/2.4/doc/user_guide/ug_traincascade.html
# openCV 常用用法
# 导入opencv库
import os
import cv2
# 识别图片中的人脸:使用 haarcascade_frontalface_default.xml
def face_detect(img_path):
# 初始化模型
detector = cv2.CascadeClassifier('../haarcascades/haarcascade_frontalface_default.xml')
# 初始化窗口
cv2.namedWindow('image', cv2.WINDOW_AUTOSIZE)
# 读取图片
img = cv2.imread(img_path)
# 显示图片
# cv2.imshow('image', img)
# 转换为灰度图
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 人脸检测
dets = detector.detectMultiScale(img_gray, 1.1, 5)
# 获取人脸框
faces = []
for i, d in enumerate(dets):
x1 = d[0] if d[0] > 0 else 0
y1 = d[1] if d[1] > 0 else 0
x2 = d[0] + d[2] if d[0] + d[2] > 0 else 0
y2 = d[1] + d[3] if d[1] + d[3] > 0 else 0
# 显示人脸框
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
# 保存图片
cv2.imwrite('../result/face_detect_1.jpg', img)
# 显示图片标记人脸框
# cv2.imshow('image', img)
# 等待关闭窗口
# cv2.waitKey(0)
# 人眼检测:使用 haarcascade_eye_tree_eyeglasses.xml
def eye_detect(img_path):
# 初始化模型
detector = cv2.CascadeClassifier('../haarcascades/haarcascade_eye_tree_eyeglasses.xml')
# 初始化窗口
cv2.namedWindow('image', cv2.WINDOW_AUTOSIZE)
# 读取图片
img = cv2.imread(img_path)
# 显示图片
# cv2.imshow('image', img)
# 转换为灰度图
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 人眼检测
dets = detector.detectMultiScale(img_gray, 1.1, 5)
# 获取人眼框
faces = []
for i, d in enumerate(dets):
x1 = d[0] if d[0] > 0 else 0
y1 = d[1] if d[1] > 0 else 0
x2 = d[0] + d[2] if d[0] + d[2] > 0 else 0
y2 = d[1] + d[3] if d[1] + d[3] > 0 else 0
# 显示人脸框
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
# 保存图片
cv2.imwrite('../result/eye_detect_1.jpg', img)
# 显示图片标记人脸框
cv2.imshow('image', img)
# 等待关闭窗口
cv2.waitKey(0)
def eye_detect_save(img_path, filename):
# 初始化模型
detector = cv2.CascadeClassifier('../haarcascades/haarcascade_eye_tree_eyeglasses.xml')
# 读取图片
img = cv2.imread(img_path)
# 转换为灰度图
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 人眼检测
dets = detector.detectMultiScale(img_gray, 1.1, 5)
# 获取人眼框
faces = []
for i, d in enumerate(dets):
x1 = d[0] if d[0] > 0 else 0
y1 = d[1] if d[1] > 0 else 0
x2 = d[0] + d[2] if d[0] + d[2] > 0 else 0
y2 = d[1] + d[3] if d[1] + d[3] > 0 else 0
# 显示人脸框
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
# 保存图片
save_path = '../result/' + filename
cv2.imwrite(save_path, img)
# 人眼检测:使用 haarcascade_eye.xml
def eye_detect_2(img_path):
# 初始化模型
detector = cv2.CascadeClassifier('../haarcascades/haarcascade_eye.xml')
# 初始化窗口
cv2.namedWindow('image', cv2.WINDOW_AUTOSIZE)
# 读取图片
img = cv2.imread(img_path)
# 显示图片
# cv2.imshow('image', img)
# 转换为灰度图
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 人眼检测
dets = detector.detectMultiScale(img_gray, 1.1, 5)
# 获取人眼框
faces = []
for i, d in enumerate(dets):
x1 = d[0] if d[0] > 0 else 0
y1 = d[1] if d[1] > 0 else 0
x2 = d[0] + d[2] if d[0] + d[2] > 0 else 0
y2 = d[1] + d[3] if d[1] + d[3] > 0 else 0
# 显示人脸框
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
# 保存图片
cv2.imwrite('../result/eye_detect2_1.jpg', img)
# 显示图片标记人脸框
cv2.imshow('image', img)
# 等待关闭窗口
cv2.waitKey(0)
# 肖像检测:haarcascade_profileface.xml
def profile_face(img_path):
# 初始化模型
detector = cv2.CascadeClassifier('../haarcascades/haarcascade_profileface.xml')
# 初始化窗口
cv2.namedWindow('image', cv2.WINDOW_AUTOSIZE)
# 读取图片
img = cv2.imread(img_path)
# 显示图片
# cv2.imshow('image', img)
# 转换为灰度图
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 人眼检测
dets = detector.detectMultiScale(img_gray, 1.1, 5)
# 获取人眼框
faces = []
for i, d in enumerate(dets):
x1 = d[0] if d[0] > 0 else 0
y1 = d[1] if d[1] > 0 else 0
x2 = d[0] + d[2] if d[0] + d[2] > 0 else 0
y2 = d[1] + d[3] if d[1] + d[3] > 0 else 0
# 显示人脸框
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
# 保存图片
cv2.imwrite('../result/profile_face_6.jpg', img)
# 显示图片标记人脸框
cv2.imshow('image', img)
# 等待关闭窗口
cv2.waitKey(0)
# 微笑检测:haarcascade_smile.xml
def smile_detect(img_path):
# 初始化模型
detector = cv2.CascadeClassifier('../haarcascades/haarcascade_smile.xml')
# 初始化窗口
cv2.namedWindow('image', cv2.WINDOW_AUTOSIZE)
# 读取图片
img = cv2.imread(img_path)
# 显示图片
# cv2.imshow('image', img)
# 转换为灰度图
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 人眼检测
dets = detector.detectMultiScale(img_gray, 1.1, 5)
# 获取人眼框
faces = []
for i, d in enumerate(dets):
x1 = d[0] if d[0] > 0 else 0
y1 = d[1] if d[1] > 0 else 0
x2 = d[0] + d[2] if d[0] + d[2] > 0 else 0
y2 = d[1] + d[3] if d[1] + d[3] > 0 else 0
# 显示人脸框
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
# 保存图片
cv2.imwrite('../result/smile_detect_1.jpg', img)
# 显示图片标记人脸框
cv2.imshow('image', img)
# 等待关闭窗口
cv2.waitKey(0)
if __name__ == '__main__':
print('PyCharm')
# face_detect('../face/face01.jpg')
# eye_detect('../face/face01.jpg')
# eye_detect_2('../face/face01.jpg')
# profile_face('../face/face06.jpg')
# smile_detect('../face/face08.jpg')
# 遍历face文件夹 输出 人眼检测 输出 标记到 result文件夹
for dirpath, dirnames, filenames in os.walk('../face'):
for filename in filenames:
print(os.path.join(dirpath, filename))
eye_detect_save(os.path.join(dirpath, filename), filename)
边栏推荐
- 强化学习-学习笔记2 | 价值学习
- Every time I look at the interface documents of my colleagues, I get confused and have a lot of problems...
- 电脑怎么保存网页到桌面上使用
- 易周金融 | Q1保险行业活跃人数8688.67万人 19家支付机构牌照被注销
- Selected review | machine learning technology for Cataract Classification / classification
- Length of the longest integrable subarray
- Managed service network: application architecture evolution in the cloud native Era
- 【服务器数据恢复】某品牌服务器存储raid5数据恢复案例
- go笔记(1)go语言介绍以及特点
- NLP、视觉、芯片...AI重点方向发展几何?青源会展望报告发布[附下载]
猜你喜欢
Flet教程之 06 TextButton基础入门(教程含源码)
Idea configuration standard notes
字节测试工程师十年经验直击UI 自动化测试痛点
Managed service network: application architecture evolution in the cloud native Era
ICML 2022 | Meta提出鲁棒的多目标贝叶斯优化方法,有效应对输入噪声
How does wincc7.5 SP1 find variables and their positions through cross indexing?
针对深度学习的“失忆症”,科学家提出基于相似性加权交错学习,登上PNAS
精选综述 | 用于白内障分级/分类的机器学习技术
实操自动生成接口自动化测试用例
See how Tencent does interface automation testing
随机推荐
The problem of the maximum difference between the left and right maxima
In the face of the same complex test task, why can the elder sort out the solution quickly? Ali's ten-year test engineers showed their skills
电脑共享打印机拒绝访问要怎么办
【观察】联想:3X(1+N)智慧办公解决方案,释放办公生产力“乘数效应”
Win11系统wifi总掉线怎么办?Win11系统wifi总掉线的解决方法
Length of the longest integrable subarray
【申博攻略】六.如何联系心仪的博导
[ismb2022 tutorial] the picture shows the precision medicine of learning. Marinka zitnik, Harvard University, keynote speaker, with 87 ppt
LeetCode 7. 整数反转
科普达人丨一文看懂阿里云的秘密武器“神龙架构”
面对同样复杂的测试任务为什么大老很快能梳理解决方案,阿里十年测试工程师道出其中的技巧
记一次重复造轮子(Obsidian 插件设置说明汉化)
Managed service network: application architecture evolution in the cloud native Era
Cdga | six principles that data governance has to adhere to
Win11亮度被锁定怎么办?Win11亮度被锁定的解决方法
NLP, vision, chip What is the development direction of AI? Release of the outlook report of Qingyuan Association [download attached]
易周金融 | Q1保险行业活跃人数8688.67万人 19家支付机构牌照被注销
Implementation of redis distributed lock
js 闭包
Stack: how to realize the judgment of valid brackets?