畜牧养殖 AI:用摄像头数猪、测重、识别生病

畜牧养殖 AI:用摄像头数猪、测重、识别生病

大棚作物搞定了,换个赛道------养殖场。养鸡、养猪、养牛的规模养殖户,最大的痛点是「猪病了三天才发现」。摄像头 7×24 小时不间断监控,能做的事比你想象的多:计数、测重、行为分析、早期疾病预警。


畜牧 AI 的四个核心场景

场景 技术 输入 产出
猪/鸡只计数 YOLOv8 目标检测 俯拍照片 实时存栏数
体重估算 深度回归 + 双目视觉 侧拍照片 估重 ±5%
异常行为识别 姿态估计 + 时序分析 视频流 跛行/瘫倒/互咬预警
疾病早期筛查 红外热成像 + CV 热成像照片 体温异常个体定位

场景一:猪只计数------管理存栏

存栏数每天都要报,但人工一趟趟数容易漏、容易重。在猪舍入口上方装一个摄像头,猪进出时自动计数。

python 复制代码
import cv2
import torch

model = torch.hub.load('ultralytics/yolov5', 'custom', path='pig_detector.pt')

# 双向计数:用质心轨迹方向判断进出
tracker = {}   # id → [positions]
inside_count = 0
LINE_Y = 300   # 计数线(像素坐标)

cap = cv2.VideoCapture('rtsp://camera_ip/stream')
while True:
    ret, frame = cap.read()
    results = model(frame)
    
    for det in results.xyxy[0]:
        x1, y1, x2, y2, conf, cls = det
        cx, cy = (x1 + x2) / 2, (y1 + y2) / 2  # 质心
        
        # 简单追踪:最近邻匹配
        # ...
        
        # 判断方向
        if prev_cy < LINE_Y and cy >= LINE_Y:
            direction = 'in'
            inside_count += 1
        elif prev_cy > LINE_Y and cy <= LINE_Y:
            direction = 'out'
            inside_count -= 1

存栏数推送到平台,配合电子耳标做个体识别(RFID),出栏时自动生成流转记录。


场景二:视觉测重------不上秤也能估

传统给猪称重:人赶猪上地磅,猪应激、人费力。用双目摄像头拍一张侧身照片,深度学习回归体重。

原理:YOLO 检测猪只 → 裁剪出猪身区域 → CNN 特征提取 → 回归体重(kg)。

python 复制代码
@torch.no_grad()
def estimate_weight(cropped_img, depth_map):
    """输入: 猪只裁剪图 + 深度图。输出: 估计体重(kg)"""
    
    # 1. 从深度图提取体尺特征
    length_px = measure_body_length(cropped_img, depth_map)  # 体长(像素)
    width_px = measure_body_width(cropped_img, depth_map)    # 体宽(像素)
    depth_avg = depth_map[cropped_mask].mean()                # 平均深度(距离)
    
    # 2. 实际尺寸换算(知道深度就能算实际尺寸)
    focal_length = 800  # 相机标定得出的焦距
    real_length = length_px * depth_avg / focal_length  # 实际体长(cm)
    real_width = width_px * depth_avg / focal_length
    
    # 3. 特征 + CNN 回归
    features = torch.tensor([real_length, real_width, depth_avg])
    cnn_features = weight_model(cropped_img)   # ResNet-18 骨干
    combined = torch.cat([cnn_features, features])
    
    weight_kg = regressor(combined)  # 全连接回归 → kg
    return weight_kg.item()

数据:给 100 头猪同时拍照 + 上磅秤记录真实体重,当作训练集。体重范围 15-120kg,MAE 能做到 3-5kg。精度比不上地磅,但用于日常监测够用------体重一周不涨,就说明健康出问题了。


场景三:异常行为识别

猪异常的早期信号往往在行为上:走得慢了、经常躺、被别的猪咬。姿态估计算法(如 YOLOv8-Pose)提取关节关键点,再用 LSTM 分析时序异常。

python 复制代码
from ultralytics import YOLO

pose_model = YOLO('yolov8n-pose.pt')

def detect_lameness(video_clip):
    """输入 10 秒的视频片段,判断是否跛行"""
    keypoints_seq = []
    
    for frame in video_clip:
        results = pose_model(frame)
        if results[0].keypoints is not None:
            kpts = results[0].keypoints.xy[0].cpu().numpy()  # (17, 2)
            keypoints_seq.append(kpts)
    
    if len(keypoints_seq) < 20:
        return False  # 数据不够
    
    # 分析步态:左右后肢的垂直位移方差
    left_ankle_y = [k[15][1] for k in keypoints_seq]   # 左后踝关节y坐标
    right_ankle_y = [k[16][1] for k in keypoints_seq]  # 右后踝关节y坐标
    
    left_var = np.var(left_ankle_y)
    right_var = np.var(right_ankle_y)
    
    # 健康猪: 左右摆动幅度接近 (方差比 ≈ 1)
    # 跛行猪: 一边几乎不动,方差比 > 3
    ratio = max(left_var, right_var) / (min(left_var, right_var) + 1e-6)
    return ratio > 3.0

场景四:红外热成像------发烧不用摸

猪的正常体温 38-39.5℃,发烧是最常见的疾病信号。红外热成像摄像头(如海康 H10 的 OEM 模组,500 元左右)可以非接触测温。

python 复制代码
def detect_fever(thermal_frame, pig_detections):
    """从热成像中检测发烧个体"""
    fever_pigs = []
    
    for bbox in pig_detections:
        x1, y1, x2, y2 = bbox
        # 取耳根区域(猪的耳根温度最能反映核心体温)
        ear_region = thermal_frame[y1:y2, x1:x2]
        max_temp = np.max(ear_region)
        
        if max_temp > 40.0:  # ℃
            fever_pigs.append({
                'bbox': bbox,
                'temp': max_temp,
                'severity': 'high' if max_temp > 41.0 else 'medium'
            })
    
    return fever_pigs

硬件部署方案

场景 推荐摄像头 安装位置 成本
计数 海康 DS-2CD2T25 4mm 入口正上方 2.5m 300 元
测重 双目相机 (如 ZED Mini) 通道侧面 1.2m 1800 元
行为 海康 DS-2CD2146G2 2.8mm 舍内角落 3m 400 元
体温 MLX90640 热成像模组 食槽上方 1.5m 500 元

全部接 RK3588 网关,统一做推理 + 推流。一个 200 头规模的猪舍,全部硬件投入约 5000 元,一年节省的人工和减少的病死损失远超这个数。


踩坑预警

  • 猪会撞摄像头。 安装高度至少 2.5m,或者用防撞罩。水面、地面反光也会干扰检测,注意补光灯角度。
  • 粪便遮挡。猪身上糊了泥巴和粪便,视觉特征衰减严重。训练数据必须包含脏猪照片,不能用干净数据集训。
  • 光照变化。白天自然光 + 晚上补光灯,同一个猪白天晚上颜色完全不同。训练时加亮度和对比度数据增强。
  • 灰尘。猪舍粉尘大,镜头每周要擦。考虑装个小型雨刷。

下一篇:《农业无人机:从飞控到图像分析,一个人搞定》------无人机选型、航线规划、正射影像拼接、NDVI 植被指数分析。