python - 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 会给我一个相当不错的帧速率