尝试编译protoc文件时出现错误:未找到文件或存在错误。

4

我试图使用以下命令编译protoc文件:

protoc/bin/protoc models/research/object_detection/protos/*.proto --python_out=.

但是我在命令提示符上得到了这个输出

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 defined.

那么问题可能是什么呢?谢谢。

3个回答

8
你需要在正确的目录中运行protobuf编译器。在这种情况下,它应该是models / research
$ cd models/research
$ ../../protoc/bin/protoc object_detection/protos/*.proto --python_out=.

protobuf文件将被编译成Python代码。在目录object_detection/protos/中,应该有以protobuf文件命名的Python文件(即<name_protobuf>_pb2.py)。

这些protobuf文件中有相对导入,因此非常重要的一点是确保protobuf编译器在正确的目录中运行。如果出现文件未找到(File not Found)错误且错误信息中列出的路径与当前目录不同,那么这可能是一个提示。


谢谢您的帮助,我尝试了这个方法,没有出现任何错误,实际上也没有显示任何内容,这正常吗?我可以认为文件已经编译好了吗?@lescurel - Jenny
这个答案帮了我,之后没有出现任何问题。@Jenny - Mike Dubs

0
在我的情况下,我按照Harish的建议删除了文件路径。然后逐个编译proto文件,并为每个文件添加了--proto_path=path/to/imports标志。
在这里找到https://dev59.com/qGEi5IYBdhLWcg3wltIl#21152266,当你编译一个包含导入的.proto文件时,你必须提供导入文件的路径,以便编译器能够找到它们。例如,你可以使用以下命令来编译导入其他文件的.proto文件:
已经成功运行的示例命令如下: $protoc/bin/protoc --proto_path=models/research/object_detection/protos models/research/object_detection/protos/box_predictor.proto --python_out=.

0

我最近遇到了这个问题。通过更改proto文件中的文件路径,我解决了它。

例如,一个proto文件有以下导入。

import "object_detection/protos/flexible_grid_anchor_generator.proto";
import "object_detection/protos/grid_anchor_generator.proto";
import "object_detection/protos/multiscale_anchor_generator.proto";
import "object_detection/protos/ssd_anchor_generator.proto";

我将其更改为以下内容。
import "flexible_grid_anchor_generator.proto";
import "grid_anchor_generator.proto";
import "multiscale_anchor_generator.proto";
import "ssd_anchor_generator.proto";

原因是所有的proto文件都在同一个object_detection/protos文件夹中,所以不需要路径。

我更改了所有proto文件中的引用,然后它就可以工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接