3. 开发环境搭建:Python环境配置、OpenCV库安装、嵌入式开发工具链安装与配置
说实话,做嵌入式视觉开发这么多年,我踩过最多的坑就是环境配置。明明代码逻辑没问题,结果因为库版本不对、编译器路径没配好,一折腾就是半天。所以这一章,咱们把地基打牢。
我会带着你一步步搭建三套环境:Python 数据分析环境、OpenCV 图像处理库、以及嵌入式开发工具链。这三样东西,缺一不可。
核心逻辑:Python 负责算法验证和上位机界面,OpenCV 负责图像采集与处理,嵌入式工具链负责把算法烧进 STM32 芯片里。三者通过串口或网络通信,形成一个完整的闭环。
3.1 Python 环境配置
我个人习惯用 Anaconda 来管理 Python 环境。为什么?因为做图像处理经常要装一堆底层库,用 conda 可以避免很多依赖冲突。你想想看,要是手动装 numpy、scipy、matplotlib,光是解决版本问题就够你喝一壶的。
具体步骤很简单:
- 下载 Anaconda:去官网下载 Python 3.9 或 3.10 版本。别追新,3.11 以上有些库还没完全适配。
- 安装时注意:勾选「Add Anaconda to my PATH environment variable」。虽然安装向导不推荐,但我建议你勾上,省得后面手动配路径。
- 验证安装:打开命令行,输入
python --version,看到版本号就对了。
小技巧:创建一个独立的虚拟环境,专门给这个项目用。命令如下:
conda create -n thermal python=3.9
conda activate thermal
这样就算你后面装了一堆乱七八糟的库,也不会影响系统自带的 Python。
3.2 OpenCV 库安装
OpenCV 是整个系统的眼睛。没有它,摄像头采集的图像就是一堆原始数据,没法看。
安装命令就一行:
pip install opencv-python
pip install opencv-contrib-python # 包含额外模块
我在项目中遇到过一个问题:装完 OpenCV 后,调用 cv2.imshow() 报错,说缺少 GUI 后端。后来发现是系统没装 GTK 库。解决办法很简单:
- Windows 用户:一般不会遇到这个问题,直接装就行。
- Linux 用户:先装
sudo apt-get install libgtk2.0-dev,再装 OpenCV。 - macOS 用户:用
brew install opencv最省事。
注意:如果你用的是树莓派或 Jetson Nano 这类 ARM 平台,别用 pip 装。建议从源码编译,或者用预编译的 whl 包。我曾经在树莓派上直接用 pip 装,结果摄像头打不开,折腾了两天才发现是编译参数不对。
装完后,跑个简单测试:
import cv2
print(cv2.__version__) # 输出 4.5.5 或类似版本号
# 读取一张图片测试
img = cv2.imread('test.jpg')
cv2.imshow('Test', img)
cv2.waitKey(0)
能弹出窗口显示图片,说明 OpenCV 已经就绪了。
3.3 嵌入式开发工具链安装与配置
这部分是很多软件工程师觉得头疼的地方。说白了,嵌入式开发就是跟寄存器、中断、时钟打交道。工具链选对了,能省一半力气。
3.3.1 Keil MDK 安装
Keil 是 ARM 生态里最成熟的 IDE 之一。如果你用的是 STM32F1/F4 系列,Keil 绝对够用。
- 下载地址:ARM 官网或 Keil 官网,找 MDK-ARM 版本。
- 安装步骤:一路 Next,注意勾选「支持所有设备」。
- 破解:嗯,这个我就不多说了。正版用户请忽略。
安装完成后,打开 Keil,点 Project → New μVision Project,选择你的 STM32 型号。如果能正常创建工程,说明安装成功。
3.3.2 STM32CubeIDE 安装
我个人更推荐 STM32CubeIDE,尤其是新手。为什么?因为它集成了 CubeMX 图形化配置工具,时钟树、外设引脚、中断优先级,全都可以用鼠标点出来。代码自动生成,省去手写 HAL 库初始化的麻烦。
安装步骤:
- 去 ST 官网下载 STM32CubeIDE,选对应操作系统版本。
- 安装时注意:路径不要有中文或空格。我见过有人因为用户名是中文,导致编译报错。
- 安装完成后,打开软件,点
File → New → STM32 Project,选择芯片型号。 - 在 Pinout & Configuration 界面,配置好时钟源(一般选 HSE 8MHz 外部晶振),然后点
Project → Generate Code。
关键配置:生成代码时,记得勾选「Generate peripheral initialization as a pair of .c/.h files per peripheral」。这样每个外设单独一个文件,代码结构清晰,后期维护方便。
3.3.3 驱动与调试工具
光有 IDE 还不够,还得装驱动和调试工具:
| 工具 | 用途 | 备注 |
|---|---|---|
| ST-Link 驱动 | 连接 STM32 开发板与电脑 | 一般 CubeIDE 自带,Keil 需单独装 |
| CH340/CP2102 驱动 | USB 转串口通信 | 用于上位机与下位机通信 |
| OpenOCD | 开源调试器 | 如果你用 VSCode 开发,这个必备 |
避坑指南:我曾经在调试时发现 ST-Link 连不上开发板,折腾半天才发现是线的问题。记住:SWD 接口的 SWCLK 和 SWDIO 两根线不能接反,而且最好用杜邦线直接连,别用面包板,接触不良会让你怀疑人生。
3.4 环境验证:跑一个最小系统
所有环境装完后,咱们来验证一下整个链路是否通畅。写一个最简单的 STM32 程序:
// main.c
#include "main.h"
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
while (1) {
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
HAL_Delay(500);
}
}
编译下载后,如果开发板上的 LED 以 0.5 秒间隔闪烁,说明工具链没问题。然后打开 Python,用 pyserial 库发一条指令:
import serial
ser = serial.Serial('COM3', 115200) # 端口号根据实际情况改
ser.write(b'hello\n')
print(ser.readline())
如果串口助手能收到数据,恭喜你——整个开发环境已经搭建完毕。接下来就可以正式开始热成像系统的开发了。
最后说一句:环境配置这东西,一次配好,后面就顺了。别嫌麻烦,把每一步都走扎实。我见过太多人急着写代码,结果环境没配好,后面 debug 的时间比写代码还长。