Sfoglia il codice sorgente

上传文件至 'src'

wang 2 settimane fa
parent
commit
4a877ea068
5 ha cambiato i file con 329 aggiunte e 0 eliminazioni
  1. 134 0
      src/architecture.md
  2. 122 0
      src/baslercamera.cpp
  3. 26 0
      src/baslercamera.h
  4. 26 0
      src/build.bat
  5. 21 0
      src/build.ps1

+ 134 - 0
src/architecture.md

@@ -0,0 +1,134 @@
+# VisionForm 程序架构图
+
+## 系统架构概览
+
+```
+┌───────────────────────────────────────────────────────────────────────────────┐
+│                                  VisionForm                                  │
+└───────────────────────────────────────────────────────────────────────────────┘
+                                      │
+┌─────────────────┬──────────────────┐              ┌─────────────────────┐
+│                 │                  │              │                     │
+▼                 ▼                  ▼              ▼                     ▼
+MainWindow    Process                │         对话框类
+│                 │                  │         ┌───────────────────────────┐
+│                 │                  │         │- CommunicationDialog      │
+└─────────────┬───┘                  │         │- CameraDialog             │
+              │                      │         │- TriggerDialog            │
+┌─────────────┼──────────────────────┼─────────│- CameraTypeDialog         │
+│             │                      │         │- AlgorithmProcessDialog   │
+▼             ▼                      ▼         └───────────────────────────┘
+算法处理       相机管理                │
+┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐
+│Algorithm   │  │Hikvision    │  │ImageAcq-   │  │FileSystem   │
+│Process     │  │Camera       │  │uisition    │  │             │
+└──────┬────┘  └──────┬──────┘  └──────┬──────┘  └─────────────┘
+       │              │                 │
+       ▼              ▼                 │
+┌─────────────┐  ┌─────────────┐        │
+│Algorithm   │  │GigECamera   │        │
+│Factory     │  └─────────────┘        │
+└──────┬────┘                          │
+       │                               │
+       ▼                               │
+┌─────────────┐  ┌─────────────┐        │
+│Algorithm   │  │BaslerCamera │        │
+│Base        │  └─────────────┘        │
+└──────┬────┘                          │
+       │                               │
+       ▼                               │
+┌─────────────┐  ┌─────────────┐        │
+│具体算法类   │  │CameraLink  │        │
+│- Grayscale  │  │Camera      │        │
+│- CannyEdge  │  └─────────────┘        │
+│- GaussianBlur│                        │
+│- MedianBlur │  ┌─────────────┐        │
+│- Dilate     │  │ImageSource  │        │
+│- Erode      │  └─────────────┘        │
+│- Thresholding│                        │
+│- HistogramEqualization│               │
+│- FindContours│                        │
+└─────────────┘                         │
+```
+
+## 核心组件关系
+
+### 1. 主窗口 (MainWindow)
+- **职责**:用户界面,协调各组件
+- **依赖**:Process, AlgorithmProcess, 各种对话框
+- **主要功能**:
+  - 图像显示
+  - 算法配置
+  - 流程控制
+  - 结果展示
+  - 添加图像源(文件/相机)
+
+### 2. 流程系统 (Process)
+- **职责**:管理完整的视觉处理流程
+- **组成**:
+  - 相机组件:支持不同类型的相机(Hikvision、Basler等)
+  - ImageAcquisition:图像采集和处理
+  - AlgorithmProcess:算法处理
+  - FileSystem:文件操作
+- **执行流程**:
+  1. 连接相机
+  2. 捕获图像
+  3. 图像预处理
+  4. 算法处理
+  5. 结果保存
+- **建造者模式**:
+  - 内部Builder类:`Process::Builder`
+  - 链式调用:`Process::Builder().setCamera().setImageAcquisition().setAlgorithmProcess().setFileSystem().build()`
+  - 构造器私有化,只能通过Builder创建
+  - 确保对象完整性和一致性
+
+### 3. 算法系统
+- **AlgorithmProcess**:算法流程管理
+- **AlgorithmFactory**:算法工厂,创建算法实例
+- **AlgorithmBase**:算法基类
+- **具体算法**:
+  - Grayscale:灰度转换
+  - CannyEdge:边缘检测(带运行参数存储)
+  - GaussianBlur:高斯模糊
+  - MedianBlur:中值模糊
+  - Dilate:膨胀
+  - Erode:腐蚀
+  - Thresholding:阈值处理
+  - HistogramEqualization:直方图均衡化
+  - FindContours:轮廓检测
+- **运行参数存储**:
+  - 每个算法类都有`runtimeParams`成员
+  - 存储输入/输出图像尺寸、通道数
+  - 存储算法特有的运行结果(如边缘数量、轮廓数量等)
+  - CannyEdge额外存储输入/输出图像副本
+
+### 4. 相机系统
+- **HikvisionCamera**:海康相机实现
+- **GigECamera**:GigE相机基类
+- **BaslerCamera**:Basler相机实现
+- **CameraLinkCamera**:CameraLink相机实现
+- **ImageSource**:图像源抽象
+
+### 5. 工具类
+- **FileSystem**:文件操作工具
+- **ImageAcquisition**:图像采集和预处理
+
+## 数据流
+
+```
+相机 → ImageAcquisition → 图像预处理 → AlgorithmProcess → 算法处理 → FileSystem → 结果保存
+```
+
+## 扩展点
+
+1. **新算法**:继承AlgorithmBase,在AlgorithmFactory中注册
+2. **新相机**:继承相应的相机基类
+3. **新流程配置**:通过建造者模式创建
+
+## 技术栈
+
+- **C++**:核心逻辑
+- **Qt**:用户界面
+- **OpenCV**:图像处理
+- **建造者模式**:对象构建(内嵌Builder类)
+- **工厂模式**:算法创建

+ 122 - 0
src/baslercamera.cpp

@@ -0,0 +1,122 @@
+#include "baslercamera.h"
+#include <QMessageBox>
+
+BaslerCamera::BaslerCamera(const QString &name) : CameraClass(name)
+{
+    m_type = CameraClass::BASLER_CAMERA;
+    m_brand = CameraClass::BASLER;
+    m_connected = false;
+    m_capturing = false;
+    m_ipAddress = "192.168.1.100";
+    m_port = 8080;
+}
+
+BaslerCamera::~BaslerCamera()
+{
+    if (m_connected) {
+        disconnectCamera();
+    }
+}
+
+bool BaslerCamera::connectCamera()
+{
+    try {
+        m_connected = true;
+        return true;
+    } catch (...) {
+        return false;
+    }
+}
+
+bool BaslerCamera::disconnectCamera()
+{
+    try {
+        if (m_capturing) {
+            stopCapture();
+        }
+        
+        // 模拟断开连接
+        // 实际应用中应该调用 Basler Pylon SDK 来断开连接
+        m_connected = false;
+        return true;
+    } catch (...) {
+        return false;
+    }
+}
+
+bool BaslerCamera::startCapture()
+{
+    try {
+        if (!m_connected) {
+            return false;
+        }
+        
+        // 模拟开始采集
+        // 实际应用中应该调用 Basler Pylon SDK 来开始采集
+        m_capturing = true;
+        return true;
+    } catch (...) {
+        return false;
+    }
+}
+
+bool BaslerCamera::stopCapture()
+{
+    try {
+        if (!m_connected || !m_capturing) {
+            return false;
+        }
+        
+        // 模拟停止采集
+        // 实际应用中应该调用 Basler Pylon SDK 来停止采集
+        m_capturing = false;
+        return true;
+    } catch (...) {
+        return false;
+    }
+}
+
+QImage BaslerCamera::getImage()
+{
+    try {
+        if (!m_connected || !m_capturing) {
+            return QImage();
+        }
+        
+        // 模拟获取图像
+        // 实际应用中应该调用 Basler Pylon SDK 来获取图像
+        return QImage();
+    } catch (...) {
+        return QImage();
+    }
+}
+
+bool BaslerCamera::setParameter(const QString &paramName, const QVariant &value)
+{
+    try {
+        if (!m_connected) {
+            return false;
+        }
+        
+        // 模拟设置参数
+        // 实际应用中应该调用 Basler Pylon SDK 来设置参数
+        return false;
+    } catch (...) {
+        return false;
+    }
+}
+
+QVariant BaslerCamera::getParameter(const QString &paramName)
+{
+    try {
+        if (!m_connected) {
+            return QVariant();
+        }
+        
+        // 模拟获取参数
+        // 实际应用中应该调用 Basler Pylon SDK 来获取参数
+        return QVariant();
+    } catch (...) {
+        return QVariant();
+    }
+}

+ 26 - 0
src/baslercamera.h

@@ -0,0 +1,26 @@
+#ifndef BASLERCAMERA_H
+#define BASLERCAMERA_H
+
+#include "cameraClass.h"
+
+class BaslerCamera : public CameraClass
+{
+public:
+    BaslerCamera(const QString &name);
+    ~BaslerCamera();
+
+
+    bool connectCamera() override;
+    bool disconnectCamera() override;
+    bool startCapture() override;
+    bool stopCapture() override;
+    QImage getImage() override;
+    bool setParameter(const QString &paramName, const QVariant &value) override;
+    QVariant getParameter(const QString &paramName) override;
+
+private:
+    QString m_ipAddress;
+    int m_port;
+};
+
+#endif // BASLERCAMERA_H

+ 26 - 0
src/build.bat

@@ -0,0 +1,26 @@
+@echo off
+
+rem 设置Visual Studio环境变量
+call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
+
+rem 设置Qt环境变量
+set PATH=D:\Apps\qt\5.14.2\msvc2017_64\bin;%PATH%
+
+rem 进入项目目录
+cd /d "E:\work\VisionForm"
+
+rem 清理之前的构建
+if exist Makefile del Makefile
+if exist Makefile.Debug del Makefile.Debug
+if exist Makefile.Release del Makefile.Release
+if exist release rmdir /s /q release
+if exist debug rmdir /s /q debug
+
+rem 生成Makefile
+qmake
+
+rem 编译项目
+nmake Release
+
+rem 暂停以查看输出
+pause

+ 21 - 0
src/build.ps1

@@ -0,0 +1,21 @@
+# 设置Visual Studio环境变量
+& 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat'
+
+# 设置Qt环境变量
+$env:PATH = "D:\Apps\qt\5.14.2\msvc2017_64\bin;$env:PATH"
+
+# 清理之前的构建
+if (Test-Path "Makefile") { Remove-Item "Makefile" }
+if (Test-Path "Makefile.Debug") { Remove-Item "Makefile.Debug" }
+if (Test-Path "Makefile.Release") { Remove-Item "Makefile.Release" }
+if (Test-Path "release") { Remove-Item "release" -Recurse -Force }
+if (Test-Path "debug") { Remove-Item "debug" -Recurse -Force }
+
+# 生成Makefile
+qmake
+
+# 编译项目
+nmake Release
+
+# 暂停以查看输出
+Read-Host "Press Enter to continue..."