python - 通过 .exe 启动时,Python OpenCV 不读取视频输入
问题描述
我目前正在努力完成我学校的最后一份工作。它包括一个我在 Tkinter 中制作的简单 GUI,用于简化文件添加和保存,以及一个使用 OpenCV python 库实现的对象检测器 YOLOv3。我正在尝试使用 Auto-Py-2-Exe 将其放入 .exe 文件中,Auto-Py-2-Exe 是带有 GUI 的 PyInstaller。
当代码通过基本的 Python IDE 运行时,它运行良好。当它在 exe 中时会出现问题:OpenCV 似乎无法识别和读取 Tkinter 提供的文件路径。我尝试更改视频文件(.mkv、.mp4)的编解码器但没有成功。我尝试过不同版本的 OpenCV(4.2 和 3.8)。我让它打印消息,但它不是
程序在打印 frame.shape 处崩溃:
错误:
AttributeError: 'NoneType' object has no attribute 'shape'
带来错误的代码:
def start(filepath):
print(f"filepath: {filepath}")
W = None
H = None
print("### Loading yolo... ###")
net = cv.dnn.readNetFromDarknet(configPath,weightsPath)
#net.setPreferableBackend(cv.dnn.DNN_BACKEND_CUDA)
#net.setPreferableTarget(cv.dnn.DNN_TARGET_OPENCL)
ln = net.getLayerNames()
ln = [ln[i[0] - 1] for i in net.getUnconnectedOutLayers()]
print("### Done loading... ###")
print ("Begining to Analayze")
cap = cv.VideoCapture(filepath)
#cap = cv.VideoCapture(0)
while True:
start_time = time.time()
status,frame = cap.read()
print(f"frame shape: {frame.shape}")
frame = cv.resize(frame, (640,480))
提前致谢!
解决方案
如果有人想知道...问题是由不包括 ffmpeg348_64.dll 的 PyInstaller 引起的。将此库添加到 .exe 位置后,脚本就可以工作了。
推荐阅读
- php - 简单的日期访客计数器计数文本行
- javascript - 在 reactJS 中显示后端数据
- c# - 如何实现从数据库(按需)加载配置值的 IConfigurationProvider?
- javascript - Google Directions API - 前往更广阔区域的路线
- jasmine - 量角器跨度重复循环
- linux - 未能创建地图:22 无效参数
- c# - 在 C# 中运行 PowerShell cmdlet
- android - 共享元素转换仅适用于 2/3 案例
- javascript - 如何将引导导航栏徽标的顺序从左到中更改
- c# - ASP.NET.MVC 5 如何显示有关谁创建了元素的信息?