Ошибка Python TypeError: в UMat () отсутствует обязательный аргумент 'range' (позиция 2) - PullRequest
0 голосов
/ 21 января 2019

Я пишу программу распознавания лиц, и я продолжаю получать эту ошибку, и я просто очень запутался, я не вижу других примеров в Интернете, где люди включают диапазоны при преобразовании в UMat

    Traceback (most recent call last):
  File "test.py", line 48, in <module>
    test_photos()
  File "test.py", line 40, in test_photos
    face, rect = detect_face(test_photo)
  File "test.py", line 15, in detect_face
    imgUMat = cv2.UMat(img)
TypeError: UMat() missing required argument 'ranges' (pos 2)

мой код

def detect_face(img):   
    imgUMat = cv2.UMat(img)
    gray = cv2.cvtColor(imgUMat, cv2.COLOR_BGR2GRAY)
    face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5)
    if (len(faces)==0):
        return None, None
    (x, y, w, h) = faces[0]
    gray = gray.get()
    return gray[y:y+h,x:x+w], faces[0]

def prepare_training_data():
    faces = []
    labels = []
    for img in photo_name_list: #a collection of file locations as strings
        image = cv2.imread(img)
        face, rect = detect_face(image)
        if face is not None:
            faces.append(face)
            labels.append(me)
    return faces, labels

def test_photos():
    face_recognizer = cv2.face.LBPHFaceRecognizer_create()
    faces, labels = prepare_training_data()
    face_recognizer.train(np.array(faces), np.array(labels))
    face, rect = detect_face(test_photo)
    label = face_recognizer.predict(face)
    if label == me:
        print("it's me")
    else:
        print("it's not me")


test_photos()

если я не использую UMat (), я получаю эту ошибку:

Traceback (most recent call last):
  File "test.py", line 48, in <module>
    test_photos()
  File "test.py", line 40, in test_photos
    face, rect = detect_face(test_photo)
  File "test.py", line 16, in detect_face
    gray = cv2.cvtColor(imgUMat, cv2.COLOR_BGR2GRAY)
TypeError: Expected cv::UMat for argument 'src'

Я использую OpenCV 4.0.0, и, честно говоря, я просто очень смущен, потому что из того, что я видел, никто не должен был использовать UMat для использования cvtColor (), не говоря уже о использовании диапазонов внутри UMat (). Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Вместо преобразования в UMat с использованием cv2.Umat(), просто передайте его в np.float32().Эти два идентичных для всех намерений и целей.

Ваш код будет выглядеть так:

def detect_face(img):   
    imgUMat = np.float32(img)
    gray = cv2.cvtColor(imgUMat, cv2.COLOR_BGR2GRAY)
0 голосов
/ 22 января 2019

Я думаю, что это как-то связано с типом данных массива, заданным в качестве входных данных для функций cv2. Я тоже получил ошибку, и когда я сделал arr.dtype, он показывал как float16, а при преобразовании в float32 ошибка была решена.

...