Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to solve "AttributeError: module 'google.protobuf.descriptor' has no attribute '_internal_create_key"?

I encountered it while executing from object_detection.utils import label_map_util in jupyter notebook. It is actually the tensorflow object detection tutorial notebook(it comes with the tensorflow object detection api) The complete error log:

AttributeError                            Traceback (most recent call last) <ipython-input-7-7035655b948a> in <module>       1 from object_detection.utils import ops as utils_ops ----> 2 from object_detection.utils import label_map_util       3 from object_detection.utils import visualization_utils as vis_util  ~\AppData\Roaming\Python\Python37\site-packages\object_detection\utils\label_map_util.py in <module>      25 import tensorflow as tf      26 from google.protobuf import text_format ---> 27 from object_detection.protos import string_int_label_map_pb2      28       29   ~\AppData\Roaming\Python\Python37\site-packages\object_detection\protos\string_int_label_map_pb2.py in <module>      19   syntax='proto2',      20   serialized_options=None, ---> 21   create_key=_descriptor._internal_create_key,      22   serialized_pb=b'\n2object_detection/protos/string_int_label_map.proto\x12\x17object_detection.protos\"\xc0\x01\n\x15StringIntLabelMapItem\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x05\x12\x14\n\x0c\x64isplay_name\x18\x03 \x01(\t\x12M\n\tkeypoints\x18\x04 \x03(\x0b\x32:.object_detection.protos.StringIntLabelMapItem.KeypointMap\x1a(\n\x0bKeypointMap\x12\n\n\x02id\x18\x01 \x01(\x05\x12\r\n\x05label\x18\x02 \x01(\t\"Q\n\x11StringIntLabelMap\x12<\n\x04item\x18\x01 \x03(\x0b\x32..object_detection.protos.StringIntLabelMapItem'      23 )  AttributeError: module 'google.protobuf.descriptor' has no attribute '_internal_create_key' 
like image 412
Reghunaath A A Avatar asked May 20 '20 20:05

Reghunaath A A


People also ask

What is Protobuf Python?

Protocol buffers (Protobuf) are a language-agnostic data serialization format developed by Google. Protobuf is great for the following reasons: Low data volume: Protobuf makes use of a binary format, which is more compact than other formats such as JSON. Persistence: Protobuf serialization is backward-compatible.


2 Answers

The protoc version I got through pip show protobuf and protoc --version were different. The version in pip was a bit outdated.

After I upgraded the pip version with

pip install --upgrade protobuf 

the problem was solved.

like image 113
Reghunaath A A Avatar answered Sep 24 '22 10:09

Reghunaath A A


These three commands solved it for me:

pip uninstall protobuf python3-protobuf pip install --upgrade pip pip install --upgrade protobuf 
like image 20
analyst045 Avatar answered Sep 21 '22 10:09

analyst045