16

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

4

16 回答 16

17

解决了 Windows,在“研究”中并在路径中有“协议”,那么这将起作用:

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

祝你好运 !

于 2018-09-19T00:23:09.897 回答
11

请务必将目录更改为“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=.
于 2017-11-27T15:19:03.550 回答
6

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

以下内容在某种程度上有效且无效:

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

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

所以这里是它的样子:

  1. 运行命令
  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. 现在开始在 cmd 中向该文件夹中的每个单独的 .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
    
  6. 或者您可以收工并获得 3.4 并运行:

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

让我知道我是否可以澄清更多。我尽量说得很清楚,以便像我这样的白痴能够理解。

于 2018-05-16T15:59:23.170 回答
5

将目录更改为 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
protoc --python_out=. .\object_detection\protos\graph_rewriter.proto
于 2018-05-28T15:07:05.717 回答
4

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

于 2018-11-22T09:50:24.353 回答
2

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

于 2018-05-28T18:00:56.487 回答
1

大家好,这就是我在学习使用 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 并按 Enter //只是一个例子

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

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

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

谢谢你

于 2019-01-16T20:49:05.507 回答
1

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

于 2018-06-18T03:27:27.237 回答
0

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

于 2017-12-04T11:07:38.007 回答
0

进入protoc发布页面,下载protoc-3.4.0-win32.zip,解压,在 bin 目录下会找到 protoc.exe。然后需要将路径添加到系统路径。

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

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

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

于 2018-08-20T07:00:25.280 回答
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=.)
于 2018-11-14T19:55:01.147 回答
0

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

于 2018-05-08T18:25:42.867 回答
0

一个小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)
于 2018-09-26T15:23:52.330 回答
0

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

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

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

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

于 2019-01-11T11:20:15.537 回答
0

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

于 2018-05-16T12:48:13.837 回答
0

.proto文件应该在tensorflow-models/research/object_detection/protos/.

所以你应该首先

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

按照安装说明。以上为假想路径,使用Windows路径结构。您应该将其替换为计算机上的实际路径。当你在那个目录中时,你可以运行你的命令:

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

同样,以上只是一个一般示例。您将不得不替换<version>为您的protoc版本。

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

于 2017-11-03T09:14:03.910 回答