标签: protoc

Protocal缓冲区不生成服务存根

我在GRPC中从.proto文件生成存根时遇到了一些麻烦.这是.proto文件的样子

`syntax = "proto3";`
// The greeting service definition.
service Greeter {
    // Sends a greeting
    rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
    string name = 1;
}

// The response message containing the greetings
message HelloReply {
    string message = 1;
}
Run Code Online (Sandbox Code Playgroud)

该文件确实生成了protocal缓冲区代码,但我没有得到任何服务存根.IE我不能使用阻塞存根.

我试图使用"java_multiple_files = true"修复,但这只是将生成的proto文件拆分为几个单独的proto文件.

我目前正在使用以下命令提示符行生成我的proto文件.

protoc --proto_path= src\proto\protoFile.proto --java_out=src\sourceThings
Run Code Online (Sandbox Code Playgroud)

如果您有任何想法或需要更多信息,请与我们联系.

谢谢!-DJ

java protocol-buffers proto grpc protoc

5
推荐指数
1
解决办法
1247
查看次数

使用SBT构建工具在Java中编译Protobufs的编译错误

我在Java中使用播放框架(使用SBT构建工具),需要消耗protobuf。所以我有xxx.proto文件。我得到了二进制协议编译器,并将其添加到类路径中。所以我看到-


protoc --version libprotoc 3.1.0

我已经使用-编译了xxx.proto文件, protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/xxx.proto因此它已经生成了xxx.java文件。

现在,当我编译此xxx.java文件时(使用sbt构建工具的项目)

[error] /my_project/app/helpers/xxx.java:7: package com.google.protobuf        does not exist
[error] com.google.protobuf.ExtensionRegistryLite
[error] /my_project/app/helpers/xxx.java:11: package com.google.protobuf does not exist
[error] com.google.protobuf.ExtensionRegistry
[error] /my_project/app/helpers/xxx.java:6182: package com.google.protobuf.Descriptors does not exist
[error] com.google.protobuf.Descriptors.Descriptor
[error] /my_project/app/helpers/xxx.java:6185: package com.google.protobuf.GeneratedMessageV3 does not exist
[error] com.google.protobuf.GeneratedMessageV3.FieldAccessorTable`
Run Code Online (Sandbox Code Playgroud)

我在安装的库中看到com.google.protobuf jar。

我的xxx.proto如下-

 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: xxx.proto

 public final class xxx {
 private xxx() {}
 public static void registerAllExtensions(
  com.google.protobuf.ExtensionRegistryLite registry) {
 } …
Run Code Online (Sandbox Code Playgroud)

java protocol-buffers protobuf-c protoc

5
推荐指数
1
解决办法
4965
查看次数

如何用Java编写自定义的Protobuf CodeGenerator

我正在尝试为内部专有编程语言编写自定义代码生成器。我想我可以使用protoc插件指南用Java编写生成器。我的main()做这样的事情:

public static void main(String[] args) throws IOException {
    CodeGenerator gen = new CodeGenerator();
    PluginProtos.CodeGeneratorRequest codeGeneratorRequest = PluginProtos.CodeGeneratorRequest.parseFrom(args[0].getBytes());
    codeGeneratorRequest.getProtoFileList().forEach(gen::handleFile);
    // get the response and do something with it 
    //PluginProtos.CodeGeneratorResponse response = PluginProtos.CodeGeneratorResponse.newBuilder().build();
    //response.writeTo(System.out);
}
Run Code Online (Sandbox Code Playgroud)

(显然,我才刚刚开始;想在实际编写生成逻辑之前先进行一些简单的工作)

问题是:如何使用--plugin参数调用protoc以使用我的插件以自定义语言生成代码?我试图编写一个shell脚本来做到这一点:

#!/bin/bash
java -cp ./codegen.jar CodeGeneratorMain "$@"
Run Code Online (Sandbox Code Playgroud)

我尝试这样调用协议:protoc --plugin=protoc-gen-code --code_out=./build hello.proto但是,当我运行该协议时,出现以下错误:

线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:CodeGeneratorMain.main(CodeGeneratorMain.java:12)处为0 --code_out:progen-gen-code:插件失败,状态码为1。

好像它根本没有在stdin上传递CodeGeneratorRequest。我将如何验证?我做错了什么吗?

java protocol-buffers protoc

5
推荐指数
1
解决办法
1347
查看次数

为什么我的Protobuf消息(在Python中)忽略零值?

我一直致力于为项目实施IPC的protobufs.由于某种原因,未设置/序列化设置为0的值.对于上下文,.proto文件包含以下消息:

syntax = "proto3";

enum SetGet {
    SET = 0;
    GET = 1;
}

message State {
    SetGet setget = 1;
    double x = 2;
    double y = 3;
    double depth = 4;
    double yaw = 5;
    double pitch = 6;
    double roll = 7; 
}
Run Code Online (Sandbox Code Playgroud)

我使用protoc将文件编译为Python _pb2文件,然后尝试运行以下测试脚本:

import filename_pb2 as pb

state = pb.State()
state.x = 0
state.y = 0
state.depth = 0
state.yaw = 0
state.pitch = 0
state.roll = 0
state.setget = pb.SET

print("State: {}".format(state))

state2 = …
Run Code Online (Sandbox Code Playgroud)

python protocol-buffers protoc

5
推荐指数
3
解决办法
1824
查看次数

在运行时动态解析.proto文本文件以生成描述符

我目前正在处理Google Protocol Buffers并需要生成动态消息.我已经定义了如下所示的.proto文件.

message TSInbound
{
  string id = 1;
  map<string,string> state = 2;
  map<string,string> reading =3;
}
Run Code Online (Sandbox Code Playgroud)

AFAIK,我可以使用文件描述符集来创建动态消息.但是,这将涉及使用编译器生成desc文件.我想生成描述符而不编译.proto文件.有没有办法使用自定义.proto文件动态创建消息而不使用protoc?

java protocol-buffers protoc proto3

4
推荐指数
1
解决办法
980
查看次数

来自训练元图的权重和偏差

我已成功导出重新训练的InceptionV3 NN作为TensorFlow元图.我已经成功地将这个protobuf读回到python中,但我正在努力寻找一种方法来导出每个图层的权重和偏差值,我假设它存储在元图形protobuf中,用于重新创建TensorFlow外部的nn.

我的工作流程是这样的:

Retrain final layer for new categories
Export meta graph tf.train.export_meta_graph(filename='model.meta')
Build python pb2.py using Protoc and meta_graph.proto
Load Protobuf:

import meta_graph_pb2
saved = meta_graph_pb2.CollectionDef()
with open('model.meta', 'rb') as f:
  saved.ParseFromString(f.read())
Run Code Online (Sandbox Code Playgroud)

从这里我可以查看图表的大多数方面,如节点名称等,但我认为我的经验不足,难以找到访问每个相关层的权重和偏差值的正确方法.

python protocol-buffers protoc tensorflow

4
推荐指数
1
解决办法
1715
查看次数

TensorFlow - 对象检测模块,尝试使用protoc时出现错误

有问题protoc,该行在Windows中不起作用.

我明白了errors:

用这条线

protoc --proto_path=./object_detection/protos --python_out=c:\testmomo ./object_detection/protos/anchor_generator.proto
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

object_detection/protos/grid_anchor_generator.proto: File not found.
object_detection/protos/ssd_anchor_generator.proto: File not found.
anchor_generator.proto: Import "object_detection/protos/grid_anchor_generator.proto" was not found or had errors.
anchor_generator.proto: Import "object_detection/protos/ssd_anchor_generator.proto" was not found or had errors.
anchor_generator.proto:12:5: "GridAnchorGenerator" is not defined.
anchor_generator.proto:13:5: "SsdAnchorGenerator" is not defined.
Run Code Online (Sandbox Code Playgroud)

问题是什么??

python object-detection deep-learning protoc tensorflow

4
推荐指数
3
解决办法
2110
查看次数

如何将我自己的代码添加到 JAVA 从 proto 文件生成的类中?

我正在使用 protobuf,并从以下 proto 文件生成 JAVA 类。

syntax = "proto3";
enum Greeting {
    NONE = 0;
    MR = 1;
    MRS = 2;
    MISS = 3;
}

message Hello {
    Greeting greeting = 1;
    string name = 2;
}

message Bye {
    string name = 1;
}

option java_multiple_files = true;
Run Code Online (Sandbox Code Playgroud)

现在我需要向生成的文件添加一些代码,我发现可以使用自定义插件(https://developers.google.com/protocol-buffers/docs/reference/java- generated#plugins)。我正在尝试用 Java 生成该插件,类似这样。

public class Test {
   PluginProtos.CodeGeneratorResponse.getDefaultInstance();
   /* Code to get generated files from java_out and use the insertion points */
   codeGeneratorResponse.writeTo(System.out);
}
Run Code Online (Sandbox Code Playgroud)

然后我跑

protoc --java_out=./classes --plugin=protoc-gen-demo=my-plugin --demo_out=. …
Run Code Online (Sandbox Code Playgroud)

protocol-buffers protoc protobuf-java

4
推荐指数
1
解决办法
3917
查看次数

Protoc不创建服务

我只是想使用协议缓冲区为 golang 生成代码。但无法使用 protoc 命令生成服务。

syntax = "proto3";
package greet;
option go_package="./greet/greetpb";
service GreetService{}
Run Code Online (Sandbox Code Playgroud)

上面是一个虚拟的原始文件,我正在尝试将其转换为 golang。但无法生成正确的文件,因为在我的系统中它无法将service GreetService{} 线路识别为服务。

我在Windows系统上使用以下版本的protoc:

PS D:\Study\grpc\go-grpc-course> protoc --version
libprotoc 3.17.3
Run Code Online (Sandbox Code Playgroud)

使用以下命令生成代码:

协议 .\greet\greetpb\greet.proto --go_out=.

下面是上面命令生成的go代码:

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
//  protoc-gen-go v1.26.0
//  protoc        v3.17.3
// source: greet/greetpb/greet.proto

package greetpb

import (
    protoreflect "google.golang.org/protobuf/reflect/protoreflect"
    protoimpl "google.golang.org/protobuf/runtime/protoimpl"
    reflect "reflect"
)

const (
    // Verify that this generated code is sufficiently up-to-date.
    _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
    // Verify that …
Run Code Online (Sandbox Code Playgroud)

go protocol-buffers proto protoc

4
推荐指数
1
解决办法
1411
查看次数

尝试编译协议文件时出错:文件未找到或有错误

我正在尝试使用以下命令编译 protoc 文件:

protoc/bin/protoc models/research/object_detection/protos/*.proto --python_out=.
Run Code Online (Sandbox Code Playgroud)

但我在 cmd 上得到这个输出

object_detection/protos/flexible_grid_anchor_generator.proto: File not found.
object_detection/protos/grid_anchor_generator.proto: File not found.
object_detection/protos/multiscale_anchor_generator.proto: File not found.
object_detection/protos/ssd_anchor_generator.proto: File not found.
models/research/object_detection/protos/anchor_generator.proto:5:1: Import "object_detection/protos/flexible_grid_anchor_generator.proto" was not found or had errors.
models/research/object_detection/protos/anchor_generator.proto:6:1: Import "object_detection/protos/grid_anchor_generator.proto" was not found or had errors.
models/research/object_detection/protos/anchor_generator.proto:7:1: Import "object_detection/protos/multiscale_anchor_generator.proto" was not found or had errors.
models/research/object_detection/protos/anchor_generator.proto:8:1: Import "object_detection/protos/ssd_anchor_generator.proto" was not found or had errors.
models/research/object_detection/protos/anchor_generator.proto:14:5: "GridAnchorGenerator" is not defined.
models/research/object_detection/protos/anchor_generator.proto:15:5: "SsdAnchorGenerator" is not defined.
models/research/object_detection/protos/anchor_generator.proto:16:5: "MultiscaleAnchorGenerator" is not defined.
models/research/object_detection/protos/anchor_generator.proto:17:5: "FlexibleGridAnchorGenerator" is not …
Run Code Online (Sandbox Code Playgroud)

python object-detection protoc tensorflow

4
推荐指数
1
解决办法
2384
查看次数