问题标签 [protobuf-python]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1573 浏览

protocol-buffers - 将 protobuf 字段类型从 double 更改为 float

我有一条原始消息,我在服务中使用它来在各个地方存储数据

我的信息是这样的:

我的团队认为Matrix消息太大,将类型更改为float似乎是实现有效负载大小减小的一种简单方法。但是,当我将原型定义更改为使用float而不是double此处,并尝试读取旧数据(在 Python 阅读器中)时,它看起来已损坏。

我能想到的一个选项是为每个字段添加一个新的浮动选项:

然后我的反序列化代码可以检查每个 oneof 字段是否是doubleorfloat字段。这可行,但感觉就像一个笨重的设计模式。

在此示例中,是否有另一种方法可以向后兼容旧数据?

0 投票
0 回答
1432 浏览

python - 为什么 Python protobuf 消息的创建如此缓慢?

假设我有一条消息定义test.proto为:

我使用 protoc 将其转换为 Python,如下所示:

protoc --python_out=. test.proto

时间PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python

6.75 µs ± 152 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

时间PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp

1.6 µs ± 115 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

将其与 dict 进行比较:

308 ns ± 2.47 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

这也仅适用于一条消息。我的整个项目的 Protobuf cpp 实施大约需要 10.6µs。

有没有办法让它更快?也许编译输出(test_pb2)?

0 投票
1 回答
141 浏览

python - 如何修复 Import object_detection/protos/image_resizer.proto 但未使用

当我尝试编译 Protobuf 以使用 TensorFlow 对象检测 API 时遇到问题。

我正在关注本教程:https ://github.com/Khaivdo/How-to-train-an-Object-Detector-using-Tensorflow-API-on-Ubuntu-16.04-GPU

在命令行中,我尝试启动此命令(教程链接中的 1.4.2 Compile Protobuf):

我得到了这个错误:

我该如何解决?

0 投票
1 回答
1511 浏览

python - 无法将重复的 protobuf 对象保存到文件(Python)

我是 protobuf 的新手,所以我不知道如何正确地提出问题。

无论如何,我正在使用这个模型配置原型文件。protoc -I=. --python_out=. ./model_server_config.proto我使用Protocol Buffer page中的此命令将其转换为 python 。现在我有一些可以导入和处理的 python 文件。我的目标是创建一个文件(用于运行具有多个模型的 TensorFlow 模型服务器),该文件应如下所示:

现在使用编译的python包,我制作了一个protobuf对象,当我打印出来时它看起来像这样:

但是在使用 序列化对象时objectname.SerializeToString(),我得到一个奇怪的输出:

我也尝试使用 python 的 protobuf 将其转换为 Json,如下所示:

这给了我这样的结果:

将列表中的所有对象和每个对象作为字符串,这对于 TensorFlow 模型服务器配置是不可接受的。

关于如何正确将其写入文件的任何想法?还是我错误地创建了整个对象?欢迎任何帮助,在此先感谢。

0 投票
1 回答
269 浏览

python-3.x - Apache Flink 有状态函数 - 序列化问题?

我正在尝试使用 Python 中的 Apache Flink Stateful Function 构建一个项目,但我似乎无法让它工作。我将问题缩小到似乎当我通过我的 protobuf 模式将请求发送到我的有状态函数时,序列化程序无法将我的消息序列化到我期望的类中。这是我正在尝试做的事情:

这是我的 Protobuf 架构:

我在这里做错了什么?

0 投票
1 回答
184 浏览

refactoring - 查找未使用的 protobuf 消息

我们有一个包含许多原型文件的大型项目。其中许多包含不再在任何地方使用的消息,因此我想删除它们。但是,由于项目的规模,要查看这些消息中的哪些仍然是必要的,哪些不是。

我最初的方法是注释掉消息并重新注释,直到编译器满意(Java,C++)。不幸的是,我们也有大量的python,这种方法不起作用并且总是运行所有的测试用例太昂贵了。

有没有人遇到过这种情况?是否有任何工具可以帮助检测 Java、C++ 和 Python 中未使用的 protobuf 消息?

编辑:我可能应该补充一点,我们目前(仍然)将其所有用途都在我们的控制之下,所以我们项目之外的人都没有使用它们。

0 投票
0 回答
212 浏览

tensorflow - protoc 看不到文件?(我做错了什么)

我正在尝试运行:

在 tensorflow > models > research > object_detection > protos 内部的 protoc 目录中,它返回

但在我看来,这些文件肯定在那里? 目录图片

感谢您的耐心和时间。

编辑:我也尝试使用绝对路径

我收到同样的错误

0 投票
3 回答
1061 浏览

python-3.x - 使用python编译的protobuf pb2作为键值序列化器

我正在尝试从已使用 google 的 protobuf 序列化的 kafka topiv 中读取数据。

protoc我使用生成的文件编译了原型pb2文件。

现在我正在尝试使用 faust 并创建一个流处理器,但我找不到将 pb2 文件用作key_serializervalue_serializer.

这是我尝试过的:

有人知道如何在序列化程序中使用 pb2 吗?

0 投票
0 回答
1342 浏览

python - 如何在 protobuf 中调试无效的 utf-8?

我正在使用一些 tensorflow 代码并尝试加载经过训练的检查点,但由于 protobuf 错误而失败,如下所示:

为了调试显然产生无效 utf-8 的训练代码,我想知道有问题的无效数据实际上是什么样子。单步执行 pdb 中的代码并没有让我走得太远,因为ParseFromString()它是用 C++ 实现的。

如何找出无效的 utf-8 数据是什么?甚至是字节数组中发生错误的位置?

(在这种情况下,graph是 a tensorflow.core.framework.graph_pb2.GraphDef,它是 . 的子类,google.protobuf.message.Message但我的问题一般涉及 protobuf 解析,我认为在这方面没有什么特别之处GraphDef

0 投票
0 回答
68 浏览

python - Python-Protobuf 浮点值转换为 fixed64

我有以下 proto 架构,并已使用 protoc 将其转换为 _pb2 文件。现在,我编写了一个简单的 python 代码,它从带有硬编码值的 CSV 中获取一个值,并将输出 (.bin) 写入文件中。当我尝试使用以下链接(https://protogen.marcgravell.com/decode)解码输出文件时,应该是 double/float 的列显示为 fixed64 并且值完全不同。当我在我的原型模式中使用字符串而不是双精度时,我得到了正确的值。我尝试将'ResourceValue'的类型更改为float,然后结果类型更改为fixed32。任何帮助深表感谢。

原型模式

Python代码

Python 版本:3,3.8(都试过),Protoc 版本:libprotoc 3.7.1,protobuf 版本:3.10.0

对于上面的ResourceValue,解码后的值为4647338929071202844