ONVIF摄像头

This commit is contained in:
zqm
2026-03-16 14:56:15 +08:00
parent 99aceb58e6
commit ca4970bcbf

View File

@@ -0,0 +1,215 @@
# XCamera LED灯识别库实施计划更新版
## 项目概述
基于.NET Framework 4.0创建一个XCamera库用于摄像头初始化、图像捕获、LED灯区域识别和状态检测。
## 参考资料位置
- **SDK文件位置**: `d:\Projects\trunk\XCamera\Windows-x86_64_XCloudSDK_20241202\XCloudSDK_20241202_VS\`
- **C# Demo参考**: `d:\Projects\trunk\XCamera\Windows-x86_64_XCloudSDK_C#Demo_20241202\XCloudSDK_20241202_NET\demo\XCloudSDKDemo_CS\`
- **SDK库文件**: `d:\Projects\trunk\XCamera\Windows-x86_64_XCloudSDK_20241202\XCloudSDK_20241202_VS\bin\x86_64\Release\XCloudSDK.dll`
- **头文件**: `d:\Projects\trunk\XCamera\Windows-x86_64_XCloudSDK_20241202\XCloudSDK_20241202_VS\include\`
## 摄像头连接配置
- **IP地址**: 通过配置接口设置默认192.168.100.10
- **TCP端口**: 34567固定
- **HTTP端口**: 8888固定
- **ONVIF端口**: 8899固定
- **连接方式**: 直接根据提供的IP地址连接**不需要设备搜索功能**
## 实施步骤
### 阶段1项目结构和基础框架
1. **创建项目结构**
- 创建Class Library项目
- 设置.NET Framework 4.0目标框架
- 添加必要的引用和依赖
- 复制XCloudSDK.dll到项目lib目录
2. **定义核心接口和枚举**
- LED颜色枚举红、黄、蓝、绿
- LED状态枚举亮、灭、闪烁
- 区域定义结构
- 配置数据结构包含IP地址配置
3. **实现SDK封装类**
- XCloudSDK P/Invoke方法封装
- 设备连接管理(固定端口连接)
- 错误处理机制
### 阶段2配置管理
4. **配置文件处理**
- 创建配置类结构
- 实现JSON配置文件的读取和解析
- 支持摄像头IP地址配置
- 支持LED区域定义坐标、大小、颜色阈值
- 实现配置文件验证
### 阶段3摄像头功能
5. **摄像头初始化和连接**
- 实现SDK初始化
- **直接连接指定IP地址**(无需设备搜索)
- 使用固定端口TCP 34567, HTTP 8888, ONVIF 8899
- 登录验证
- 异常处理
6. **图像捕获功能**
- 实现实时预览
- 图像抓图功能
- 图像数据转换为.NET可用格式
- 循环捕获机制
### 阶段4LED识别核心算法
7. **图像处理基础**
- 使用System.Drawing进行图像处理
- 实现颜色空间转换RGB到HSV
- 区域提取功能
8. **LED状态识别算法**
- 实现颜色识别算法
- 亮度检测算法
- 闪烁检测算法(多帧比较)
- 状态缓存和更新机制
### 阶段5用户界面和工具
9. **区域设置工具**
- 创建区域设置窗口
- 实现可视化区域选择
- 实时预览和区域调整
- 配置保存功能
### 阶段6API接口和清理
10. **公共API设计**
- 初始化/卸载接口
- 状态查询接口
- 配置接口IP地址设置
- 事件通知机制
11. **资源管理**
- 实现IDisposable接口
- 资源清理机制
- 异常安全处理
## 关键技术实现
### 固定端口连接实现
```csharp
public class CameraConnector
{
private const int TCP_PORT = 34567;
private const int HTTP_PORT = 8888;
private const int ONVIF_PORT = 8899;
private string _ipAddress = "192.168.100.10"; // 默认可通过配置修改
public void SetIpAddress(string ipAddress)
{
_ipAddress = ipAddress;
}
public bool Connect()
{
// 直接使用IP地址连接无需设备搜索
string connectParam = $"{{\"IP\":\"{_ipAddress}\",\"Port\":{TCP_PORT}}}";
return XCloudSDK_Connect(connectParam) == 0;
}
}
```
### 配置结构(更新版)
```json
{
"CameraConfig": {
"IpAddress": "192.168.100.10",
"TcpPort": 34567,
"HttpPort": 8888,
"OnvifPort": 8899,
"Username": "admin",
"Password": "password",
"Channel": 1
},
"LedRegions": [
{
"Id": "led1",
"Name": "状态指示灯",
"X": 100,
"Y": 50,
"Width": 20,
"Height": 20,
"ExpectedColor": "Red",
"Threshold": {
"MinBrightness": 100,
"ColorTolerance": 30
}
}
]
}
```
### P/Invoke封装简化连接
```csharp
[DllImport("XCloudSDK.dll")]
public static extern int XCloudSDK_Init(string sJsonParam);
[DllImport("XCloudSDK.dll")]
public static extern int XCloudSDK_Device_DevLogin(int hUser, string sDevId, int nSeq);
[DllImport("XCloudSDK.dll")]
public static extern int XCloudSDK_Device_MediaRealPlay(int hUser, string sDevId, int nChannel, int nStreamType, IntPtr hWnd, int nSeq, string szParam);
[DllImport("XCloudSDK.dll")]
public static extern int XCloudSDK_Play_MediaSnapImage(int nPlayHandle, string sFileName);
```
## 项目文件结构
```
XCamera/
├── XCamera.csproj
├── XCamera.sln
├── src/
│ ├── Core/
│ │ ├── XCameraManager.cs
│ │ ├── ConfigurationManager.cs
│ │ ├── SdkWrapper.cs
│ │ └── CameraConnector.cs // 固定端口连接
│ ├── Models/
│ │ ├── LedRegion.cs
│ │ ├── LedState.cs
│ │ ├── CameraConfig.cs // 包含IP配置
│ │ └── LedColor.cs
│ ├── Vision/
│ │ ├── ImageProcessor.cs
│ │ ├── LedDetector.cs
│ │ └── ColorAnalyzer.cs
│ ├── UI/
│ │ └── RegionEditorForm.cs
│ └── Utils/
│ ├── JsonHelper.cs
│ └── ImageHelper.cs
├── lib/
│ └── XCloudSDK/
│ ├── XCloudSDK.dll // 从参考资料复制
│ ├── XCloudSDK.lib
│ └── include/
├── config/
│ └── sample_config.json // 包含IP配置示例
└── tools/
└── CopySdkFiles.bat // 复制SDK文件脚本
```
## 实施优先级
1. **高优先级**: SDK封装、固定IP连接、基础图像捕获
2. **中优先级**: LED识别算法、配置管理
3. **低优先级**: 区域设置UI、高级功能
## 测试和验证
1. **连接测试**: 验证固定IP连接功能
2. **图像捕获测试**: 验证图像获取和格式转换
3. **LED识别测试**: 验证颜色和状态识别准确性
4. **配置测试**: 验证IP地址配置和修改功能
## 注意事项
1. **线程安全**: 确保多线程环境下的安全操作
2. **资源管理**: 及时释放SDK资源和图像内存
3. **异常处理**: 完善的错误处理和日志记录
4. **配置验证**: IP地址格式验证和端口可用性检查
5. **性能优化**: 图像处理算法优化,确保实时性