ONVIF摄像头
This commit is contained in:
@@ -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可用格式
|
||||
- 循环捕获机制
|
||||
|
||||
### 阶段4:LED识别核心算法
|
||||
7. **图像处理基础**
|
||||
- 使用System.Drawing进行图像处理
|
||||
- 实现颜色空间转换(RGB到HSV)
|
||||
- 区域提取功能
|
||||
|
||||
8. **LED状态识别算法**
|
||||
- 实现颜色识别算法
|
||||
- 亮度检测算法
|
||||
- 闪烁检测算法(多帧比较)
|
||||
- 状态缓存和更新机制
|
||||
|
||||
### 阶段5:用户界面和工具
|
||||
9. **区域设置工具**
|
||||
- 创建区域设置窗口
|
||||
- 实现可视化区域选择
|
||||
- 实时预览和区域调整
|
||||
- 配置保存功能
|
||||
|
||||
### 阶段6:API接口和清理
|
||||
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. **性能优化**: 图像处理算法优化,确保实时性
|
||||
Reference in New Issue
Block a user