编写摄像头实时显示代码
sudo vim camera_display.py
弹框显示
import cv2
def show_camera():
# 打开 USB 摄像头(根据需要更改索引)
cap = cv2.VideoCapture(0)
# 设置分辨率
width = 320
height = 240
cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
while True:
# 从摄像头读取一帧
ret, frame = cap.read()
# 显示帧
cv2.imshow('USB Camera', frame)
# 如果按下 'q' 键,则退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头并关闭 OpenCV 窗口
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
show_camera()
全屏显示
需要先安装pyautogui
pip3 install pyautogui
import cv2
import pyautogui
def show_camera():
# Open the USB camera (change 0 to the appropriate camera index if needed)
cap = cv2.VideoCapture(0)
# 设置分辨率
width = 640
height = 480
cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
cv2.namedWindow('USB Camera', cv2.WND_PROP_FULLSCREEN)
cv2.setWindowProperty('USB Camera', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
while True:
# Read a frame from the camera
ret, frame = cap.read()
screen_width, screen_height = pyautogui.size()
frame = cv2.resize(frame, (screen_width, screen_height))
# Display the frame in a window
cv2.imshow('USB Camera', frame)
cv2.setMouseCallback('USB Camera', lambda *args: None)
# Break the loop if 'q' key is pressed
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Release the camera
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
show_camera()
测试代码
python3 camera_display.py
弹框方式的代码在本地或SSH远程连中都可以运行,全屏方式的代码要在本地运行
编写一个开机自启动服务
在/etc/systemd/system/创建一个服务脚本
cd /etc/systemd/system/
sudo vim camera_display.service
脚本内容:
[Unit]
Description=USB Camera Display Service
After=network.target
[Service]
ExecStartPre=/bin/sleep 1
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/jetson/.Xauthority"
ExecStart=/usr/bin/python3 /home/jetson/camera_display.py
WorkingDirectory=/home/jetson
Restart=always
User=jetson
[Install]
WantedBy=default.target
测试一下服务脚本,看看能不能运行,效果有没有达到预期
sudo systemctl restart camera_display.service
如果没有显示,可以查看一下服务的状态,看看在哪个点出错
sudo systemctl status camera_display.service
使能并重载服务
前面步骤都没有问题后,全能服务,重载所有服务,搞定
sudo systemctl enable camera_display.service
sudo systemctl daemon-reload
到此就大功告成了,可以重启看看成果了
sudo reboot