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

运行人脸追踪代码时Raspberry Pi 4B SSH连接频繁断开求助

问题描述
  • 树莓派4B运行人脸居中伺服控制程序时,10-20秒后SSH连接断开,终端报错client_loop: send disconnect: Connection reset
  • 设备未崩溃或短路,SSH空闲状态下可长时间保持连接
  • 代码昨日运行正常,未对树莓派做任何修改

运行环境

  • 树莓派4B,32位Raspbian OS Lite,32GB SD卡
  • 客户端为Windows 10系统

相关代码

import os
from math import floor
from gpiozero import AngularServo

SERVO_X = AngularServo(18, min_angle=-90, max_angle=90)
SERVO_Y = AngularServo(15, min_angle=-90,max_angle=90)
VIDEOCENTREX = 640
VIDEOCENTREY = 360

VIDEO_CAPTURE = cv2.VideoCapture(0)
CASCADE_PATH = "FACE_DETECTION.xml"
FACE_CASCADE = cv2.CascadeClassifier(CASCADE_PATH)
##CENTRE THE SERVOS
SERVO_X.angle = 0
SERVO_Y.angle = 0
while True:
    # Capture frame-by-frame
    ret, frame = VIDEO_CAPTURE.read()

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    faces = FACE_CASCADE.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=5,minSize=(30, 30))
    print(len(faces))
    # Draw a rectangle around the faces
    for (x, y, w, h) in faces:
        centre_x = floor(x+(w/2))
        centre_y = floor(y+(h/2))
        print(centre_x, centre_y)
        

    if len(faces) == 1:
        if centre_x > VIDEOCENTREX:
            SERVO_X.angle += -1
            print("X - 1")
        elif centre_x < VIDEOCENTREX:
            SERVO_X.angle += 1
            print("X +1")
        if centre_y > VIDEOCENTREY:
            SERVO_Y.angle += -1
            print("y - 1")
        elif centre_y < VIDEOCENTREY:
            SERVO_Y.angle += 1
            print("Y + 1")
        
        


    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything is done, release the capture
VIDEO_CAPTURE.release()
cv2.destroyAllWindows()
排查与解决方法

1. 修复代码潜在错误

  • 代码遗漏import cv2语句,补上该导入;
  • 当未检测到人脸(len(faces) != 1)时,centre_x和centre_y未定义会触发NameError,导致程序崩溃,需在while循环开头初始化变量:
    # 在while True:后添加
    centre_x = VIDEOCENTREX
    centre_y = VIDEOCENTREY
    

2. 排查硬件供电问题

伺服电机运行时电流消耗大,可能导致树莓派网卡/USB供电不足:

  • 更换为5V 3A及以上的官方树莓派电源;
  • 若伺服电机直接从树莓派GPIO取电,改为外接独立电源供电,仅保留信号线连接GPIO引脚。

3. 优化SSH连接配置

修改树莓派SSH配置,避免高负载下连接超时:

  1. 编辑配置文件:sudo nano /etc/ssh/sshd_config
  2. 添加或修改以下参数:
    ClientAliveInterval 60
    ClientAliveCountMax 3
    TCPKeepAlive yes
    
  3. 重启SSH服务:sudo systemctl restart sshd

4. 监控系统资源

开额外SSH窗口运行以下命令,排查资源耗尽问题:

  • htop:实时查看CPU、内存占用情况;
  • ping <树莓派IP>:观察程序运行时是否出现网络丢包。

5. 排查硬件资源冲突

部分摄像头模块与GPIO引脚存在资源竞争,尝试:

  • 更换摄像头的视频输入端口(若支持);
  • 更换伺服电机连接的GPIO引脚,避开摄像头占用的资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:34:55