Saya mencoba mempelajari cv2 dengan python 2.7, tetapi ketika saya menjalankan kode saya, di bagian spesifiknya:
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)
ini mengembalikan ini:
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
Saya mencoba mencari jawabannya di sini tetapi yang terbaik yang dapat saya temukan adalah bahwa saya harus memuat face_cascade dengan cara yang salah ... Ada bantuan?
python
python-2.7
opencv
image-recognition
arthurckl
sumber
sumber
Jawaban:
XML atau file hilang atau jalur ke sana salah atau jalur create_capture salah.
Path dalam contoh opencv terlihat seperti ini:
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')
sumber
Saya memiliki masalah yang sama.
Saya tidak perlu mengunduh apa pun untuk menyelesaikan ini. CV2 memiliki semua yang saya butuhkan.
Alih-alih mencoba mencari tahu di mana
.xml
file-file tersebut dan hard coding nilainya, saya menggunakan properti yang diberikan oleh cv2.Dari OP
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
Menjadi
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')
sumber
Saya menjalankan kode yang sama. Ada dua hal yang perlu diperhatikan di sini. 1. Berikan seluruh jalur file .xml. 2. Berikan instruksi acara penekanan tombol di akhir.
Tambahkan blok kode ini di akhir dan jalankan file Anda, berhasil untuk saya:
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()
Misalnya, kode saya terlihat seperti
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()
Output saya terlihat seperti ini:
sumber
Gunakan seluruh jalur file dan gunakan "\\" sebagai ganti "\" di jalur file xml.
Jalur file harus seperti berikut:
face_cascade = cv2.CascadeClassifier('C:\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_default.xml')
dari pada:
cascade_fn = args.get('--cascade', "..\..\data\haarcascades\haarcascade_frontalface_alt.xml")
sumber
File XML tidak ada, Anda bisa mendapatkan file dari repositori GitHub dan meletakkannya di direktori yang sama dengan proyek Anda. Tautan ke folder di GitHub ada di sini . Unduh saja file bernama haarcascade_frontalface_default.xml . Sebenarnya, file tersebut ada di sistem Anda. Cukup buka folder paket situs dari folder instalasi python Anda dan periksa folder cv2 / data untuk file tersebut
sumber
Jika Anda menggunakan anaconda, Anda harus menambahkan jalur anaconda.
new_path = 'C:/Users/.../Anaconda/Library/etc/haarcascades/' face_cascade = cv2.CascadeClassifier(new_path + 'haarcascade_frontalface_default.xml')
sumber
tidak perlu mengubah kode
unduh file .xml itu, lalu letakkan jalur file itu
itu akan menyelesaikan kesalahan (100%)
sumber
Kesalahan ini berarti file XML tidak dapat ditemukan. Pustaka membutuhkan Anda untuk meneruskannya ke jalur lengkap, meskipun Anda mungkin hanya menggunakan file yang disertakan dengan pustaka OpenCV.
Anda dapat menggunakan
pkg_resources
modul bawaan untuk menentukan ini secara otomatis untuk Anda. Kode berikut mencari jalur lengkap ke file di dalam tempatcv2
modul dimuat:import pkg_resources haar_xml = pkg_resources.resource_filename( 'cv2', 'data/haarcascade_frontalface_default.xml')
Bagi saya ini adalah
'/Users/andrew/.local/share/virtualenvs/foo-_b9W43ee/lib/python3.7/site-packages/cv2/data/haarcascade_frontalface_default.xml'
; milikmu dijamin berbeda. Biarkan sajapkg_resources
perpustakaan python yang mengetahuinya.Keberhasilan!
sumber
Di OSX dengan homebrew, instal path lengkap ke folder opencv seharusnya berfungsi:
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')
Jaga nomor versi di jalur.
sumber
Mungkin
face_cascade
kosong. Anda dapat memeriksa apakah variabel kosong atau tidak dengan mengetik perintah berikut:Jika kosong Anda akan mendapatkan
True
dan ini berarti file Anda tidak tersedia di jalur yang Anda sebutkan. Coba tambahkan path lengkap file xml sebagai berikut:r'D:\folder Name\haarcascade_frontalface_default.xml'
sumber
"\ Anaconda3 \ Lib \ site-packages \ cv2 \ data \" Saya menemukan file xml di jalur ini untuk Anaconda
sumber
Anda hanya perlu menambahkan jalur yang tepat dari
haarcascade_frontalface_default.xml
file tersebut, yaitu Anda hanya perlu menambahkan prefiks (cv2.data.haarcascades
)face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')
sumber
Anda mungkin menemukan jenis kesalahan seperti itu ketika Anda tidak menentukan jalur lengkap file XML Anda. Coba yang ini jika Anda menggunakan opencv3.1.0 di raspberrypi 3: " faceCascade = cv2.CascadeClassifier ('/ home / pi / opencv-3.1.0 / data / haarcascades / haarcascade_frontalface_default.xml ')"
sumber
Anda dapat mengatasi masalah ini dengan menempatkan XML di direktori yang sama dengan file python utama Anda (dari mana Anda mencoba memasukkan file ini) ditempatkan. Sekarang langkah selanjutnya adalah menggunakan jalur lengkap. Sebagai contoh
Ini tidak akan berhasil
front_cascade = cv2.CascadeClassifier('./haarcascade_eye.xml')
Gunakan jalur lengkap, sekarang akan berfungsi dengan baik
front_cascade = cv2.CascadeClassifier('/Users/xyz/Documents/project/haarcascade_eye.xml')
sumber
Saya menemukan ini di beberapa jawaban lain tetapi akhirnya berhasil untuk saya ketika saya menambahkan dua jawaban.
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)
sumber
File XML Anda tidak ditemukan. Coba gunakan jalur absolut seperti:
sumber
kesalahan tersebut mungkin karena, file xml yang dibutuhkan belum dimuat dengan benar. Cari file
haarcascade_frontalface_default.xml
dengan menggunakan mesin pencari OS ur mendapatkan path lengkap dan meletakkannya sebagai argumencv2.CascadeClassifier
sebagai stringsumber
Harap jangan menyalin dan menempel konten file xml, karena setelah Anda menempelkannya ke notepad, itu akan disimpan sebagai file teks. Jadi langsung unduh file dari sumber yang diberikan.
sumber
Saya mengalami masalah yang sama. tapi lokasi yg benar aja.
face_cascade = cv2.CascadeClassifier('./model/haarcascade_frontalface_default.xml')
Saya menemukan bahwa saya perlu mendeklarasikan path lengkap untuk menghilangkan kesalahan.
face_cascade = cv2.CascadeClassifier('C:/pythonScript/Facial-Emotion-Detection/model/haarcascade_frontalface_default.xml')
sumber
Saya memiliki masalah yang sama dengan
opencv-python
dan saya menggunakan lingkungan virtual. Jika itu kasus Anda, Anda harus menemukanxml
file di:/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
Harap pastikan bahwa Anda menggunakan jalur absolut. Jika tidak, itu tidak akan berhasil.
sumber
Ide utama dari solusi seperti yang disebutkan di atas: temukan jalur yang benar dari
.xml
file dan gunakan untuk mengakses file dengan benar.Dalam kasus saya, saya menginstal opencv di anoconda env, pertama langsung ke jalur Anoconda, lalu
temukan jalur
.xml
file dengan menggunakan:$ find . -name 'haarcascade_eye.xml'
(misalnya mencarihaarcascade_eye.xml
file di direktori saat ini (.))Kemudian gunakan pengembalian
path
:eye_cascade = cv2.CascadeClassifier(path + 'haarcascade_eye.xml')
sumber
Saya menghadapi masalah serupa. Tampaknya mengoreksi jalur ke XML membuat kesalahan ini hilang.
sumber
Kesalahan terjadi karena file xml tidak ada atau path file xml tidak benar.
Silakan coba kode berikut,
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()
sumber