问题标签 [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.
protocol-buffers - 将 protobuf 字段类型从 double 更改为 float
我有一条原始消息,我在服务中使用它来在各个地方存储数据
我的信息是这样的:
我的团队认为Matrix
消息太大,将类型更改为float
似乎是实现有效负载大小减小的一种简单方法。但是,当我将原型定义更改为使用float
而不是double
此处,并尝试读取旧数据(在 Python 阅读器中)时,它看起来已损坏。
我能想到的一个选项是为每个字段添加一个新的浮动选项:
然后我的反序列化代码可以检查每个 oneof 字段是否是double
orfloat
字段。这可行,但感觉就像一个笨重的设计模式。
在此示例中,是否有另一种方法可以向后兼容旧数据?
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
)?
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):
我得到了这个错误:
我该如何解决?
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 模型服务器配置是不可接受的。
关于如何正确将其写入文件的任何想法?还是我错误地创建了整个对象?欢迎任何帮助,在此先感谢。
python-3.x - Apache Flink 有状态函数 - 序列化问题?
我正在尝试使用 Python 中的 Apache Flink Stateful Function 构建一个项目,但我似乎无法让它工作。我将问题缩小到似乎当我通过我的 protobuf 模式将请求发送到我的有状态函数时,序列化程序无法将我的消息序列化到我期望的类中。这是我正在尝试做的事情:
这是我的 Protobuf 架构:
我在这里做错了什么?
refactoring - 查找未使用的 protobuf 消息
我们有一个包含许多原型文件的大型项目。其中许多包含不再在任何地方使用的消息,因此我想删除它们。但是,由于项目的规模,要查看这些消息中的哪些仍然是必要的,哪些不是。
我最初的方法是注释掉消息并重新注释,直到编译器满意(Java,C++)。不幸的是,我们也有大量的python,这种方法不起作用并且总是运行所有的测试用例太昂贵了。
有没有人遇到过这种情况?是否有任何工具可以帮助检测 Java、C++ 和 Python 中未使用的 protobuf 消息?
编辑:我可能应该补充一点,我们目前(仍然)将其所有用途都在我们的控制之下,所以我们项目之外的人都没有使用它们。
tensorflow - protoc 看不到文件?(我做错了什么)
我正在尝试运行:
在 tensorflow > models > research > object_detection > protos 内部的 protoc 目录中,它返回
但在我看来,这些文件肯定在那里?
感谢您的耐心和时间。
编辑:我也尝试使用绝对路径
我收到同样的错误
python-3.x - 使用python编译的protobuf pb2作为键值序列化器
我正在尝试从已使用 google 的 protobuf 序列化的 kafka topiv 中读取数据。
protoc
我使用生成的文件编译了原型pb2
文件。
现在我正在尝试使用 faust 并创建一个流处理器,但我找不到将 pb2 文件用作key_serializer
和value_serializer
.
这是我尝试过的:
有人知道如何在序列化程序中使用 pb2 吗?
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
)
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