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