我有一个Python人脸识别脚本,它使用opencv和face_recognition模块来检测和匹配人脸。 我想通过 php 文件来实现它。这样,每当打开 php 文件时,人脸识别脚本就会启动并打开 open-cv 窗口。然而我得到的只是一张空白页。如果脚本中仅写入 print("hello world"),则该脚本将运行。但真正的脚本不会使用相同的方法开始。 我的 php 和 python 文件都在同一目录中。
我尝试过的 php 代码是:
<?php
$command_exec = escapeshellcmd('python test.py');
$str_output = shell_exec($command_exec);
echo $str_output;
?>
这个只打印程序的第一行,上面写着“现在打开人脸识别窗口”
<?php
$command_exec = escapeshellcmd('python test.py');
shell_exec($command_exec);
?>
这个只给出一张空白页
我期望人脸识别窗口能够打开,就像我直接运行 python 脚本一样
现在的问题是我不应该使用 opencv-php。我也无法直接在网页上实现人脸识别。出于我的目的,我需要从 php 文件运行 python 脚本,然后运行人脸识别。
修改您的 PHP 代码:
<?php
exec("python3 /path/to/test.py > /dev/null 2>&1 &");
echo "Python script started!";
?>
此命令在后台运行脚本。但是,如果 Web 服务器用户缺乏 GUI 访问权限,OpenCV 窗口可能仍然无法打开。
第1步:创建一个Python服务器(例如Flask),在触发时运行人脸识别脚本:
Python:
from flask import Flask
import subprocess
app = Flask(__name__)
@app.route('/run-face-recognition', methods=['GET'])
def run_face_recognition():
subprocess.Popen(["python3", "test.py"])
return "Face recognition script started!"
if __name__ == "__main__":
app.run(port=5000)
第2步:启动Flask服务器:
猛击
python3 flask_server.py
Step 3: Trigger the script from PHP:
PHP
<?php
$url = 'http://localhost:5000/run-face-recognition';
file_get_contents($url);
echo "Face recognition script triggered!";
?>
这种方法将 Web 服务器 (PHP) 与 GUI 约束解耦,并确保更顺畅的执行。
3.使用桌面环境 确保 Python 脚本在具有 GUI 访问权限的用户下运行。修改 PHP 脚本以将用户切换到登录桌面会话的用户。
修改test.py:
**Python**
import os
import cv2
os.environ["DISPLAY"] = ":0" # Set the display variable for GUI access
# Your OpenCV code here
Ensure the web server has permissions to access the GUI session:
猛击
sudo xhost +SI:localuser:www-data
Modify PHP to execute the script:
PHP
<?php
exec("python3 /path/to/test.py");
echo "Face recognition started!";
?>
4。调试技巧 测试 Python 脚本在 PHP 上下文之外是否正确运行:
猛击
python3 /path/to/test.py
Log errors to understand what’s failing:
PHP
<?php
$output = shell_exec('python3 /path/to/test.py 2>&1');
echo "<pre>$output</pre>";
?>