2、数据采集基础:数据源类型、设备选型与环境搭建

说实话,做AI数据采集这么多年,我踩过最大的坑就是——设备买回来才发现根本不适合自己的场景。你想想看,花了几万块买了个工业级激光雷达,结果项目只需要做个室内温湿度监测,这不是杀鸡用牛刀嘛。

所以这一章,咱们就聊聊数据采集的根基。说白了,就是搞清楚三件事:数据从哪来、用什么设备采、怎么搭环境

2.1 数据源类型:传感器、摄像头、麦克风

数据源是AI项目的“食材”。食材不好,再厉害的厨师也白搭。我习惯把常见的数据源分成三大类:

2.1.1 传感器类

传感器是物理世界和数字世界的桥梁。常见的包括:

  • 温度/湿度传感器:比如DHT11、DHT22、BME280。我在做农业大棚项目时,就用的BME280,精度高还便宜。
  • 压力传感器:用于气压、液位监测。比如BMP180。
  • 惯性测量单元(IMU):加速度计+陀螺仪,比如MPU6050。做姿态识别时必备。
  • 距离传感器:超声波(HC-SR04)、红外、激光雷达(LiDAR)。
  • 气体传感器:MQ系列,检测CO、甲烷、酒精等。
我的经验: 选传感器别只看参数。我曾经用过一个高精度气压传感器,数据确实准,但功耗大得离谱,电池撑不过半天。后来换了BME280,精度差一点点,但续航直接翻了三倍。项目落地,有时候得学会取舍。

2.1.2 摄像头类

摄像头是视觉AI的“眼睛”。常见类型有:

  • USB摄像头:即插即用,适合原型验证。比如罗技C920。
  • 树莓派摄像头:CSI接口,延迟低,适合嵌入式。
  • 工业相机:高帧率、高分辨率,比如海康、大恒的相机。适合质检、测量场景。
  • 深度摄像头:Intel RealSense、微软Kinect、奥比中光。能同时获取RGB和深度信息。

嗯,这里要注意:分辨率不是越高越好。我见过有人用4K摄像头做手势识别,结果模型训练慢得要死,推理也卡顿。后来换成720p,效果几乎没差,速度却快了5倍。

2.1.3 麦克风类

麦克风是语音AI的“耳朵”。主要分两种:

  • 模拟麦克风:需要ADC转换,比如驻极体麦克风。
  • 数字麦克风:内置ADC,直接输出数字信号,比如I2S接口的麦克风(INMP441、SPH0645)。

做语音唤醒或声源定位时,麦克风阵列是常见方案。比如亚马逊的Alexa就用7麦克风阵列。我自己做过一个智能音箱项目,用了4个INMP441组成阵列,效果还不错。

2.2 采集设备选型

选设备,说白了就是看三个维度:精度、成本、场景。我整理了一个表格,方便你快速对比:

设备类型 推荐型号 精度/性能 成本 适用场景
温湿度传感器 BME280 ±0.5°C, ±3%RH 环境监测、农业
IMU MPU6050 16位ADC 姿态识别、运动追踪
USB摄像头 罗技C920 1080p 30fps 人脸识别、物体检测
深度摄像头 Intel RealSense D435 1280x720 90fps 3D重建、SLAM
数字麦克风 INMP441 60dB SNR 语音采集、声源定位
避坑指南: 我曾经贪便宜买了一批山寨传感器,结果数据漂移严重,校准花了三周时间。后来换了原厂芯片,一周就搞定了。省小钱花大钱,这个亏我替你吃了。

2.3 环境搭建

环境搭建,我把它分成三步:硬件连接、软件配置、数据验证

2.3.1 硬件连接

以树莓派为例,连接一个BME280传感器:

# 接线方式(I2C接口)
BME280 VCC -> 树莓派 3.3V
BME280 GND -> 树莓派 GND
BME280 SCL -> 树莓派 SCL (GPIO 3)
BME280 SDA -> 树莓派 SDA (GPIO 2)

连接好后,先别急着写代码。先检查一下I2C设备是否识别:

# 启用I2C接口
sudo raspi-config
# 选择 Interface Options -> I2C -> Enable

# 检测设备
sudo i2cdetect -y 1
# 如果看到 0x76 或 0x77,说明连接成功

2.3.2 软件配置

安装必要的Python库:

pip install smbus2 bme280

写一个简单的采集脚本:

import smbus2
import bme280

# 初始化I2C总线
bus = smbus2.SMBus(1)
address = 0x76  # 根据i2cdetect的结果调整

# 读取数据
calibration_params = bme280.load_calibration_params(bus, address)
data = bme280.sample(bus, address, calibration_params)

print(f"温度: {data.temperature:.2f} °C")
print(f"湿度: {data.humidity:.2f} %")
print(f"气压: {data.pressure:.2f} hPa")
小技巧: 我习惯在采集脚本里加一个time.sleep()控制采样频率。比如温湿度变化慢,1秒采一次就够了。别傻乎乎地死循环,CPU会抗议的。

2.3.3 数据验证

数据采回来,得先看看是不是靠谱。我一般会做两件事:

  1. 静态验证:把传感器放在稳定环境中,看数据是否波动在合理范围内。
  2. 动态验证:人为改变环境(比如对着传感器哈口气),看数据是否响应。

如果数据异常,先检查接线,再检查代码。我曾经花了半天时间查bug,最后发现是杜邦线松了。嗯,这种低级错误,谁还没犯过呢。

2.4 知识体系总览

为了让你更直观地理解本章的知识结构,我画了一张图:

数据采集基础:知识体系 数据源类型 • 传感器 温湿度、IMU、气压 • 摄像头 USB、CSI、深度 • 麦克风 模拟、数字、阵列 设备选型 • 精度 满足需求即可 • 成本 平衡性能与预算 • 场景 室内/室外/工业 环境搭建 • 硬件连接 I2C、SPI、UART • 软件配置 驱动、库、脚本 • 数据验证 静态+动态测试 核心原则:选对源、配好设备、搭稳环境

这张图把本章的核心逻辑串起来了。你想想看,数据源是基础,设备选型是桥梁,环境搭建是保障。三者缺一不可。

好了,这一章就聊到这儿。数据采集这块,说白了就是多动手、多踩坑。我当年也是从焊坏三块树莓派开始的。别怕犯错,错了才能记住。


公众号:蓝海资料掘金营,微信deep3321