起因:
起因于一个相当诡异的bug
同样的代码,在循环里不能正常运行,在循环外能正常运行
from PIL import Image
import numpy as np
for ......:
img_path = "./xxx.jpg"
np_img1 = np.asarray(Image.open(img_path), dtype=np.uint8)
# 报错
......
......
np_img2 = np.asarray(Image.open(img_path), dtype=np.uint8)
# 正常运行
报错:TypeError: int() argument must be a string, a bytes-like object or a number, not ‘JpegImageFile’
换用np.array出现同样问题
排查
略过代码审查
……
- 排查图片问题
try:
np_img = np.asarray(Image.open(img_path), dtype=np.uint8)
catch:
print("this img has some err:", path)
print(pil_img.size) # 对比正常图片大小,stackoverflow里有这个解决思路,可惜此处没有
np_img = np.zeros([234, 234])
- 尝试单独拎出图片调用
np_img = np.asarray(Image.open(err_img_path), dtype=np.uint8)
## 结果正常运行
-
重新下数据集,替换图片
结果完美解决?!?!???!
很离谱,只能判定那张图片是肯定有问题的,但什么问题属实没找出来