TensorFlow目标检测API运行报错:int()参数不能为NoneType,无摄像头也触发
解决TensorFlow目标检测API的int()参数为NoneType错误
最近我在学习TensorFlow目标检测API的相关教程,不管是用静态图片测试(不调用摄像头)还是直接用摄像头运行代码,都会触发如下错误栈:
Traceback (most recent call last):
File "C:\obj\models\research\object_detection\object_testmien_image.py", line 138, in
feed_dict={image_tensor: image_np_expanded})
File "C:\Users\tomsa\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\client\session.py", line 905, in run
run_metadata_ptr)
File "C:...
同时还收到明确的错误提示:TensorFlow目标检测错误:int()的参数必须是字符串、类字节对象或数字,不能是'NoneType'
几个实用的排查和解决方向
- 先确认输入数据是否正常加载:这个错误90%的概率是你的
image_np_expanded变量变成了None——说白了就是图像没成功读进来。如果是静态图片,检查cv2.imread()的路径是不是写错了,比如Windows路径的反斜杠有没有转义(写成\\或者用正斜杠/),或者图片文件是不是真的在你指定的文件夹里;如果是用摄像头,看看cv2.VideoCapture(0)的设备号对不对,有没有其他程序占用了摄像头。 - 检查模型文件是否正确加载:要是你的预训练模型(.pb文件)没下载完整、路径写错或者解压出错,后续的张量操作也会出问题。可以在模型加载的代码后面加个打印,确认模型是否成功加载。
- 定位第138行的变量状态:错误刚好出在第138行的
feed_dict处,建议在这行代码前加一句print("image_np_expanded:", image_np_expanded),看看输出是不是None。如果确实是None,就往前找图像预处理的代码,比如是不是在resize、转格式的时候操作失误,导致数据丢失变成了None。 - 排查版本兼容性:你用的是Python3.5搭配旧版TensorFlow,目标检测API对TensorFlow版本要求很严,比如1.x和2.x的代码逻辑差异极大。看看你跟着的教程对应的TensorFlow版本是不是和你本地安装的一致,版本不兼容也会出现这种奇怪的类型错误。
内容的提问来源于stack exchange,提问作者Mader n fader
相关产品推荐
相关产品推荐

