共计 1982 个字符,预计需要花费 5 分钟才能阅读完成。
旷场实验的科研价值与传统局限
旷场实验(Open Field Test)是神经科学领域评估小鼠焦虑行为、运动活性和探索能力的经典方法。通过记录动物在方形开放区域内的运动轨迹、中心区域停留时间等参数,研究人员可以量化分析动物的行为特征。传统方法依赖人工观察和手动记录,存在三大痛点:

- 主观性强:不同实验人员对行为判读标准不一致
- 效率低下:单次实验需要 30-60 分钟人工记录
- 数据维度少:难以捕捉微观行为(如理毛、站立等)
主流 AI 旷场箱设备对比
目前市面主流解决方案可分为两类:
- 商用系统(如 Noldus EthoVision)
- 优点:即插即用,配套分析软件完善
-
缺点:封闭系统(无法自定义算法),单套价格约 $15k-$30k
-
开源方案(如 Biobserve Viewer)
- 优点:支持二次开发,基础版免费
- 缺点:需要编程基础,硬件兼容性要求高
建议新手选择 USB 摄像头(如 Logitech C920)+ 自制 40cm×40cm 旷场箱的入门方案,成本可控制在 $200 以内。
核心实现技术
视频采集与预处理
import cv2
# 初始化摄像头
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
# 定义 ROI 区域 (示例坐标)
roi_x, roi_y, roi_w, roi_h = 200, 150, 800, 800
while True:
ret, frame = cap.read()
if not ret: break
# ROI 裁剪与灰度转换
roi = frame[roi_y:roi_y+roi_h, roi_x:roi_x+roi_w]
gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
# 显示实时画面(按 Q 退出)cv2.imshow('Preview', gray)
if cv2.waitKey(1) & 0xFF == ord('q'): break
cap.release()
小鼠检测(YOLOv5 实现)
import torch
# 加载预训练模型
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
model.classes = [15] # 只检测小鼠类别
# 单帧检测示例
def detect_mouse(frame):
results = model(frame)
boxes = results.xyxy[0].cpu().numpy()
return boxes[boxes[:,4] > 0.5] # 置信度阈值 0.5
运动轨迹热力图
import numpy as np
heatmap = np.zeros((roi_h, roi_w), dtype=np.float32)
# 更新热力图(每次检测后调用)def update_heatmap(boxes):
for x1,y1,x2,y2,conf,cls in boxes:
center = (int((x1+x2)/2), int((y1+y2)/2))
cv2.circle(heatmap, center, 5, 1, -1)
# 可视化(归一化到 0 -255)vis_heatmap = cv2.normalize(heatmap, None, 0, 255, cv2.NORM_MINMAX)
关键数据分析
中心区域停留时间
设中心区域为边长为 $L_{center}$ 的正方形,当小鼠中心坐标 $(x,y)$ 满足:
$$\frac{L}{2} – \frac{L_{center}}{2} \leq x \leq \frac{L}{2} + \frac{L_{center}}{2}$$
$$\frac{L}{2} – \frac{L_{center}}{2} \leq y \leq \frac{L}{2} + \frac{L_{center}}{2}$$
统计满足条件的帧数占比即可得到停留时间比例。
运动速度计算
相邻两帧间位移 $\Delta d$ 与时间间隔 $\Delta t$ 的比值:
$$v = \frac{\sqrt{(x_t – x_{t-1})^2 + (y_t – y_{t-1})^2}}{\Delta t}$$
建议采样频率≥25fps 以保证精度。
避坑指南
光照优化
- 使用漫反射光源(如 LED 环形灯)
- 保持光照强度在 300-500lux 之间
- 避免窗户直射造成的光照变化
标注常见错误
- 漏标:小鼠被遮挡时未标注
- 解决方案:采用插值算法补全轨迹
- 误标:将阴影识别为小鼠
- 解决方案:增加形态学滤波(如开运算)
实践与思考
Colab 实践链接(包含完整可运行代码)
进阶思考题:
1. 如何通过数据增强提升深色小鼠(如 C57BL/6)的识别率?
2. 当多只小鼠同场时,怎样解决 ID 交换 (identity swap) 问题?
建议尝试在 YOLO 模型后接入 DeepSORT 算法,并结合毛色特征进行 re-ID。多动物实验还需考虑碰撞检测和社交行为分析等复杂场景。
