You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP文件运行Python人脸识别脚本并弹出OpenCV窗口?

问题分析

核心问题有两点:

  • Web服务器(如Apache/Nginx)运行PHP的进程默认无桌面环境访问权限,无法弹出OpenCV的GUI窗口
  • shell_exec会等待Python脚本执行完成才返回结果,但OpenCV窗口需要用户交互(如按键关闭),导致脚本卡在窗口显示阶段,仅能输出卡住前的内容
解决方案

1. 赋予Web进程桌面访问权限

Windows环境(以XAMPP为例)

  • 打开「服务」找到Apache服务,右键选择「属性」
  • 切换到「登录」选项卡,勾选「允许服务与桌面交互」,重启Apache生效

Linux/macOS环境

  • 终端执行命令,允许Web用户(通常为www-data)访问X桌面:
    xhost +local:www-data
    
  • 在Python脚本开头添加环境变量,指定显示设备:
    import os
    os.environ['DISPLAY'] = ':0'
    

2. 让PHP后台启动Python脚本,避免阻塞

shell_exec会等待脚本执行完成,改用exec配合后台运行命令,让Python脚本脱离PHP进程独立运行:

<?php
// Linux/macOS 后台启动写法
$command = escapeshellcmd('python test.py > /dev/null 2>&1 &');
exec($command);
echo "人脸识别脚本已启动,请查看弹出的窗口";
?>

Windows环境需替换命令为:

<?php
$command = escapeshellcmd('start /B python test.py');
exec($command);
echo "人脸识别脚本已启动,请查看弹出的窗口";
?>
### 3. 排查Python模块权限问题
确保Web用户能访问`opencv-python`和`face_recognition`模块,终端执行以下命令验证:
```bash
sudo -u www-data python -c "import cv2; import face_recognition; print('模块加载成功')"

若报错,给Web用户重新安装模块:

sudo -u www-data pip install opencv-python face_recognition
验证步骤
  1. 直接运行Python脚本,确认窗口可正常弹出并工作
  2. 按上述步骤修改PHP代码与权限设置
  3. 访问PHP页面,此时应弹出OpenCV人脸识别窗口,且PHP页面不会卡住

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:52:22