Próbuję wykonać detektor / klasyfikator samochodu z cv2 Mam plik .xml pobrałem z GitHub: https://gist.github.com/1999995/37e1e0af2bf8965E8058A9dfa3285bc6 i kiedykolwiek uruchomiłem mój kod dostaję

Traceback (most recent call last):

  File "C:\Users\user1\Downloads\Stuff\Python\cascades\Car_classification.py", line 13, in <module>
    gray = cv2.cvtColor(frames, cv2.COLOR_BGR2GRAY)

error: OpenCV(4.3.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

A mój kod to:

import cv2
import numpy as np

cap = cv2.VideoCapture('car.jpg')

font = cv2.FONT_HERSHEY_TRIPLEX

harcascade = cv2.CascadeClassifier("cars.xml")

while True:
    ret,frames = cap.read()

    gray = cv2.cvtColor(frames, cv2.COLOR_BGR2GRAY)
    
    cars = harcascade.detectMultiScale(gray, 1.1 , 2)
    
    for (x,y,w,h) in cars:
        cv2.rectangle(frames,(x,y),(x+w,y+h),(255,0,0),2)
        cv2.putText(frames,str("Car"),(x,y+h),font,1,255)
     
    
    cv2.imshow('img',frames)   

     
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break
    
    
cap.release()
cv2.destroyAllWindows()

Mój obraz wejściowy:

enter image description here

Moje zdjęcie wyjściowe:

To samochód, ale nie sądzę, że opona jest samochodem! Więc co robię źle?

1
PyCoder64 21 listopad 2020, 18:12

1 odpowiedź

Najlepsza odpowiedź

Nie mogę powiedzieć, dlaczego twoja klasyfikacja nie odbiera samochodu z żadną pewnością, ponieważ nie mam żadnych informacji na temat gdzie https://gist.github.com/1999995/37e1e0af2BF8935E8058A9dfa3285bc6 pochodzi z. Nie wiedząc o tym, nie mogę powiedzieć, jakiego rodzaju obrazy oczekuje się, że będzie w stanie wykryć. Możliwe, że został wyszkolony do rozpoznawania samochodów z obrazów bardziej jak ta Parking, a nawet powiększony. W takim przypadku Twój przykładowy obraz jest całkowicie w przeciwieństwie do tego, co zostało przeszkolone do wykrycia. Nie wiedząc więcej, nie można powiedzieć.

Jeśli chodzi o ten komunikat o błędzie, który mogę przynajmniej wyjaśnić.

cap = cv2.VideoCapture('car.jpg')

Otwierasz obraz jako wideo. Na pierwszym przejściu przez pętlę, jest (zaskakująco), aby odczytać dane obrazu, ale po tym na następnej przełęczy nie ma więcej "ramek", aby czytać, więc obiekt frames jest None, jest Brak danych obrazu w nim. Oznacza to, że próbujesz przekonwertować go na skale szarości, operacja zawodzi.

2
buckley-w-david 21 listopad 2020, 16:51