我正在按照此处找到的示例进行操作。但是每当我输入命令“C:/Program Files/protoc/bin/protoc”object_detection/protos/ .proto --python_out=。我收到一条错误消息,提示 object_detection/protos/ .proto: No such file or directory。我无法创建名为 *.proto 的目录。所以我错过了一些关于如何做到这一点的基本信息。因为我找不到其他人抱怨这个问题,所以它一定很简单。我正在使用 Windows 操作系统。
16 回答
解决了 Windows,在“研究”中并在路径中有“协议”,那么这将起作用:
for /f %i in ('dir /b object_detection\protos\*.proto') do protoc object_detection\protos\%i --python_out=.
祝你好运 !
请务必将目录更改为“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=.
我将在所有这些我能找到的问题上发布这个,以便人们知道。无论如何,我必须在以后为自己和其他人写这些指示。
以下内容在某种程度上有效且无效:
protoc object_detection/protos/*.proto --python_out=.
指定所有文件的 *.proto 不适用于编译器。如果您使用的是3.5 版,则必须指定每个单独的文件。
所以这里是它的样子:
- 运行命令
将您的目录更改为您下载的研究文件夹(可能不同):
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
现在开始在 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
或者您可以收工并获得 3.4 并运行:
C:\Users\yourusername\Projects\TensorFlow\protoc-3.5.1-win32\bin\protoc object_detection/protos/*.proto --python_out=.
让我知道我是否可以澄清更多。我尽量说得很清楚,以便像我这样的白痴能够理解。
将目录更改为 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
我有同样的错误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=.
好吧,在我的情况下,很长时间打破了头...问题出在 protoc 3.5 版中...它在 WINDOWS 上不接受此参数...如果您下载可以使用的 3.4.0 版本,它将完全正常工作与您的确切论点:!protoc object_detection/protos/*.proto --python_out=。
大家好,这就是我在学习使用 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文件的编译
谢谢你
如果你发现你像我一样错过了整个models/research/object_detection/protos
子树,你可以从https://github.com/tensorflow/models单独下载。没有这些文件将给出相同的错误,即No such file or directory
.
有时 Windows Cmd 不接受通配符 '*'。这就是它显示错误的原因。你可以使用循环来解决这个问题。要在 Cmd 中创建循环,请查看此链接。https://ss64.com/nt/for.html 参考: protoc 在 Windows 7 中找不到文件
进入protoc发布页面,下载protoc-3.4.0-win32.zip,解压,在 bin 目录下会找到 protoc.exe。然后需要将路径添加到系统路径。
将此移动到模型/研究文件夹 tensorflow 模型项目
接下来,您可以使用 protoc 命令。
protoc object_detection/protos/*.proto --python_out=。
这就是我所做的,我可以在 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=.)
我面临的问题missing output directive
。为我解决的解决方案是我尝试了完整的文件名,因为*.proto
它不起作用。
一个小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)
我正在使用 protoc-3.6.1-win32.zip .. 在 Windows 上
创建了一个批处理文件,它将编译所有 .proto 文件。
对于 object_detection\protos*.proto 中的 %%v 执行 (D:\bin\protoc %%v --python_out=.)
从 models\research 文件夹运行这个批处理文件。请更改协议路径。希望这对其他人有帮助,我们不需要安装旧版本的 protoc。谢谢
我在 ubuntu 16.04 上遇到了同样的问题。将目录更改为研究,现在此文件丢失问题已解决。
.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=.