protoc object_detection/protos/*.proto: 没有这样的文件或目录

Posted

技术标签:

【中文标题】protoc object_detection/protos/*.proto: 没有这样的文件或目录【英文标题】:protoc object_detection/protos/*.proto: No such file or directory 【发布时间】:2018-03-11 11:51:19 【问题描述】:

我正在关注here 的示例。 但是每当我输入命令“C:/Program Files/protoc/bin/protoc”object_detection/protos/.proto --python_out=。 我收到一条错误消息,提示 object_detection/protos/.proto: No such file or directory。 我无法创建名为 *.proto 的目录。所以我错过了一些关于如何做到这一点的基本信息。因为我找不到其他人抱怨这个问题,所以它一定很简单。 我使用的是 Windows 操作系统。

【问题讨论】:

更新:所以 *.proto 正在寻找任何带有 proto 扩展名的文件。但是那个文件夹里没有。教程说要转到主模型文件夹,但原型位于 research/object_detection/protos 文件夹中。所以我将输入更改为该文件夹,但现在我收到一条错误消息,提示没有输出指令。我已经给命令行一个完整的路径,但没有奏效。我不确定它想要什么。 【参考方案1】:

为 Windows 解决,在“research”中并在路径中有“protoc”,那么这将起作用:

for /f %i in ('dir /b object_detection\protos\*.proto') do protoc object_detection\protos\%i --python_out=.

祝你好运!

【讨论】:

这也适用于 >= 3.5 的版本,并且在一行中,太棒了!【参考方案2】:

确保将目录更改为“models\research\”,并尝试使用 protoc 版本 3.4.0 执行教程中的步骤,就像教程一样。我只使用 3.4.0 为我工作。

我的 cmd 行有效:

C:\Users\...\protoc-3.4.0-win32\bin\protoc object_detection/protos/*.proto --python_out=.

【讨论】:

【参考方案3】:

我将在所有这些我能找到的问题上发布此消息,以便人们知道。无论如何,我必须在以后为自己和其他人写这些指示。

以下内容在某种程度上起作用和不起作用:

protoc object_detection/protos/*.proto --python_out=.

指定所有文件的 *.proto 不适用于编译器。如果您使用的是版本 3.5,则必须指定每个单独的文件

所以这里是它的样子:

    运行cmd

    将您的目录更改为您下载的研究文件夹(可能不同):

    cd /d C:\Users\yourusername\Desktop\TensorFlow\models-master\models-master\research
    

    获取您下载的 protroc.exe 文件的位置

    C:\Users\yourusername\Desktop\TensorFlow\protoc-3.5.1-win32\bin\protoc 
    

    转到 protos 文件夹,这样您就知道需要单独执行哪些文件

    C:\Users\yourusername\Desktop\TensorFlow\models-master\models-master\research\object_detection\protos
    

    现在开始向该文件夹中的每个单独的 .proto 项发送垃圾邮件 命令:

    C:\Users\yourusername\Desktop\TensorFlow\protoc-3.5.1-win32\bin\protoc object_detection/protos/anchor_generator.proto --python_out=.
    C:\Users\yourusername\Desktop\TensorFlow\protoc-3.5.1-win32\bin\protoc object_detection/protos/argmax_matcher.proto --python_out=.
    C:\Users\yourusername\Desktop\TensorFlow\protoc-3.5.1-win32\bin\protoc object_detection/protos/bipartite_matcher.proto --python_out=.
    ....and so on until you finish all items in the protos folder
    

    或者你可以收工并获得 3.4 并运行:

    C:\Users\yourusername\Projects\TensorFlow\protoc-3.5.1-win32\bin\protoc object_detection/protos/*.proto --python_out=.
    

如果我能澄清更多,请告诉我。我尽量说得很清楚,让像我这样的白痴都能理解。

【讨论】:

我已经 cd 进入 /models/research/ 然后我运行“C:/Program Files/protoc/bin/protoc.exe”object_detection/protos/*.proto --python_out=。转到以下错误文件名、目录名或卷标语法不正确。 单行命令不起作用。但是,我们可以按照 5 中所述单独进行。【参考方案4】:

将目录更改为tensorflow的models或model master 然后你必须使用以下命令逐个运行来编译 protobuff 的 .proto 文件

protoc --python_out=. .\object_detection\protos\anchor_generator.proto 
protoc --python_out=. .\object_detection\protos\argmax_matcher.proto  
protoc --python_out=. .\object_detection\protos\bipartite_matcher.proto 
protoc --python_out=. .\object_detection\protos\box_coder.proto 
protoc --python_out=. .\object_detection\protos\box_predictor.proto 
protoc --python_out=. .\object_detection\protos\eval.proto 
protoc --python_out=. .\object_detection\protos\faster_rcnn.proto 
protoc --python_out=. .\object_detection\protos\faster_rcnn_box_coder.proto 
protoc --python_out=. .\object_detection\protos\grid_anchor_generator.proto 
protoc --python_out=. .\object_detection\protos\hyperparams.proto 
protoc --python_out=. .\object_detection\protos\image_resizer.proto 
protoc --python_out=. .\object_detection\protos\input_reader.proto 
protoc --python_out=. .\object_detection\protos\losses.proto 
protoc --python_out=. .\object_detection\protos\matcher.proto 
protoc --python_out=. .\object_detection\protos\mean_stddev_box_coder.proto 
protoc --python_out=. .\object_detection\protos\model.proto 
protoc --python_out=. .\object_detection\protos\optimizer.proto 
protoc --python_out=. .\object_detection\protos\pipeline.proto 
protoc --python_out=. .\object_detection\protos\post_processing.proto 
protoc --python_out=. .\object_detection\protos\preprocessor.proto 
protoc --python_out=. .\object_detection\protos\region_similarity_calculator.proto 
protoc --python_out=. .\object_detection\protos\square_box_coder.proto 
protoc --python_out=. .\object_detection\protos\ssd.proto 
protoc --python_out=. .\object_detection\protos\ssd_anchor_generator.proto 
protoc --python_out=. .\object_detection\protos\string_int_label_map.proto 
protoc --python_out=. .\object_detection\protos\train.proto 
protoc --python_out=. .\object_detection\protos\keypoint_box_coder.proto 
protoc --python_out=. .\object_detection\protos\multiscale_anchor_generator.proto
protoc --python_out=. .\object_detection\protos\graph_rewriter.proto

【讨论】:

protoc --python_out=. .\object_detection\protos\graph_rewriter.proto is missing【参考方案5】:

我有同样的错误Object_detection/protos/.proto: No such file or directory.

当我使用Protocol Buffers v3.4.0时解决了这个问题。

确保您在 models-master\research 内部,然后使用以下命令:

FullPathToProtoc/protoc-3.4.0-win32/bin/protoc object_detection/protos/*.proto --python_out=.

【讨论】:

【参考方案6】:

好吧,在我的情况下,头很长很长时间...... 问题出在 protoc 3.5 版中...它在 WINDOWS 上不接受此参数... 如果您下载可以与您的确切参数一起使用的 3.4.0 版本,它将完全正常工作:! protoc object_detection/protos/*.proto --python_out=.

【讨论】:

【参考方案7】:

如果你发现你像我一样错过了整个models/research/object_detection/protos 子树,你可以从https://github.com/tensorflow/models 单独下载它。没有这些文件会出现同样的错误,即No such file or directory

【讨论】:

【参考方案8】:

大家好,这是我在学习使用 tensorflow 进行对象检测时解决此错误的方法:

步骤:

1- 要下载适用于 Windows 10 64 位系统的 Google Protobuf,请访问此链接。 https://github.com/protocolbuffers/protobuf/releases/tag/v3.4.0 并安装“protoc-3.4.0-win32.zip”。(建议-不要安装 protoc-3.6.0)

2- 从此链接下载模型文件。 https://github.com/tensorflow/models

3.现在你需要在研究目录的帮助下在命令提示符下执行protobuf编译:

4-首先进入研究目录: cd C:\Users\Ankit\tensorflow\models\research 然后回车//只是一个例子

5-然后在上述步骤之后立即执行此步骤:

"C:\Users\Ankit\Desktop\Tensorflow\protbuf\bin\protoc.exe" object_detection/protos/*.proto --python_out=.然后回车(对象和“符号之间有空格,这写在一行中)

6-注意:进入object_detection/protos文件夹,如果有.py文件,说明你的.proto文件编译成功

谢谢你

【讨论】:

【参考方案9】:

.proto 文件应位于tensorflow-models/research/object_detection/protos/

所以你应该先

cd C:\path\to\tensorflow-models\research 

作为per the installation instructions。以上为假想路径,使用Windows路径结构。您应该将其替换为计算机上的实际路径。当你在那个目录中时,你可以运行你的命令:

C:\Program Files\protoc-<version>\bin\protoc object_detection/protos/.proto --python_out=.

同样,以上只是一个一般示例。您必须将 &lt;version&gt; 替换为您的 protoc 版本。

复制粘贴以上内容,因为它不能直接在您的机器上运行。相反,您必须在您的计算机上找到protoc 二进制文件的路径,并将该路径用作object_detection/protos/.proto --python_out=. 之前的命令

【讨论】:

【参考方案10】:

有时 windows Cmd 不接受通配符“*”。这就是它显示错误的原因。你可以使用循环来解决这个问题。 要在 Cmd 中创建循环,请查看此链接。 https://ss64.com/nt/for.html 参考: protoc cannot find files in windows 7

【讨论】:

【参考方案11】:

我遇到了missing output directive 的问题。 为我解决的解决方案是我尝试了完整的文件名,因为 *.proto 不起作用。

【讨论】:

【参考方案12】:

我在 ubuntu 16.04 上遇到了同样的问题。将目录更改为研究,现在此文件丢失问题已解决。

【讨论】:

【参考方案13】:

到protoc releases page下载protoc-3.4.0-win32.zip,解压,在bin目录下可以找到protoc.exe。则需要在系统路径中添加路径。

将此移至模型/研究文件夹 tensorflow 模型项目

接下来就可以使用protoc命令了。

protoc object_detection/protos/*.proto --python_out=.

【讨论】:

【参考方案14】:

一个小python代码,可以帮助你更快地编译protoc

import os

#folder where protos are located
os.chdir('C:\\Users\\ ~ \\models-master\\research\\object_detection\\protos')
#list protos
fs=os.listdir()

#back to where your protoc.exe is located
os.chdir('C:\\Users\\ ~ \\models-master\\research')

for f in fs:
if f.find(".proto")>-1:
    print(f)
    s='protoc object_detection/protos/'+f+' --python_out=.'
    print(s)
    os.system(s)

【讨论】:

【参考方案15】:

这就是我所做的,我可以在 Windows 7 Professional 上使用 3.4 和 3.6 版本进行编译

C:\tensorflow1\models\research>for /F %i in 
('dir /b 
.\object_detection\protos\*
.proto') do ( c:\tensorflow1\models\research\bin/protoc 
.\object_detection\protos\%i --python_out=.)

【讨论】:

【参考方案16】:

我正在使用 protoc-3.6.1-win32.zip.. 在 windows 上

创建了一个批处理文件,它将编译所有 .proto 文件。

对于 object_detection\protos*.proto 中的 %%v 执行 (D:\bin\protoc %%v --python_out=.)

从 models\research 文件夹运行这个批处理文件。请更改协议路径。 希望这对其他人有帮助,我们不需要安装旧版本的 protoc。 谢谢

【讨论】:

以上是关于protoc object_detection/protos/*.proto: 没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

Google 协议缓冲区 - protoc-c 和 protoc 之间的二进制兼容性

protoc编译器使用 grpc 插件编译 .proto 文件

grpc,protoc, protoc-gen-go,rust

Mac上使用protoc编译报错

将 'library' 指令添加到使用 protoc 生成的 dart 代码中

通用protoc Makefile