Python Object_Detection_Demo:googleprotobuf text_format.Merge:需要类似Object的字节,而不是';str';

Python Object_Detection_Demo:googleprotobuf text_format.Merge:需要类似Object的字节,而不是';str';,python,tensorflow,object-detection,Python,Tensorflow,Object Detection,参考: 注意:我已经根据安装说明成功地安装了所有内容,并在github上对此进行了研究,但运气不佳 标签将索引映射到类别名称,所以当我们的卷积网络预测5时,我们知道这对应于飞机 label_map = label_map_util.load_labelmap(PATH_TO_LABELS) 这会产生一个错误,如下所示: TypeError: a bytes-like object is required, not 'str' 在这个函数中向下钻取label\u map\u util.load

参考:

注意:我已经根据安装说明成功地安装了所有内容,并在github上对此进行了研究,但运气不佳

标签将索引映射到类别名称,所以当我们的卷积网络预测5时,我们知道这对应于飞机

label_map = label_map_util.load_labelmap(PATH_TO_LABELS)
这会产生一个错误,如下所示:

TypeError: a bytes-like object is required, not 'str'
在这个函数中向下钻取label\u map\u util.load\u labelmap之后,下面是所使用的函数(load\u labelmap)

我试着找出同样的错误。但是label_map_string已经是一个Bytes对象,正如您在输出中看到的那样。阅读时也尝试了“r”模式

输出

---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
5打印(类型(标签和地图))
6尝试:
---->7文本格式。合并(标签映射字符串,标签映射)
8除text_format.ParseError外:
9 label\u map.ParseFromString(label\u map\u string)
合并中的C:\Users\GUS9KOR\AppData\Local\Continuum\Anaconda3\envs\dlnd\lib\site packages\protobuf-3.3.0-py3.5.egg\google\protobuf\text\u format.py(文本、消息、允许未知扩展名、允许字段号、描述符池)
475   """
476回路线(
-->477文本。拆分('\n'),
478信息,
479允许\u未知\u扩展,
TypeError:需要类似字节的对象,而不是“str”

提前谢谢。

您能提供更多关于您环境的信息吗?我已经在我的Windows 10机器上使用Anaconda 3完成了这项工作。具体来说,您使用的是tensorflow的哪个版本,以及您使用哪个版本的protoc编译protos?

如果发现从tensorflow 1.0.0升级到tensorflow 1.2.0的问题已经解决此错误。我在mac上使用protobuf==3.3.0。

Windows 7、Conda 4.3.22、tensorflow 1.0.0 protobuf 3.3.0已安装。但要编译protos目录文件,我必须使用此处提到的protobuf二进制exe文件[by astrung For window用户:使用protobuf二进制文件:protoc-3.3.0-win32.zip然后:\link\to\protoc object\u detection/protos/*.proto--python\u out=.>然后你可以导入字符串\u int\u label\u map\u pb2你能试着运行“print google.protobuf.\u version\u\u”吗?我见过其他用户在protobuf运行库中遇到类似的问题另外,您是否可以考虑将TysFraseFo安装升级到1.2?不管我们使用更新的TF OPS,运行SSD模型所需的更改都是必需的。
from google.protobuf import text_format
from object_detection.protos import string_int_label_map_pb2

with tf.gfile.GFile(PATH_TO_LABELS, 'rb') as fid:
    label_map_string = fid.read()
    label_map = string_int_label_map_pb2.StringIntLabelMap()
    print(type(label_map_string))
    print(type(label_map))
    try:
      text_format.Merge(label_map_string, label_map)
    except text_format.ParseError:
      label_map.ParseFromString(label_map_string)
<class 'bytes'>
<class 'object_detection.protos.string_int_label_map_pb2.StringIntLabelMap'>
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-25-3fce64fd5c00> in <module>()
      5     print(type(label_map))
      6     try:
----> 7       text_format.Merge(label_map_string, label_map)
      8     except text_format.ParseError:
      9       label_map.ParseFromString(label_map_string)

C:\Users\GUS9KOR\AppData\Local\Continuum\Anaconda3\envs\dlnd\lib\site-packages\protobuf-3.3.0-py3.5.egg\google\protobuf\text_format.py in Merge(text, message, allow_unknown_extension, allow_field_number, descriptor_pool)
    475   """
    476   return MergeLines(
--> 477       text.split('\n'),
    478       message,
    479       allow_unknown_extension,

TypeError: a bytes-like object is required, not 'str'