1
1

More than 3 years have passed since last update.

cv::CascadeClassifier::detectMultiScaleの解決方法

Posted at

はじめに

 OpenCVで顔検知をしたときに出たエラーと解決方法を紹介します。

問題

 以下のようなコードでエラーが出ました。

python
# カスケード型識別器の読み込み
cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

# 顔領域の探索
face = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, minSize=(30, 30))

 エラー内容

cv2.error: OpenCV(3.4.2) C:\projects\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1698: error: (-215:Assertion failed) !empty() in function 'cv::CascadeClassifier::detectMultiScale'

原因

 分類器のXMLファイルのパス指定が間違っているようです。

解決方法

まずOpenCVが入っているパスを調べます。

python
user>python
Python 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 16:30:00) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>import cv2
>>>cv2.__file__

'C:\\Users\\user\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python37\\site-packages\\cv2\\cv2.cp37-win_amd64.pyd'

 次にXMLファイルの場所を調べます。
path.jpg

 私の場合は/dataに入っていました。

 そのため、コードを以下のように修正しました。

python
# カスケード型識別器の読み込み
cascade = cv2.CascadeClassifier("C:/Users/user/AppData/Local/Packages/PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0/LocalCache/local-packages/Python37/site-packages/cv2/data/haarcascade_frontalface_default.xml")

# 顔領域の探索
face = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, minSize=(30, 30))

おわりに

 result.jpg

 無事に検知できました。

参考

 https://qiita.com/K_M95/items/f1a3e7c47800adb94095

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1