TensorFlow2.1车牌检测代码报错:No module named 'protos'求助
ModuleNotFoundError: No module named 'protos'的方案 看来你在迁移车牌检测代码到TF2.1时碰到了模块找不到的问题,这个问题本质是Python无法定位到protos这个包含protobuf定义的包,我给你几个针对性的排查和解决方向:
第一步:确保Python路径包含目标目录
你的protos文件夹应该在models1/research或者和utils同级的目录下,首先要把这个目录添加到Python的搜索路径里。你可以在代码开头加上这两行:import sys sys.path.append('C:/Users/hp/Downloads/Compressed/models1/research') # 替换成protos所在的上级目录 sys.path.append('C:/Users/hp/Downloads/Compressed/models1/research/slim')或者在Windows命令行里临时设置环境变量:
set PYTHONPATH=C:\Users\hp\Downloads\Compressed\models1\research;C:\Users\hp\Downloads\Compressed\models1\research\slim第二步:重新编译Protobuf文件
旧版TensorFlow Object Detection API里的protos模块需要手动把.proto文件编译成Python代码。先确保你已经安装了Protobuf编译器(Windows可以下载对应版本的protoc二进制包,解压后把protoc.exe路径加入系统环境变量),然后进入models1/research目录,运行:protoc protos/*.proto --python_out=.这会把
protos文件夹里的所有.proto文件编译成对应的_pb2.py文件,包括你需要的string_int_label_map_pb2.py。第三步:检查目录结构与包标识
确认你的目录结构是合理的,比如:models1/ ├── utils/ │ └── label_map_util.py ├── protos/ │ ├── __init__.py │ ├── string_int_label_map.proto │ └── string_int_label_map_pb2.py └── ...如果
protos文件夹里没有__init__.py,手动创建一个空的这个文件,让Python把它识别为一个可导入的包。第四步:适配TF2.x的API调整
如果你用的是比较旧的models仓库,可能部分代码和TF2.x兼容性不好。也可以考虑切换到TF2官方的Object Detection API:通过pip install tf-models-official安装后,替换掉原有的label_map_util导入,用from official.vision.utils.label_map_util import load_labelmap这类官方API,避免自己处理protos编译的问题。
先从上面的步骤逐一排查,应该能解决这个模块找不到的问题。
内容的提问来源于stack exchange,提问作者Junaid

