opencv的FileStorage问题

请问如何从终端调用python的人脸识别脚本?
我可以在项目文件夹中调用,没有问题。

img

但到它的上级目录就无发调用了

img


就会报FileStorage的错误

img

我看到是这个代码的问题

img

我应该如何改这个代码

参考GPT和自己的思路:

根据您提供的信息,FileStorage错误可能是由于相对路径的问题引起的。建议使用绝对路径来访问文件,以避免路径问题。您可以使用os模块来获取当前工作目录,并使用绝对路径来加载文件。例如,您可以尝试以下代码更改:

import os
# 获取绝对路径
abs_path = os.path.abspath("./haarcascade_frontalface_alt.xml")
# 加载文件
face_cascade = cv2.CascadeClassifier(abs_path)

这样,在调用脚本时,您可以在任何位置调用脚本,并且代码始终可以找到文件。希望这可以帮助你解决问题!

参考GPT和自己的思路:

根据你提供的信息,可能是代码中的路径问题导致了FileStorage错误。你可以尝试在打开XML文件时使用相对路径而不是绝对路径。例如,如果你的XML文件在上级目录中,你可以像这样打开它:

fs = cv2.FileStorage("../filename.xml", cv2.FILE_STORAGE_READ)

如果这不起作用,你可以尝试使用绝对路径来打开文件:

import os

filename = os.path.abspath('../filename.xml')
fs = cv2.FileStorage(filename, cv2.FILE_STORAGE_READ)

这样会给你一个绝对路径,确保你能够成功地打开XML文件。我希望这能帮助你解决问题!

参考GPT和自己的思路:

根据您提供的问题,您需要进行以下更改:

  1. 首先,您需要检查您的Python模块路径是否正确,以确保您可以从上级目录中正确地调用OpenCV和其他相关模块。

  2. 其次,您需要使用绝对路径来指定您的数据和配置文件的位置,这样您的代码就可以在任何位置正确地找到这些文件。您可以使用os模块或其他文件路径处理库来生成正确的绝对路径。

  3. 最后,您需要使用正确的FileStorage路径来加载您的配置文件。按照您提供的代码,您应该使用相对路径来加载您的配置文件,但是这在上级目录中可能会出现错误。为了避免这种情况,您应该始终使用绝对路径。您可以使用cv2.FileStorage函数进行加载,并传递正确的绝对路径。

下面给出一个示例代码,您可以根据需要进行修改:

import cv2
import os

# 获取上级目录绝对路径
base_dir = os.path.dirname(os.path.abspath(__file__))
parent_dir = os.path.abspath(os.path.join(base_dir, os.pardir))

# 加载配置文件
config_file = os.path.join(parent_dir, 'data', 'config.xml')
fs = cv2.FileStorage(config_file, cv2.FILE_STORAGE_READ)

# 读取配置参数
param1 = fs.getNode('param1').real()
param2 = fs.getNode('param2').real()

# 进行人脸识别操作
# ...

希望这可以帮助您解决您的问题。