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

时间:2017-09-29 14:33:58

标签: python tensorflow object-detection protoc

我正在关注找到here的示例。 但每当我输入命令“C:/ Program Files / protoc / bin / protoc”object_detection / protos / .proto --python_out =。 我收到一个错误,上面写着object_detection / protos / .proto:没有这样的文件或目录。 我无法创建名为* .proto的目录。所以我遗漏了一些关于如何做到这一点的基本信息。由于我找不到任何人抱怨这个问题,它必须非常简单。 我正在使用Windows操作系统。

15 个答案:

答案 0 :(得分:8)

适用于Windows,位于“ 研究”中,并在路径中包含“ 协议”,那么它将起作用:

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

祝你好运!

答案 1 :(得分:4)

我要发布这些我能找到的所有问题,以便人们知道。不管怎样,我必须为自己和其他人写下这些指示。

以下是有效的,但不起作用:

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

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

所以这就是它的样子:

  1. 运行cmd
  2. 将您的目录更改为您下载的研究文件夹(可能会有所不同):

    cd /d C:\Users\yourusername\Desktop\TensorFlow\models-master\models-master\research
    
  3. 获取您下载的protroc.exe文件的位置

    C:\Users\yourusername\Desktop\TensorFlow\protoc-3.5.1-win32\bin\protoc 
    
  4. 转到protos文件夹,以便您知道需要单独执行的文件

    C:\Users\yourusername\Desktop\TensorFlow\models-master\models-master\research\object_detection\protos
    
  5. 现在开始向该文件夹中的每个.proto项目发送垃圾邮件 CMD:

    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
    
  6. 或者你可以称它为一天,然后运行3.4并运行:

    C:\Users\yourusername\Projects\TensorFlow\protoc-3.5.1-win32\bin\protoc object_detection/protos/*.proto --python_out=.
    
  7. 如果我能澄清一些,请告诉我。我试着非常清楚,所以像我这样的白痴能理解。

答案 2 :(得分:3)

将目录更改为tensorflow的模型或模型主文件 然后你必须使用以下逐个运行的命令编译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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

STEPS:

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,然后按Enter //只是一个例子

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

“ C:\ Users \ Ankit \ Desktop \ Tensorflow \ protbuf \ bin \ protoc.exe” object_detection / protos / *。proto --python_out =。然后按Enter(对象和“符号之间有空格,并且将其写成一行)

6-注意:转到object_detection / protos文件夹,如果有.py文件,则说明您已成功完成.proto文件的编译

谢谢

答案 6 :(得分:0)

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

同样,上面只是一个一般的例子。您必须使用<version>版本替换protoc

复制粘贴以上内容,因为它无法直接在您的计算机上运行。相反,您必须在计算机上找到protoc二进制文件的路径并在object_detection/protos/.proto --python_out=.

之前使用该路径作为命令

答案 7 :(得分:0)

有时候Windows Cmd不接受通配符&#39; *&#39;。这就是它显示错误的原因。你可以用循环来解决这个问题。 在Cmd中创建循环结帐此链接。 https://ss64.com/nt/for.html 参考: protoc cannot find files in windows 7

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

转到protoc releases page并下载 protoc-3.4.0-win32.zip ,解压缩后,您会在bin目录中找到protoc.exe。那么需要将其添加到系统路径。

将其移至models / research文件夹tensorflow模型项目

接下来,您可以使用protoc命令。

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

答案 11 :(得分:0)

一些python代码可以帮助您更快地编译协议

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)

答案 12 :(得分:0)

这就是我所做的,我可以在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=.)

答案 13 :(得分:0)

我有相同的错误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=.

答案 14 :(得分:0)

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

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

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

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