使用检测器将待识别目标图像截取出来后,送入ocr模型,发现识别结果完全不对,然而将crop_img保存到本地,然后在使用oencv读出来,再识别,结果就是正确的。
我比较了直接截取的图片和保存后再读取的图片,二者的bgr通道上会相差大约0-3的一个像素值。查看网上资料学习,说的是,保存图片时,会根据格式来进行一个压缩(大致是这意思)。
解决方法:截取的图片是一个ndarray,type是unit8的,将他改为float32就对了。
部分代码:
x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2) crop_img = data[y1:y2, x1:x2] # cv2.imwrite('img/crop.jpg', crop_img) crop_img_float = crop_img.astype(np.float32)# 这行很重要,T T # cv2.imshow('crop', crop_img) # cv2.waitKey(0) rec_result1 = self.recognizer.predict(crop_img_float) # crop = cv2.imread('img/crop.jpg') # x = crop - crop_img # print(x) # rec_result = self.recognizer.predict(crop) print(rec_result)
离谱,试了好久。
记录一下,免得搞忘