使用摄像头运行TensorFlow Object Detection API时出现utils模块未找到错误
ModuleNotFoundError: No module named 'utils'的问题 我来帮你搞定这个头疼的问题!你遇到的这个错误根本不是因为缺少第三方包,而是Python找不到TensorFlow Object Detection API自带的utils模块——你装的util包和API里的utils完全是两码事,重装protobuf也没切中要害。下面给你一步步的解决方案:
核心原因
TensorFlow Object Detection API的utils文件夹是API自带的(位于object_detection目录下),但Python默认不会把API的目录加入搜索路径,所以运行脚本时会找不到这个模块。
具体解决方案
1. 清理无用的第三方包
你之前装的util包完全没用,甚至可能干扰环境,先卸载它:
pip uninstall -y util
2. 编译API的protobuf文件
这是很多人会漏掉的关键步骤:在Object Detection API的research目录下,编译所有proto文件生成对应的Python模块:
# 先切换到你的research文件夹路径,比如: cd /path/to/your/tensorflow/models/research # 执行编译命令 protoc object_detection/protos/*.proto --python_out=.
如果提示protoc命令找不到,说明你没安装protobuf编译器,Linux用户可以用sudo apt install protobuf-compiler安装,Windows/Mac用户可以下载对应系统的二进制包配置到环境变量。
3. 把API目录加入Python路径
有两种方式,选一种就行:
方式一:在脚本开头添加路径配置
在你的检测脚本最顶部加入以下代码,替换成你自己的research文件夹绝对路径:
import sys import os # 替换成你本地的research文件夹路径,比如 "/home/yourname/tensorflow/models/research" RESEARCH_DIR = "/path/to/your/tensorflow/models/research" sys.path.append(RESEARCH_DIR) sys.path.append(os.path.join(RESEARCH_DIR, "slim"))
方式二:设置系统环境变量
每次运行脚本前,先在终端执行以下命令(替换成你的实际路径):
export PYTHONPATH=$PYTHONPATH:/path/to/your/tensorflow/models/research:/path/to/your/tensorflow/models/research/slim
如果想永久生效,可以把这行命令加入你的~/.bashrc(Linux)或者~/.zshrc(Mac)文件。
4. 验证路径是否生效
可以在脚本里加入一行打印,确认路径已经被正确添加:
import sys print(sys.path)
运行后检查输出里有没有包含你的research和slim目录。
为什么之前的方法没用?
pip install util:这个包是一个无关的工具库,和TensorFlow Object Detection API自带的utils没有任何关系,所以完全解决不了问题。- 重装protobuf:protobuf确实是API依赖,但问题不在版本,而是你没编译API的proto文件,光重装包没用。
内容的提问来源于stack exchange,提问作者user6727724

