如何在VPS服务器上实现OpenCV imshow()窗口可视化?
解决方案
方法1:将检测后的视频保存为文件,在VSCode中预览
这是和你双击播放原视频最接近的方式——直接把YOLO检测后的帧写入新视频文件,之后在VSCode里打开该文件即可查看结果。
修改代码如下:
import cv2 from ultralytics import YOLO model = YOLO('yolov5nu.pt') cap = cv2.VideoCapture('Bowling1.mp4') # 获取原视频的宽、高、帧率参数 frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) fps = int(cap.get(cv2.CAP_PROP_FPS)) # 创建视频写入对象,指定输出格式和路径 fourcc = cv2.VideoWriter_fourcc(*'mp4v') out = cv2.VideoWriter('Bowling1_detected.mp4', fourcc, fps, (frame_width, frame_height)) while cap.isOpened(): success, frame = cap.read() if success: results = model(frame) annotated_frame = results[0].plot() # 将带检测框的帧写入输出视频 out.write(annotated_frame) else: break # 释放资源 cap.release() out.release() cv2.destroyAllWindows()
运行完成后,在VSCode文件浏览器中找到生成的Bowling1_detected.mp4,双击即可像原视频一样播放查看检测结果。
方法2:通过VSCode的X11转发实时显示检测窗口
如果想实时查看检测画面,无需保存文件,可以配置VSCode的X11转发,让远程VPS的cv2窗口显示在本地电脑上:
步骤1:本地安装X11服务器
- Windows:安装VcXsrv或Xming
- macOS:安装XQuartz
- Linux:系统自带X11,无需额外安装
步骤2:配置VSCode远程SSH连接
在本地~/.ssh/config文件中添加以下配置:
Host your_vps_hostname HostName your_vps_ip User your_username ForwardX11 yes ForwardX11Trusted yes
步骤3:在VPS中设置环境变量
连接VPS后,在终端执行:
export DISPLAY=:0
也可以将该命令加入~/.bashrc或~/.zshrc,实现每次登录自动生效。
步骤4:重新运行原代码
此时cv2.imshow的窗口会直接显示在本地电脑上,实现实时可视化。
关于NNPACK警告的说明
Could not initialize NNPACK! Reason: Unsupported hardware仅为警告,不会影响代码运行——这是因为VPS的CPU不支持NNPACK加速,YOLO会自动切换到其他推理后端,无需额外处理。
内容的提问来源于stack exchange,提问作者ailauli69
相关产品推荐
相关产品推荐

