Я пытаюсь изучить 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 неправильно ... Любая помощь?
python
python-2.7
opencv
image-recognition
Arthurckl
источник
источник
Ответы:
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')
источник
Я была такая же проблема.
Мне не нужно было ничего скачивать, чтобы решить эту проблему. В CV2 было все необходимое.
Вместо того, чтобы пытаться выяснить, где
.xml
находятся файлы, и жестко кодировать значения, я использовал свойство, заданное cv2.Из ОП
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
Становится
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')
источник
Я запустил тот же код. Здесь следует отметить два момента. 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()
Мой вывод выглядел так:
источник
Используйте весь путь к файлу и используйте «\\» вместо «\» в пути к файлу 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")
источник
XML-файл отсутствует, вы можете получить его из репозитория GitHub и поместить его в тот же каталог, что и ваш проект. Ссылка на папку на GitHub здесь . Просто скачайте файл с именем haarcascade_frontalface_default.xml . На самом деле файл существует в вашей системе. Просто перейдите в папку site-packages в папке установки python и проверьте папку cv2 / data для файла.
источник
Если вы используете Anaconda, вам следует добавить путь Anaconda.
new_path = 'C:/Users/.../Anaconda/Library/etc/haarcascades/' face_cascade = cv2.CascadeClassifier(new_path + 'haarcascade_frontalface_default.xml')
источник
не нужно менять код
загрузите этот файл .xml, затем укажите путь к этому файлу
это решит ошибку (100%)
источник
Эта ошибка означает, что не удалось найти файл 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
библиотеке Python понять это.Успех!
источник
На 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')
Позаботьтесь о номере версии в пути.
источник
Наверное,
face_cascade
пусто. Вы можете проверить, пуста ли переменная, набрав следующую команду:Если он пуст, вы получите,
True
и это означает, что ваш файл недоступен по указанному вами пути. Попробуйте добавить полный путь к XML-файлу следующим образом:r'D:\folder Name\haarcascade_frontalface_default.xml'
источник
"\ Anaconda3 \ Lib \ site-packages \ cv2 \ data \" По этому пути я нашел XML-файл для Anaconda
источник
Вы можете столкнуться с такими ошибками, если не определили полный путь к XML-файлу. Попробуйте это, если вы используете opencv3.1.0 в raspberrypi 3: " faceCascade = cv2.CascadeClassifier ('/ home / pi / opencv-3.1.0 / data / haarcascades / haarcascade_frontalface_default.xml ')"
источник
Вы можете решить эту проблему, поместив XML в тот же каталог, в котором был размещен ваш основной файл python (откуда вы пытались включить этот файл). Теперь следующий шаг - использовать полный путь. Например
Это не будет работать
front_cascade = cv2.CascadeClassifier('./haarcascade_eye.xml')
Используйте полный путь, теперь все будет нормально
front_cascade = cv2.CascadeClassifier('/Users/xyz/Documents/project/haarcascade_eye.xml')
источник
Я нашел это в другом ответе, но в конечном итоге сработал для меня, когда я добавил два ответа.
import cv2 from matplotlib import pyplot as plt import numpy as np face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml") eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_eye.xml") img = cv2.imread('image1.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5)
источник
Вам просто нужно добавить правильный путь к
haarcascade_frontalface_default.xml
файлу, то есть вам нужно только добавить prefix (cv2.data.haarcascades
)face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')
источник
Ваш XML-файл не найден. Попробуйте использовать абсолютные пути, например:
источник
ошибка может быть связана с тем, что необходимые файлы XML не были загружены должным образом. Найдите файл
haarcascade_frontalface_default.xml
с помощью поисковой системы вашей ОС, получите полный путь и поместите его в качестве аргумента вcv2.CascadeClassifier
виде строкиисточник
Не копируйте и не вставляйте содержимое XML-файла, потому что после его вставки в блокнот он будет сохранен как текстовый файл. Так что загрузите файл напрямую из указанного источника.
источник
Я столкнулся с той же проблемой. но написал правильное место.
face_cascade = cv2.CascadeClassifier('./model/haarcascade_frontalface_default.xml')
Я понял, что мне нужно указать полный путь, чтобы удалить ошибку.
face_cascade = cv2.CascadeClassifier('C:/pythonScript/Facial-Emotion-Detection/model/haarcascade_frontalface_default.xml')
источник
У меня была такая же проблема,
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
Убедитесь, что вы используете абсолютный путь. Иначе ничего не получится.
источник
Основная идея упомянутого выше решения: найти правильный путь к
.xml
файлу и использовать его для правильного доступа к файлу.В моем случае я установил opencv в anoconda env, сначала прямо на путь Anoconda, затем
найдите путь к
.xml
файлу, используя:$ find . -name 'haarcascade_eye.xml'
(например, поискhaarcascade_eye.xml
файла в текущем каталоге (.))Затем используйте возврат
path
:eye_cascade = cv2.CascadeClassifier(path + 'haarcascade_eye.xml')
источник
Ошибка возникает из-за отсутствия файлов 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()
источник