OpenCV-Python實戰(番外篇)——基于 Haar 級聯的貓臉檢測器
- 前言
- 基于 Haar 級聯的貓臉檢測器
- 相關鏈接
前言
在《人臉檢測詳解》中我們已經詳細介紹了 OpenCV 中提供的基于 Viola 和 Jones 提出物件檢測框架的人臉檢測演算法,我們同時也了解了,該物件檢測框架也可用于檢測其他物體,例如:車牌號或貓臉等,在本節中,我們將使用此框架檢測貓臉,
基于 Haar 級聯的貓臉檢測器
基于 Haar 特征的級聯分類器可用于檢測人臉以外的物件,OpenCV 庫中提供了兩個級聯分類器檔案用于貓臉檢測,接下來我們使用這兩個檢測器來檢測影像中的正面貓臉,
此程式《人臉檢測詳解》中介紹的代碼非常相似,關鍵在于修改了加載的兩個級聯分類器檔案,可以從 OpenCV 官方下載這些級聯分類器檔案:
- haarcascade_frontalcatface.xml
- haarcascade_frontalcatface_extended.xml
從加載的影像,到檢測和繪制貓臉檢測框的完整代碼如下:
# 可視化函式
def show_img_with_matplotlib(color_img, title, pos):
img_RGB = color_img[:, :, ::-1]
ax = plt.subplot(2, 2, pos)
plt.imshow(img_RGB)
plt.title(title, fontsize=8)
plt.axis('off')
def show_detection(image, faces):
"""在每個檢測到的人臉上繪制一個矩形進行標示"""
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 5)
return image
# 加載影像
img = cv2.imread("cat_face_detection.jpg")
# 將 BGR 影像轉換為灰度影像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 加載分類器檔案
cas_catface = cv2.CascadeClassifier("haarcascade_frontalcatface.xml")
cas_catface_extended = cv2.CascadeClassifier("haarcascade_frontalcatface_extended.xml")
# 檢測正面貓臉
faces_cas_catface = cas_catface.detectMultiScale(gray)
faces_cas_catface_extended = cas_catface_extended.detectMultiScale(gray)
retval, faces_haar_cat = cv2.face.getFacesHAAR(img, "haarcascade_frontalcatface.xml")
faces_haar_cat = np.squeeze(faces_haar_cat)
retval, faces_haar_cat_extended = cv2.face.getFacesHAAR(img, "haarcascade_frontalcatface_extended.xml")
faces_haar_cat_extended = np.squeeze(faces_haar_cat_extended)
# 繪制人臉檢測框
img_cas_catface = show_detection(img.copy(), faces_cas_catface)
img_cas_catface_extended = show_detection(img.copy(), faces_cas_catface_extended)
img_faces_haar_cat = show_detection(img.copy(), faces_haar_cat)
img_faces_haar_cat_extended = show_detection(img.copy(), faces_haar_cat_extended)
# 可視化
show_img_with_matplotlib(img_cas_catface, "detectMultiScale(frontalcatface): " + str(len(faces_cas_catface)), 1)
show_img_with_matplotlib(img_cas_catface_extended, "detectMultiScale(frontalcatface_extended): " + str(len(faces_cas_catface_extended)), 2)
show_img_with_matplotlib(img_faces_haar_cat, "getFacesHAAR(frontalcatface): " + str(len(faces_haar_cat)), 3)
show_img_with_matplotlib(img_faces_haar_cat_extended, "getFacesHAAR(frontalcatface_extended): " + str(len(faces_haar_cat_extended)), 4)
plt.show()
此程式的輸出結果如下圖所示:

相關鏈接
OpenCV-Python實戰(14)——人臉檢測詳解
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/398587.html
標籤:AI
上一篇:零基礎python快速入門實戰,這樣還怕學不會python?
下一篇:R語言使用reshape2包的dcast函式將dataframe從長表到寬表(Long- to wide-format)、指定單個識別符號、、表格轉化的時候值不唯一設定聚合函式(均值)
