You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

终端运行树莓派Python人脸识别程序报错:无法读取trainer.yml文件求助

问题根源:工作目录差异导致相对路径失效

你遇到的File can't be opened for reading!错误,本质是终端运行脚本时的工作目录和Thonny里的不一样:

  • Thonny默认会把工作目录设置为你打开的脚本所在的文件夹(也就是/home/pi/Cascades2/),所以trainer/trainer.yml这个相对路径能正确指向/home/pi/Cascades2/trainer/trainer.yml
  • 但终端默认的工作目录是你的用户主目录/home/pi/,这时候脚本里的相对路径会去找/home/pi/trainer/trainer.yml,自然找不到文件。

两种解决方法

方法1:先切换到脚本目录再运行

在终端里先进入脚本所在的文件夹,再执行程序:

cd /home/pi/Cascades2
python3 03_face_recognition.py

方法2:修改代码使用绝对路径(推荐)

把代码里的相对路径改成基于脚本自身位置的绝对路径,这样不管从哪个目录运行都不会出错:
修改读取trainer.yml和分类器的部分代码:

import cv2
import numpy as np
import os
import time
import datetime
import RPi.GPIO as GPIO

# 获取当前脚本所在的绝对目录
script_dir = os.path.dirname(os.path.abspath(__file__))

relay = 23
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(relay, GPIO.OUT)
GPIO.output(relay, 0)

recognizer = cv2.face.LBPHFaceRecognizer_create()
# 拼接trainer.yml的绝对路径
trainer_path = os.path.join(script_dir, 'trainer', 'trainer.yml')
recognizer.read(trainer_path)

# 同样处理分类器文件,避免后续可能的路径问题
cascadePath = os.path.join(script_dir, "haarcascade_frontalface_default.xml")
faceCascade = cv2.CascadeClassifier(cascadePath);

这样修改后,不管你在终端哪个目录下运行python3 /home/pi/Cascades2/03_face_recognition.py,脚本都能精准找到需要的文件啦。

内容的提问来源于stack exchange,提问作者FlorianS

火山引擎 最新活动