当前位置:网站首页>Object detection based on OpenCV haarcascades
Object detection based on OpenCV haarcascades
2022-07-04 23:03:00 【Just_ Paranoid】
OpenCV:https://github.com/opencv/opencv
haarcascades - This folder contains a specific type of classifier trained to detect objects , for example Face ( positive 、 The side )、 Pedestrians, etc . Some classifiers have a special license. Please check the file for details .
OpenCV Already contains many for the face , eyes , Pre classifier of smiling face, etc . these XML Files are stored in opencv/data/haarcascades/ In the folder
OpenCV The trainer and detector are attached . If you want a car , Aircraft and any other objects train your own classifier , You can use OpenCV Create a . Its full details are given here : Cascade classifier training .
https://docs.opencv.org/2.4/doc/user_guide/ug_traincascade.html
# openCV Common usage
# Import opencv library
import os
import cv2
# Recognize faces in pictures : Use haarcascade_frontalface_default.xml
def face_detect(img_path):
# Initialize model
detector = cv2.CascadeClassifier('../haarcascades/haarcascade_frontalface_default.xml')
# Initialize window
cv2.namedWindow('image', cv2.WINDOW_AUTOSIZE)
# Read the picture
img = cv2.imread(img_path)
# display picture
# cv2.imshow('image', img)
# Convert to grayscale
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Face detection
dets = detector.detectMultiScale(img_gray, 1.1, 5)
# Get face frame
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
# Show face box
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
# Save the picture
cv2.imwrite('../result/face_detect_1.jpg', img)
# Display picture tag face box
# cv2.imshow('image', img)
# Wait for the window to close
# cv2.waitKey(0)
# Eye detection : Use haarcascade_eye_tree_eyeglasses.xml
def eye_detect(img_path):
# Initialize model
detector = cv2.CascadeClassifier('../haarcascades/haarcascade_eye_tree_eyeglasses.xml')
# Initialize window
cv2.namedWindow('image', cv2.WINDOW_AUTOSIZE)
# Read the picture
img = cv2.imread(img_path)
# display picture
# cv2.imshow('image', img)
# Convert to grayscale
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Eye detection
dets = detector.detectMultiScale(img_gray, 1.1, 5)
# Get eye frame
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
# Show face box
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
# Save the picture
cv2.imwrite('../result/eye_detect_1.jpg', img)
# Display picture tag face box
cv2.imshow('image', img)
# Wait for the window to close
cv2.waitKey(0)
def eye_detect_save(img_path, filename):
# Initialize model
detector = cv2.CascadeClassifier('../haarcascades/haarcascade_eye_tree_eyeglasses.xml')
# Read the picture
img = cv2.imread(img_path)
# Convert to grayscale
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Eye detection
dets = detector.detectMultiScale(img_gray, 1.1, 5)
# Get eye frame
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
# Show face box
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
# Save the picture
save_path = '../result/' + filename
cv2.imwrite(save_path, img)
# Eye detection : Use haarcascade_eye.xml
def eye_detect_2(img_path):
# Initialize model
detector = cv2.CascadeClassifier('../haarcascades/haarcascade_eye.xml')
# Initialize window
cv2.namedWindow('image', cv2.WINDOW_AUTOSIZE)
# Read the picture
img = cv2.imread(img_path)
# display picture
# cv2.imshow('image', img)
# Convert to grayscale
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Eye detection
dets = detector.detectMultiScale(img_gray, 1.1, 5)
# Get eye frame
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
# Show face box
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
# Save the picture
cv2.imwrite('../result/eye_detect2_1.jpg', img)
# Display picture tag face box
cv2.imshow('image', img)
# Wait for the window to close
cv2.waitKey(0)
# Portrait detection :haarcascade_profileface.xml
def profile_face(img_path):
# Initialize model
detector = cv2.CascadeClassifier('../haarcascades/haarcascade_profileface.xml')
# Initialize window
cv2.namedWindow('image', cv2.WINDOW_AUTOSIZE)
# Read the picture
img = cv2.imread(img_path)
# display picture
# cv2.imshow('image', img)
# Convert to grayscale
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Eye detection
dets = detector.detectMultiScale(img_gray, 1.1, 5)
# Get eye frame
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
# Show face box
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
# Save the picture
cv2.imwrite('../result/profile_face_6.jpg', img)
# Display picture tag face box
cv2.imshow('image', img)
# Wait for the window to close
cv2.waitKey(0)
# Smile detection :haarcascade_smile.xml
def smile_detect(img_path):
# Initialize model
detector = cv2.CascadeClassifier('../haarcascades/haarcascade_smile.xml')
# Initialize window
cv2.namedWindow('image', cv2.WINDOW_AUTOSIZE)
# Read the picture
img = cv2.imread(img_path)
# display picture
# cv2.imshow('image', img)
# Convert to grayscale
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Eye detection
dets = detector.detectMultiScale(img_gray, 1.1, 5)
# Get eye frame
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
# Show face box
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
# Save the picture
cv2.imwrite('../result/smile_detect_1.jpg', img)
# Display picture tag face box
cv2.imshow('image', img)
# Wait for the window to close
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')
# Traverse face Folder Output Eye detection Output Mark to result Folder
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)
边栏推荐
- Persistence mechanism of redis
- 图片懒加载的原理
- Analysis of environmental encryption technology
- [odx Studio Edit pdx] - 0.2 - Comment comparer deux fichiers pdx / odx
- A complete tutorial for getting started with redis: redis usage scenarios
- The difference between Max and greatest in SQL
- Breakpoint debugging under vs2019 c release
- ScriptableObject
- 浅聊一下中间件
- Explanation of bitwise operators
猜你喜欢

Qt个人学习总结

vim编辑器知识总结

One of the commonly used technical indicators, reading boll Bollinger line indicators

Attack and defense world misc advanced area ditf

攻防世界 MISC 進階區 Erik-Baleog-and-Olaf

Set up a website with a sense of ceremony, and post it to 1/2 of the public network through the intranet

攻防世界 MISC 进阶区 Erik-Baleog-and-Olaf

Serial port data frame

Redis introduction complete tutorial: Collection details

Redis introduction complete tutorial: slow query analysis
随机推荐
MP进阶操作: 时间操作, sql,querywapper,lambdaQueryWapper(条件构造器)快速筛选 枚举类
Breakpoint debugging under vs2019 c release
【ODX Studio編輯PDX】-0.2-如何對比Compare兩個PDX/ODX文件
[sword finger offer] questions 1-5
9 - class
Gnawing down the big bone - sorting (II)
Serial port data frame
Redis入门完整教程:GEO
Set up a website with a sense of ceremony, and post it to 1/2 of the public network through the intranet
Qt个人学习总结
Tweenmax emoticon button JS special effect
[machine learning] handwritten digit recognition
How to choose a securities company? Is it safe to open an account on your mobile phone
Lost in the lock world of MySQL
The difference between Max and greatest in SQL
Redis入门完整教程:有序集合详解
攻防世界 MISC 进阶区 can_has_stdio?
Common methods in string class
Attack and defense world misc advanced zone 2017_ Dating_ in_ Singapore
Redis入门完整教程:Pipeline