我正在关注这个视频。22点22分,发现这段代码有错误:
!python {SCRIPTS_PATH + '/generate_tfrecord.py'} -x {IMAGE_PATH + '/train'} -l {ANNOTATION_PATH + '/label_map.pbtxt'} -o {ANNOTATION_PATH + '/train.record'}
!python {SCRIPTS_PATH + '/generate_tfrecord.py'} -x{IMAGE_PATH + '/test'} -l {ANNOTATION_PATH + '/label_map.pbtxt'} -o {ANNOTATION_PATH + '/test.record'}
Run Code Online (Sandbox Code Playgroud)
发布具体的错误消息:
Traceback (most recent call last):
File "D:\info\1 Master\2 semster\RealTimeObjectDetection-main\Tensorflow\scripts\generate_tfrecord.py", line 29, in <module>
from object_detection.utils import dataset_util, label_map_util
File "C:\Users\bachir\PycharmProjects\pythonProject\venv\lib\site-packages\object_detection\utils\label_map_util.py", line 29, in <module>
from object_detection.protos import string_int_label_map_pb2
File "C:\Users\bachir\PycharmProjects\pythonProject\venv\lib\site-packages\object_detection\protos\string_int_label_map_pb2.py", line 5, in <module>
from google.protobuf.internal import builder as _builder
ImportError: cannot import name 'builder' from 'google.protobuf.internal' (C:\Users\bachir\PycharmProjects\pythonProject\venv\lib\site-packages\google\protobuf\internal\__init__.py)
Run Code Online (Sandbox Code Playgroud)
首先我尝试下载一些丢失的软件包,但同样的问题,我想帮忙
小智 107
按着这些次序:
pip install --upgrade protobuf
builder.py
到.../Lib/site-packages/google/protobuf/internal
计算机上的另一个文件夹(假设为“文档”)
pip install protobuf==3.19.4
builder.py
从(比方说“文档”)复制到Lib/site-packages/google/protobuf/internal
mar*_*c88 35
您需要升级到最新版本的软件包protobuf
:
pip install --upgrade protobuf
。
原因是自 Protobuf v3.20.0 以来,Python 类得到了简化。发行说明中直接写道:
Protobuf python 生成的代码被简化。描述符和消息类的定义现在是在internal/builder.py 中动态创建的。消息类的插入点被丢弃。
这解释了为什么生成的 Python 代码现在引用一个builder
模块,如果您尚未更新到最新版本的protobuf
包,则无法找到该模块。发行说明中没有对此进行解释,但我自己验证了如果升级软件包它就可以工作protobuf
。
小智 21
由于某种原因,从 TensorFlow 创建的包builder.py
中缺少该文件protobuf
。解决方法是简单地将 builder.py 的最新副本从protobuf
存储库复制到本地驱动器中
wget https://raw.githubusercontent.com/protocolbuffers/protobuf/main/python/google/protobuf/internal/builder.py -O [PROTOBUF_PATH]/lib/python3.8/site-packages/google/protobuf/internal/builder.py
Run Code Online (Sandbox Code Playgroud)
小智 10
解决方案分两步
pip uninstall protobuf
pip install protobuf==4.21
小智 5
就像维克多回答的那样。由于某种原因使用tensforflow时,安装protobuf时相关包中缺少builder.py。
复制并粘贴此代码并将其制作为 .py,然后将该文件粘贴到 {your env location}/site-packages/google/protobuf/internal/builder.py
一切顺利。
我可以通过不使用最新版本的 protoc 编译器编译 .proto 文件,而是使用旧版本 v3.19.4 来解决该问题(请参阅https://github.com/protocolbuffers/protobuf/releases)。