3. 软件开发环境搭建:Python环境配置、OpenCV库安装、PyQt5框架搭建、串口通信库pyserial安装

好,咱们正式开始动手了。这一章,说白了就是给电脑“喂”一套趁手的工具。你想想看,镜头测试自动化系统,底层逻辑无非是:图像采集 → 图像处理 → 结果展示 → 控制硬件。这四个环节,分别对应着 Python、OpenCV、PyQt5 和 pyserial。

我个人习惯先把地基打牢。环境搭不好,后面全是坑。我记得刚入行那会儿,有次为了装一个库的依赖,折腾了一下午,最后发现是 Python 版本不对。嗯,这种亏,吃一次就够了。

3.1 Python 环境配置:选对版本,事半功倍

Python 版本怎么选?我建议直接上 Python 3.8 或 3.9。为什么?因为 OpenCV 和 PyQt5 对这两个版本的兼容性最好。3.10 以上虽然新,但有些老库还没完全跟上,容易出幺蛾子。

避坑指南: 我曾经在 Python 3.11 上装 OpenCV,结果编译报错,折腾了两天才发现是 numpy 版本不匹配。后来我学乖了,项目开始前先查一下各库的兼容性矩阵。

安装步骤很简单,我一般这么干:

  1. python.org 下载对应版本的安装包。
  2. 安装时,务必勾选“Add Python to PATH”。这一步很多人会忘,导致后面命令行里找不到 python 命令。
  3. 打开命令行(CMD 或 PowerShell),输入 python --version 验证。

验证通过后,我还会顺手升级一下 pip:

python -m pip install --upgrade pip

这一步不是必须的,但能避免很多“版本过旧”的警告。说白了,就是给后面的安装扫清障碍。

3.2 OpenCV 库安装:图像处理的核心引擎

OpenCV 是咱们做镜头测试的“眼睛”。装它其实就一行命令:

pip install opencv-python

但这里有个细节:要不要装 contrib 版? 我个人建议,如果只是做基础的图像处理(比如读取、滤波、边缘检测),标准版就够了。但如果你要用到 SIFT、SURF 这些特征提取算法,那就得装 contrib 版:

pip install opencv-contrib-python
小技巧: 安装时如果网速慢,可以加个国内镜像源。比如:pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple。我项目里一直用清华源,稳得很。

装完之后,怎么验证?写个简单的脚本试试:

import cv2
print(cv2.__version__)

如果能正常输出版本号,比如 4.8.0,那就说明装好了。我在项目中遇到过一个问题:装完 OpenCV 后,导入时报错 DLL load failed。后来发现是系统缺少 Visual C++ 运行库。嗯,这个坑也得记一下。

3.3 PyQt5 框架搭建:让界面“活”起来

PyQt5 是用来做界面的。你想想看,总不能每次测试都敲命令行吧?一个直观的 GUI,能让你实时看到图像、调整参数、保存结果。

安装命令:

pip install PyQt5

如果你还需要 Qt Designer(可视化设计界面的工具),可以再装一个:

pip install PyQt5-tools

装完之后,我习惯先跑一个最简单的窗口测试一下:

import sys
from PyQt5.QtWidgets import QApplication, QLabel

app = QApplication(sys.argv)
label = QLabel("Hello, 镜头测试系统!")
label.show()
sys.exit(app.exec_())

如果弹出一个窗口,显示那句话,那就说明环境没问题了。

注意: PyQt5 和 PySide2 是两套东西,虽然用法很像,但底层协议不同。我建议你选一个用到底,别混着装。我个人一直用 PyQt5,社区资源多,遇到问题好查。

3.4 串口通信库 pyserial 安装:连接硬件的桥梁

镜头测试系统里,经常要控制步进电机、光源、或者读取传感器数据。这些硬件大多通过串口(RS232/485)通信。pyserial 就是 Python 和硬件之间的“翻译官”。

安装命令:

pip install pyserial

装完之后,我一般会先查一下电脑上有哪些串口:

import serial.tools.list_ports
ports = serial.tools.list_ports.comports()
for port in ports:
    print(port.device)

这段代码会列出所有可用的串口。比如 COM3/dev/ttyUSB0。我在项目中遇到过一个问题:明明插了设备,但列表里找不到。后来发现是驱动没装,或者 USB 转串口的线坏了。嗯,硬件问题往往比软件问题更隐蔽。

下面是一个简单的串口读写示例:

import serial

ser = serial.Serial(
    port='COM3',
    baudrate=9600,
    timeout=1
)

ser.write(b'AT\r\n')  # 发送指令
response = ser.readline()  # 读取响应
print(response)

ser.close()
经验之谈: 串口通信最容易出问题的地方是波特率、数据位、停止位这些参数。一定要和硬件手册上的配置保持一致。我曾经因为波特率设错了,读回来的数据全是乱码,排查了半天才发现是这里的问题。

3.5 知识体系总览

为了让你更直观地理解这四部分的关系,我画了一张图。你可以把它当作整个章节的“地图”:

镜头测试自动化系统 - 软件环境搭建 Python 3.8/3.9 OpenCV PyQt5 pyserial 图像采集与处理 图形用户界面 串口硬件通信 四大组件协同工作,构成完整测试系统 采集 → 处理 → 显示 → 控制

这张图把四个组件的关系讲得很清楚。Python 是底座,OpenCV 负责“看”,PyQt5 负责“展示”,pyserial 负责“控制”。缺一个,系统就跑不起来。

3.6 环境验证清单

为了确保万无一失,我列了一个检查清单。你照着跑一遍,没问题就可以放心往下走了:

组件 验证命令 预期结果
Python python --version Python 3.8.x 或 3.9.x
OpenCV python -c "import cv2; print(cv2.__version__)" 4.x.x
PyQt5 python -c "from PyQt5.QtWidgets import QApplication; print('OK')" OK
pyserial python -c "import serial; print(serial.__version__)" 3.x
核心要点: 环境搭建不是一次性的。每当你开始一个新项目,或者换了一台新电脑,都建议重新跑一遍这个清单。我吃过亏——项目做到一半才发现某个库没装,结果打断思路,效率大打折扣。

好了,环境搭好了,咱们就可以开始写真正的代码了。下一章,我会带你用 OpenCV 读取第一张镜头图像,并做简单的质量分析。到时候你会发现,前面这些准备工作,全都值了。


专注资料整理