ত্রুটি: (-215)! ফাঁকা () ফাংশন সনাক্তকারী মাল্টিটস্কেলে


97

আমি পাইথন ২.7-তে সিভি 2 শিখার চেষ্টা করছি, তবে যখন আমি আমার কোডটি এটির নির্দিষ্ট অংশে চালিত করি:

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

আমি এখানে উত্তরটি সন্ধান করার চেষ্টা করেছি তবে সবচেয়ে ভাল আমি খুঁজে পেলাম যে আমি অবশ্যই মুখ_ক্যাসকেডকে ভুল উপায়ে লোড করছি ... কোন সাহায্য?


28
আপনার এক্সএমএল ফাইল পাওয়া যায় নি। "/my/files/bla/cacade.xml" মত একটি সুনির্দিষ্ট পাথ চেষ্টা
berak

@ বেরাক আপনার প্রস্তাবিত ব্যক্তির জন্য আমি মূল পথটি প্রতিস্থাপন করেছি তবে কোডটি একই ত্রুটিটি ফিরিয়ে দেয়
আর্থার্কেল

আপনি পরীক্ষা বা চিত্র প্রদর্শন করে আপনার চিত্রটি খালি নয় (যেমন সঠিকভাবে লোড করা হয়নি) তা যাচাই করতে পারবেন?
মিকা

4
ওহ আমি পেয়েছি, আমি ফিলা পথটি ভুল পথে লিখেছি। সাহায্যের জন্য ধন্যবাদ !
আর্থার্কেল

4
আমার একই সমস্যা আছে এবং আমি যতই চেষ্টা করেছিলাম তা সমাধান করতে পারছি না। আপনি কি আমাদের সমাধান করতে পারেন? @ আর্থার্কেল
অ্যাসিবিগেগুন্ডুজ

উত্তর:


65

এক্সএমএল বা ফাইল অনুপস্থিত বা এর পথটি ভুল বা ক্রিয়েট_ক্যাপচার পথটি ভুল।

ওপেনসিভি নমুনার পাথগুলি দেখতে এই রকম দেখাচ্ছে:

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')

59

আমারো একই ইস্যু ছিল.

এটি সমাধান করতে আমার আর কিছু ডাউনলোড করার দরকার নেই। সিভি 2 এর আমার যা কিছু প্রয়োজন ছিল তা ছিল।

.xmlফাইলগুলি কোথায় রয়েছে এবং মানগুলি কোডিংয়ের পক্ষে হার্ড করার চেষ্টা করার পরিবর্তে আমি সিভি 2 দ্বারা প্রদত্ত একটি সম্পত্তি ব্যবহার করেছি।

ওপি থেকে

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')

9
এটি সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত, আমার সময় বাঁচাতে পারে।
জো আলবোইকজ

4
এটি নিখুঁতভাবে কাজ করেছে এটি সঠিক হিসাবে চিহ্নিত করা উচিত
সিভার ওলসন

@ ভিআইভিআইডি আপনি কী ত্রুটি পেয়েছেন? এটি কি সিভি 2.ডাটা.হারাক্যাসেকেডস বা সিভি 2. ক্যাসকেডক্ল্যাসিফির সাথে ছিল?
ম্যান্ডেলব্রোটার

@Mandelbrotter এখানে আমার সমস্যা হল: stackoverflow.com/questions/63423843/...
প্রাণবন্ত

17

আমি একই কোড চালানো। এখানে দুটি বিষয় লক্ষণীয়। 1. .xML ফাইলগুলির পুরো পথ দিন। ২. শেষে একটি কী প্রেস ইভেন্টের নির্দেশ দিন।

এই কোডের ব্লকটি শেষে যুক্ত করুন এবং আপনার ফাইলটি চালান, আমার পক্ষে কাজ করেছেন:

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()

আমার আউটপুটটি এরকম দেখাচ্ছে:

আউটপুট


আমার জন্য চূড়ান্ত পথটি ভুল ছিল সিডাব্লুডি (সি: ড্রাইভ / প্রকল্পের ডিরেক্টরি /) অর্থাত্ 'সি: / ফ্লাস্ক / ভেনভ / লিবি / সাইট-প্যাকেজ / সিভি 2 / ডেটা /'
থমাসলাইআইট

11

পুরো ফাইল পাথটি ব্যবহার করুন এবং এক্সএমএল ফাইল পথে "\" এর পরিবর্তে "\\" ব্যবহার করুন।

ফাইল পাথটি নিম্নরূপ হওয়া উচিত:

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

পরিবর্তে:

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

11

এক্সএমএল ফাইল অনুপস্থিত, আপনি গিটহাব সংগ্রহস্থল থেকে ফাইলটি পেতে পারেন এবং এটি আপনার প্রকল্পের মতো একই ডিরেক্টরিতে রাখতে পারেন। গিটহাবের ফোল্ডারে লিঙ্কটি এখানে । কেবলমাত্র hacksascade_frontalface_default.xML নামক ফাইলটি ডাউনলোড করুন । আসলে, ফাইলটি আপনার সিস্টেমে বিদ্যমান। কেবলমাত্র আপনার পাইথন ইনস্টলেশন ফোল্ডারের সাইট-প্যাকেজ ফোল্ডারে যান এবং ফাইলের জন্য সিভি 2 / ডেটা ফোল্ডারটি পরীক্ষা করুন


8

আপনি যদি অ্যানাকোন্ডা ব্যবহার করছেন তবে আপনার অ্যানাকোন্ডা পথটি যুক্ত করা উচিত।

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

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

8

কোড পরিবর্তন করার দরকার নেই

.xml ফাইলটি ডাউনলোড করুন, তারপরে সেই ফাইলটির পথ রাখুন

এটি ত্রুটিটি সমাধান করবে (100%)


5

এই ত্রুটির অর্থ XML ফাইলটি খুঁজে পাওয়া যায় নি। আপনি সম্ভবত কেবলমাত্র ওপেনসিভি লাইব্রেরির সাথে উপস্থিত এমন একটি ফাইল ব্যবহার করছেন যদিও গ্রন্থাগারটি আপনাকে পুরো পথটি অতিক্রম করতে হবে।

আপনার জন্য স্বয়ংক্রিয়ভাবে এটি নির্ধারণ করতে আপনি অন্তর্নির্মিত 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)

সাফল্য!


4

ওএসএক্সে হোমব্রু দিয়ে ওপেনসিভি ফোল্ডারের পুরো পথটি ইনস্টল করা উচিত:

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')

পথে সংস্করণ নম্বর যত্ন নিন।


3

সম্ভবত face_cascadeখালি। ভেরিয়েবলটি খালি কিনা তা নিম্নলিখিত কমান্ডটি লিখে পরীক্ষা করতে পারেন:

face_cascade.empty()

যদি এটি খালি থাকে তবে আপনি পাবেন Trueএবং এর অর্থ আপনার ফাইলটি আপনি উল্লিখিত পথে উপলভ্য নয়। নিম্নলিখিত হিসাবে এক্সএমএল ফাইলের সম্পূর্ণ পাথ যুক্ত করার চেষ্টা করুন:

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

3

"\ অ্যানাকোন্ডা 3 \ লিবি \ সাইট-প্যাকেজস \ সিভি 2 \ ডেটা \" আমি অ্যানাকোন্ডার জন্য এই পথে xML ফাইলটি পেয়েছি


3

আপনাকে কেবলমাত্র haarcascade_frontalface_default.xmlফাইলের সঠিক পাথ যুক্ত করতে হবে অর্থাৎ আপনাকে কেবল উপসর্গটি যুক্ত করতে হবে ( cv2.data.haarcascades)

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

2

আপনি যখন আপনার এক্সএমএল ফাইলের সম্পূর্ণ পথটি সংজ্ঞায়িত না করেন তখন আপনি এ জাতীয় ত্রুটিগুলি খুঁজে পেতে পারেন। আপনি যদি রাস্পবেরিপি 3: ওপেনসিভি 3.1 ব্যবহার করেন তবে এটি ব্যবহার করে দেখুন: " ফেসক্যাসেকেড = সিভি 2. ক্যাসকেডক্লাসিফায়ার ('/ হোম / পিআই / ওপেনসিভি -3.1.0 / ডেটা / হার্কাসকেডস / হারাক্যাসকেড_ফ্রন্টলফেস_ডিফাল্ট.এক্সএমএল ')"


2

আপনার মূল পাইথন ফাইলটি (যেখানে আপনি এই ফাইলটি অন্তর্ভুক্ত করার চেষ্টা করেছিলেন) সেই একই ডিরেক্টরিতে এক্সএমএল রেখে আপনি এই সমস্যার সমাধান করতে পারেন । এখন পরবর্তী পদক্ষেপটি হল পুরো পথ ব্যবহার করা। উদাহরণ স্বরূপ

এটি কাজ করবে না

front_cascade = cv2.CascadeClassifier('./haarcascade_eye.xml')

পুরো পথ ব্যবহার করুন, এখন এটি ঠিকঠাক কাজ করবে

front_cascade = cv2.CascadeClassifier('/Users/xyz/Documents/project/haarcascade_eye.xml')

2

আমি এটি অন্য কোনও উত্তরে খুঁজে পেয়েছি তবে শেষ পর্যন্ত আমার পক্ষে দু'টি উত্তর যুক্ত করার পরে কাজ করেছি।

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)

1

আপনার এক্সএমএল ফাইলটি পাওয়া যায় নি। এর মতো নিখুঁত পাথ ব্যবহার করার চেষ্টা করুন:

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

1

ত্রুটিটি কারণে হতে পারে, প্রয়োজনীয় এক্সএমএল ফাইলগুলি সঠিকভাবে লোড করা যায় নি। haarcascade_frontalface_default.xml আপনার ওএস এর সার্চ ইঞ্জিন ব্যবহার করে ফাইলটি অনুসন্ধান করুন পুরো পাথ পান এবং cv2.CascadeClassifierস্ট্রিং হিসাবে যুক্তিরূপে রাখুন


1

দয়া করে এক্সএমএল ফাইলের বিষয়বস্তু পেস্ট করুন অনুলিপি করবেন না, কারণ আপনি একবার নোটপ্যাডে পেস্ট করুন এটি পাঠ্য ফাইল হিসাবে সংরক্ষণ করা হবে। সুতরাং প্রদত্ত উত্স থেকে সরাসরি ফাইলটি ডাউনলোড করুন।


1

আমি একই সমস্যা মধ্যে দৌড়ে। তবে সঠিক অবস্থানটি লিখেছেন।

face_cascade = cv2.CascadeClassifier('./model/haarcascade_frontalface_default.xml')

আমি বুঝতে পেরেছি যে ত্রুটিটি সরানোর জন্য আমার পুরো পথটি ঘোষণা করতে হবে।

face_cascade = cv2.CascadeClassifier('C:/pythonScript/Facial-Emotion-Detection/model/haarcascade_frontalface_default.xml')

আমার সমস্যার সমাধান! একত্রিত সঙ্গে যে stackoverflow.com/a/3430395/3525780 এবং সবসময় সাম্প্রতিক কাজ করা পেতে
Fusseldieb

0

আমার একই সমস্যা ছিল 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

আপনি নিখুঁত পথ ব্যবহার করছেন তা নিশ্চিত হন। অন্যথায়, এটি কাজ করবে না।


0

উপরে উল্লিখিত হিসাবে সমাধানের মূল ধারণা: .xmlফাইলটির সঠিক পথটি সন্ধান করুন এবং ফাইলটি সঠিকভাবে অ্যাক্সেস করতে এটি ব্যবহার করুন।

আমার ক্ষেত্রে, আমি প্রথম এনোকোন্ডা এনভিটিতে ওপেনসিভি ইনস্টল করেছি, তারপরে প্রথমে আনোকোন্ডার পথে সরাসরি

  • পথ খুঁজে .xmlব্যবহার করে ফাইল:

    $ find . -name 'haarcascade_eye.xml' (উদাহরণস্বরূপ haarcascade_eye.xmlবর্তমান ডিয়ারে ফাইল অনুসন্ধান করুন (।))

  • তারপরে রিটার্নটি ব্যবহার করুন path:

eye_cascade = cv2.CascadeClassifier(path + 'haarcascade_eye.xml')


0

আমি একই রকম সমস্যার মুখোমুখি হয়েছি। দেখে মনে হচ্ছে XML- এর পথটি সংশোধন করা এই ত্রুটিটিকে দূরে সরিয়ে দেয়।


তাই আপনাকে স্বাগতম। যদিও আমরা আপনার উত্তরের জন্য আপনাকে ধন্যবাদ জানাই, অন্য উত্তরগুলির উপরে যদি এটি অতিরিক্ত মান সরবরাহ করে তবে এটি আরও ভাল। এই ক্ষেত্রে, আপনার উত্তর অতিরিক্ত মান সরবরাহ করে না, যেহেতু ইতিমধ্যে এক্সএমএলটির পথ পরিবর্তন করার উল্লেখ রয়েছে প্রচুর উত্তর।
দোজ

-1

এক্সএমএল ফাইল অনুপস্থিত বা এক্সএমএল ফাইলের ভুল পথের কারণে ত্রুটি ঘটে।

নিম্নলিখিত কোড চেষ্টা করুন,

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()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.