首页 > 解决方案 > openCL cv2.UMat 对象不可迭代

问题描述

好吧,实际上我真的不明白如何使用这个 T-API opencl 并且仍然是新手,在文档 https://www.learnopencv.com/opencv-transparent-api/

它使用 cv2.UMat 到 .image 文件,然后读取它。在我的问题中,我想在我的reconizer.predict线路中使用 opencl T-API,因为图像是在流式传输相机时拍摄/处理的

recognizer = cv2.face.LBPHFaceRecognizer_create()
#colec = cv2.face.MinDistancePredictCollector()
recognizer.read("trainer_data_array.yml")

labels = {"persons_name":0}
with open("labels.pickle", "rb") as f:
    og_labels = pickle.load(f)
    labels = {v:k for k,v in og_labels.items()}


cap = cv2.VideoCapture(0)

while(True):
    #video cap
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.5, minNeighbors=5)

    for (x,y,w,h) in faces:
        #print(x,y,w,h)
        roi_gray = gray[y:y+h, x:x+w]
        roy_color = frame[y:y+h, x:x+w]

        #recognize how?

        id_ , conf = recognizer.predict(roi_gray) #some error, some say cuz its opencv 3.1.0 bug 
                                                                #solution : up opencv to 3.3 or just use MinDistancePredictCollector(...)
        if conf>=45 and conf<=85:
            print(idppl)
            print(labels[idppl])
            font = cv2.FONT_HERSHEY_SIMPLEX
            name = labels[idppl]
            color = (255,255,255)
            stroke = 2
            cv2.putText(frame,name,(x,y),font,1,color,stroke,cv2.LINE_AA)
        elif conf > 85:
            print("unknown")

有人可以帮我怎么做,如果只是把它生的像id_ , conf = cv2.UMat(recognizer.predict(roi_gray)) 它给我错误cv2.UMat' object is not iterable

在没有 T-API mybe 的情况下,这条线程序仍然可以提供良好的帧速率,但是经过多次修改或实现/处理后,它在检测/识别人脸时将以低帧速率运行。

这就是我想使用 openCl 的原因,所以当它在 gpu 中运行时 mybe 会给我一个相当不错的帧速率

标签: pythonopencvopenclodroid

解决方案


推荐阅读