看下面的代码:
def get_frame(self):
KSIZE = 11
ALPHA = 2
kernel = cv2.getGaussianKernel(KSIZE, 0)
kernel = -ALPHA * kernel @ kernel.T
kernel[KSIZE // 2, KSIZE // 2] += 1 + ALPHA
filtered = cv2.filter2D(self.img, -1, kernel)
gray = cv2.cvtColor(filtered, cv2.COLOR_BGR2GRAY)
faces = self.facec.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
fc = gray[y:y+h, x:x+w]
roi = cv2.resize(fc, (48, 48))
pred = self.model.predict_emotion(roi[np.newaxis, :, :, np.newaxis])
return pred
此时调用get_frame()函数时,如果输入参数不对,pred就可能没有返回值,这时就会报错:UnboundLocalError: local variable ‘val’ referenced before assignment
我们应该怎么做才能保证,get_frame()函数无论怎么调用都有返回值呢?
我们可以给它一个默认的返回值。改写如下:
self.pred = 'Neutral'
def get_frame(self):
KSIZE = 11
ALPHA = 2
kernel = cv2.getGaussianKernel(KSIZE, 0)
kernel = -ALPHA * kernel @ kernel.T
kernel[KSIZE // 2, KSIZE // 2] += 1 + ALPHA
filtered = cv2.filter2D(self.img, -1, kernel)
gray = cv2.cvtColor(filtered, cv2.COLOR_BGR2GRAY)
faces = self.facec.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
fc = gray[y:y+h, x:x+w]
roi = cv2.resize(fc, (48, 48))
self.pred = self.model.predict_emotion(roi[np.newaxis, :, :, np.newaxis])
return self.pred