Подтвердить что ты не робот

Error: (-215)! empty() в функции detectMultiScale

Я пытаюсь изучить cv2 в python 2.7, но когда я запускаю свой код в определенной его части:

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
 eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')


img = cv2.imread('2015-05-27-191152.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

он возвращает это:

File "face_detection.py", line 11, in <module>
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
cv2.error: /home/arthurckl/Desktop/opencv-3.0.0-rc1/modules/objdetect/src/cascadedetect.cpp:1595: error: (-215) !empty() in function detectMultiScale

Я попытался найти ответ здесь, но самое лучшее, что я мог найти, это то, что я должен загружать face_cascade не в ту сторону... Любая помощь?

4b9b3361

Ответ 1

Отсутствует XML файл или файл, или путь к нему неверен или путь create_capture неверен.

Пути в образце opencv выглядят следующим образом:

cascade_fn = args.get('--cascade', "../../data/haarcascades/haarcascade_frontalface_alt.xml")
nested_fn  = args.get('--nested-cascade', "../../data/haarcascades/haarcascade_eye.xml")

cam = create_capture(video_src, fallback='synth:bg=../data/lena.jpg:noise=0.05')

Ответ 2

Я запустил тот же код. Здесь есть две вещи. 1. Дайте весь путь к файлам .xml. 2. В конце раздайте инструкцию по нажатию клавиши.

Добавьте этот блок кода в конец и запустите свой файл, работая для меня:

k = cv2.waitKey(0)
if k == 27:         # wait for ESC key to exit
    cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
    cv2.imwrite('messigray.png',img)
    cv2.destroyAllWindows()

Например, мой код выглядел как

import numpy as np
import cv2

face_cascade = cv2.CascadeClassifier('C:\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('C:\\opencv\\build\\etc\\haarcascades\\haarcascade_eye.xml')

img = cv2.imread('lena.jpg')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 5)
#faces = face_cascade.detectMultiScale(gray)

for (x,y,w,h) in faces:
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    roi_gray = gray[y:y+h, x:x+w]
    roi_color = img[y:y+h, x:x+w]
    eyes = eye_cascade.detectMultiScale(roi_gray)
    for (ex,ey,ew,eh) in eyes:
        cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

cv2.imshow('img',img)

k = cv2.waitKey(0)
if k == 27:         # wait for ESC key to exit
    cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
    cv2.imwrite('messigray.png',img)
    cv2.destroyAllWindows()

Мой вывод выглядел как введите здесь описание изображения

Ответ 3

Файл XML отсутствует, вы можете получить файл из репозитория GitHub и поместить его в тот же каталог, что и ваш проект. Ссылка на папку на GitHub находится здесь. Просто скачайте файл с именем haarcascade_frontalface_default.xml. На самом деле, файл существует в вашей системе. Просто перейдите в папку site-packages вашей установочной папки python и проверьте папку cv2/data на наличие файла

Ответ 4

Используйте весь путь к файлу и используйте "\\" вместо "\" в пути к файлу xml.

Путь к файлу должен быть следующим:

face_cascade = cv2.CascadeClassifier('C:\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_default.xml')

вместо:

cascade_fn = args.get('--cascade', "..\..\data\haarcascades\haarcascade_frontalface_alt.xml")

Ответ 5

Если вы используете Anaconda, вы должны добавить путь Anaconda.

new_path = 'C:/Users/.../Anaconda/Library/etc/haarcascades/'

face_cascade = cv2.CascadeClassifier(new_path + 'haarcascade_frontalface_default.xml')

Ответ 6

не нужно менять код

скачайте этот XML файл, затем укажите путь к этому файлу

это решит ошибку (100%)

Ответ 7

На OSX с доморощенной установкой полный путь к папке opencv должен работать:

face_cascade = cv2.CascadeClassifier('/usr/local/Cellar/opencv/3.4.0_1/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('/usr/local/Cellar/opencv/3.4.0_1/share/OpenCV/haarcascades/haarcascade_eye.xml')

Позаботьтесь о номере версии в пути.

Ответ 8

Возможно, face_cascade пуст. Вы можете проверить, является ли переменная пустой или нет, введя следующую команду:

face_cascade.empty()

Если он пуст, вы получите True а это значит, что ваш файл недоступен по указанному вами пути. Попробуйте добавить полный путь к XML файлу следующим образом:

r'D:\folder Name\haarcascade_frontalface_default.xml'

Ответ 9

"\ Anaconda3\Lib\site-packages\cv2\data \" Я нашел XML файл по этому пути для Anaconda

Ответ 10

Вы можете найти такие ошибки, если не определили полный путь к вашему XML файлу. Попробуйте это, если вы используете opencv3.1.0 в raspberrypi 3: "faceCascade = cv2.CascadeClassifier('/home/pi/opencv-3.1.0/data/haarcascades/haarcascade_frontalface_default.xml')"

Ответ 11

ошибка может быть связана с тем, что необходимые XML файлы не были загружены должным образом. Найдите файл haarcascade_frontalface_default.xml, используя поисковую систему haarcascade_frontalface_default.xml ОС, получите полный путь и cv2.CascadeClassifier его в качестве аргумента для cv2.CascadeClassifier виде строки.

Ответ 12

Ваш XML файл не найден. Попробуйте использовать абсолютные пути, например:

/path/to/my/file (Mac, Linux)
C:\\path\\to\\my\\file (Windows)

Ответ 13

Ошибка возникает из-за отсутствия файлов XML или неправильного пути файла XML.

Пожалуйста, попробуйте следующий код,

import numpy as np
import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

cap = cv2.VideoCapture(0)

while 1:
    ret, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)

    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]

        eyes = eye_cascade.detectMultiScale(roi_gray)
        for (ex,ey,ew,eh) in eyes:
            cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

    cv2.imshow('img',img)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()

Ответ 14

Пожалуйста, не копируйте и не вставляйте содержимое XML файла, поскольку после его вставки в блокнот он будет сохранен в виде текстового файла. Так что прямо скачайте файл из данного источника.

Ответ 15

У меня была такая же проблема с opencv-python и я использовал виртуальную среду. Если это ваш случай, вы должны найти xml файлы по адресу:

/home/username/virtual_environment/lib/python3.5/site-packages/cv2/data/haarcascade_frontalface_default.xml

/home/username/virtual_environment/lib/python3.5/site-packages/cv2/data/haarcascade_eye.xml

Пожалуйста, убедитесь, что вы используете абсолютный путь. Иначе это не сработает.

Ответ 16

Эта ошибка означает, что файл XML не найден. Библиотеке нужно, чтобы вы указали полный путь, хотя вы, вероятно, просто используете файл, поставляемый с библиотекой OpenCV.

Вы можете использовать встроенный модуль pkg_resources, чтобы автоматически определить это для вас. Следующий код ищет полный путь к файлу внутри, откуда был загружен модуль cv2:

import pkg_resources
haar_xml = pkg_resources.resource_filename(
    'cv2', 'data/haarcascade_frontalface_default.xml')

Для меня это было '/Users/andrew/.local/share/virtualenvs/foo-_b9W43ee/lib/python3.7/site-packages/cv2/data/haarcascade_frontalface_default.xml'; Ваш гарантированно будет другим. Просто позвольте библиотеке питонов pkg_resources понять это.

classifier = cv2.CascadeClassifier(haar_xml)
faces = classifier.detectMultiScale(frame)

успеха!