# 工业视觉识别系统 **Repository Path**: terlard/Industrial_Vision_Recognition_System ## Basic Information - **Project Name**: 工业视觉识别系统 - **Description**: 随着工业生产智能化升级,传统人工检测效率低、精度不足,单一视觉库方案难以兼顾实时性与工业级精度。本项目基于 Qt 开发工业视觉识别系统,融合 OpenCV 与 Halcon 技术优势,设计模块化算法与可视化参数体系,支持多相机并行处理,解决复杂工业场景下的精准检测需求,助力企业实现检测流程自动化升级。 - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2024-12-22 - **Last Updated**: 2026-10-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 工业视觉识别系统 ## 项目概述 随着工业生产智能化升级,传统人工检测效率低、精度不足,单一视觉库方案难以兼顾实时性与工业级精度。本项目基于 Qt 开发工业视觉识别系统,融合 OpenCV 与 Halcon 技术优势,设计模块化算法与可视化参数体系,支持多相机并行处理,解决复杂工业场景下的精准检测需求,助力企业实现检测流程自动化升级。 ## 技术栈 | 类别 | 技术 | |------|------| | 开发框架 | Qt | | 视觉库 | OpenCV、Halcon | | 多线程 | std::thread、多线程采集与显示 | | 图像处理 | 图像预处理、条码识别、目标匹配 | | 参数配置 | XML (tinyxml2)、可视化调节面板 | | 网络通信 | Socket (TCP)、JSON 数据格式 | | 日志 | spdlog | | 相机 SDK | 海康威视 (Hikvision)、Basler | ## 项目架构 ``` VisionProject/ ├── main.cpp # 程序入口 ├── VisionProject.h/.cpp # 主窗口类,整合各功能模块 ├── DeviceManager.h/.cpp # 设备管理器(单例模式) ├── Device.h # 设备抽象基类 ├── Camera.h # 相机抽象基类 ├── HK_Camera.h/.cpp # 海康威视相机实现 ├── Basler_Camera.h/.cpp # Basler 相机实现 ├── ImageData.h # 图像数据结构 ├── ImgProcess.h/.cpp # 图像处理算法模块 ├── ImageToolPara.h/.cpp # 可视化参数调节面板(Qt 插件) ├── ListImg.h/.cpp # 图像列表显示控件 ├── ListImgItem.h/.cpp # 列表项控件 ├── Socket_Client.h/.cpp # Socket 网络通信模块 ├── XMLConfigOperator.h/.cpp # XML 配置文件操作 ├── json.hpp # JSON 解析库 ├── tinyxml2.h/.cpp # XML 解析库 ├── ImageToolParam.xml # 参数配置文件 ├── VisionProject.qrc # Qt 资源文件 └── VisionProject.vcxproj # VS 项目文件 ``` ## 功能模块 ### 1. 设备管理模块 管理系统中所有硬件设备,采用抽象基类 + 工厂模式设计: - **DeviceManager**:单例设备管理器,统一管理光源、传感器、相机等设备 - **Device**:设备抽象基类,定义 `init()`、`enable()`、`disable()` 等通用接口 - **Camera**:相机抽象基类,扩展 `openCam()`、`closeCam()`、`getFrame()`、`snapCap()`、`stopCap()` 等相机专用接口 - 已实现相机类型: - **HK_Camera**:海康威视工业相机封装 - **Basler_Camera**:Basler 工业相机封装 ### 2. 图像采集模块 支持多相机同时采集与多幅图像缓存: - 最多支持 **4 台相机** 并行采集 - 独立的采集线程 `grapImageThdFunc` 保证采集不阻塞 UI - 使用 `std::map>` 实现多相机图像缓存队列 - 支持单帧采集(`getFrame`)与连续采集(`snapCap`) - 支持离线模式(从文件夹批量读取图像) ### 3. 图像处理模块 融合 Halcon 与 OpenCV 视觉库优势: - **条码识别**(`barCodeIdentify`): - 基于 Halcon `create_bar_code_model` 实现一维条码识别 - 支持扫描线数、起始/终止角度、最小元素尺寸、对比度阈值等参数配置 - 支持多种码制自动识别 - **目标匹配**(`ObjectMatching`): - 基于 Halcon `create_shape_model` 实现形状匹配 - 支持金字塔层数、角度范围、最小分数、贪婪度等参数配置 - 支持模板的创建、加载、更新与匹配 ### 4. 交互式模块 采用多线程 + 内存池技术实现流畅的图像显示与参数调节: - **图像显示**:独立显示线程 `dispalyThdFun`,使用 `std::mutex` 保证线程安全 - **参数可视化面板**(`ImageToolPara`): - Qt 插件式开发,支持动态加载 - 可视化调节 Halcon 算法参数 - 实时预览 ROI 区域与匹配结果 - 支持模板创建、加载、检验流程 - **XML 参数管理**(`XMLConfigOperator`): - 使用 tinyxml2 读写配置文件 - 支持 `ShapeModelPara`、`FindShapePara`、`BarCode` 等参数节点 - 参数与 UI 双向同步 ### 5. 通信模块 - **Socket 网络通信**(`SocketClient`): - TCP 客户端实现,连接服务端进行数据交互 - 使用 JSON 格式传输图像数据与识别结果 - 支持图像 Base64 编码传输(`Mat2Base64_JPEG` / `Base2Mat`) - 内置心跳保活机制 `keepAlive` - 支持断线重连与回调通知 - **串口通信**:控制光源等外设 - **扩展规划**:CAN 通信、Modbus 串口、USB 通信 ## 参数配置说明 系统参数通过 `ImageToolParam.xml` 进行配置: ```xml ``` ## 开发环境 - **IDE**:Visual Studio 2019 - **Qt 版本**:Qt 5.x - **OpenCV**:4.8.0 - **Halcon**:HalconCpp - **操作系统**:Windows - **编译器**:MSVC v141 ## 目录结构 ``` VisionProject/ ├── Include/ # 第三方头文件(spdlog、海康 SDK) ├── Libraries/ # 第三方库文件(.lib) ├── Image/ # 示例图像 ├── picture/ # 图标资源 ├── VisionProject/ # 源代码 │ ├── x64/Debug/ # 编译输出 │ └── ... # 源文件 ├── x64/Debug/ # 运行时 DLL └── VisionProject.sln # 解决方案文件 ``` ## 运行说明 1. 安装 Qt 5.x 及 Halcon 运行环境 2. 配置 OpenCV 4.8.0(`opencv_world480d.dll`) 3. 安装海康威视 / Basler 相机驱动及 SDK 4. 使用 Visual Studio 打开 `VisionProject.sln` 5. 编译并运行,确保 `x64/Debug/` 目录下包含所需 DLL ## 扩展规划 - CAN 总线通信支持 - Modbus 串口通信 - USB 设备通信 - 更多相机品牌适配 - 深度学习算法集成