Object_Detection_Demo:Google protobuf text_format.Merge:需要一个类似字节的对象,而不是'str'

时间:2017-07-06 15:08:54

标签: python tensorflow object-detection

参考:object_detection_tutorial.ipynb

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

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

label_map = label_map_util.load_labelmap(PATH_TO_LABELS)

这会引发错误

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

在此函数 label_map_util.load_labelmap 中向下钻取后,下面是使用过的函数(load_labelmap)

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)

我试图看到同样的错误。但是您可以在输出中看到label_map_string已经是Bytes对象。在阅读时也尝试了'r'模式。

输出

<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'

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果发现从TensorFlow 1.0.0升级到TensorFlow 1.2.0解决了此错误。我在mac上使用protobuf == 3.3.0。

答案 1 :(得分:0)

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