# XCamera库使用说明 ## 项目结构 ``` XCamera/ ├── XCamera.sln # Visual Studio解决方案文件 ├── XCamera.csproj # 项目文件 ├── README.md # 项目说明文档 ├── build.bat # 编译脚本(批处理) ├── build.ps1 # 编译脚本(PowerShell) ├── src/ # 源代码目录 │ ├── XCamera.cs # 主类,提供静态API │ ├── XCameraManager.cs # 核心管理器 │ ├── Core/ # 核心功能 │ │ ├── ConfigurationManager.cs # 配置管理 │ │ ├── CameraConnectionManager.cs # 摄像头连接管理 │ │ ├── XCloudSdkWrapper.cs # SDK P/Invoke封装 │ │ └── XCloudSdkEnums.cs # SDK枚举定义 │ ├── Models/ # 数据模型 │ │ ├── LedColor.cs # LED颜色枚举 │ │ ├── LedState.cs # LED状态枚举 │ │ ├── LedRegion.cs # LED区域定义 │ │ ├── CameraConfig.cs # 摄像头配置 │ │ └── LedStatus.cs # LED状态信息 │ ├── Vision/ # 图像处理和LED检测 │ │ ├── ImageProcessor.cs # 图像处理器 │ │ └── LedDetector.cs # LED检测器 │ └── UI/ # 用户界面 │ └── RegionEditorForm.cs # 区域编辑器 ├── config/ # 配置文件 │ └── sample_config.json # 示例配置文件 ├── lib/ # 依赖库 │ └── XCloudSDK/ # XCloudSDK │ ├── XCloudSDK.dll # SDK动态库 │ ├── XCloudSDK.lib # SDK静态库 │ └── include/ # SDK头文件 └── test/ # 测试程序 └── Program.cs # 控制台测试程序 ``` ## 快速开始 ### 1. 编译项目 ```bash # 使用PowerShell脚本编译 powershell -ExecutionPolicy Bypass -File build.ps1 # 或使用批处理脚本 build.bat ``` ### 2. 基本使用示例 ```csharp using System; using XCamera; class Program { static void Main() { // 1. 初始化 if (!XCamera.Initialize("config.json")) { Console.WriteLine("初始化失败"); return; } // 2. 启动摄像头 if (XCamera.StartCamera()) { Console.WriteLine("摄像头启动成功"); // 3. 开始捕获图像(自动检测LED) if (XCamera.StartCapture(1000)) // 1秒间隔 { Console.WriteLine("开始捕获图像..."); // 4. 等待用户输入 Console.WriteLine("按任意键停止..."); Console.ReadKey(); // 5. 停止捕获 XCamera.StopCapture(); } // 6. 停止摄像头 XCamera.StopCamera(); } // 7. 关闭资源 XCamera.Shutdown(); } } ``` ### 3. 事件驱动使用示例 ```csharp using System; using XCamera; class Program { static void Main() { // 订阅LED状态更新事件 XCamera.LedStatusUpdated += OnLedStatusUpdated; XCamera.ConnectionStateChanged += OnConnectionStateChanged; XCamera.ErrorOccurred += OnErrorOccurred; // 初始化并启动 if (XCamera.Initialize("config.json")) { if (XCamera.StartCamera()) { XCamera.StartCapture(1000); // 运行10秒后停止 Thread.Sleep(10000); XCamera.StopCapture(); XCamera.StopCamera(); } } XCamera.Shutdown(); } static void OnLedStatusUpdated(object sender, List statuses) { Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] LED状态更新:"); foreach (var status in statuses) { Console.WriteLine($" {status.RegionName}: {status.DetectedColor} {status.State} " + $"{(status.IsBlinking ? "闪烁" : "")} 亮度:{status.Brightness} 置信度:{status.Confidence}%"); } } static void OnConnectionStateChanged(object sender, bool connected) { Console.WriteLine($"摄像头连接状态: {(connected ? "已连接" : "已断开")}"); } static void OnErrorOccurred(object sender, string error) { Console.WriteLine($"错误: {error}"); } } ``` ## 配置文件 配置文件使用JSON格式,包含摄像头连接信息和LED区域定义: ```json { "IpAddress": "192.168.100.10", "TcpPort": 34567, "HttpPort": 8888, "OnvifPort": 8899, "Username": "admin", "Password": "", "Channel": 1, "LedRegions": [ { "Id": "power_led", "Name": "电源指示灯", "X": 100, "Y": 50, "Width": 20, "Height": 20, "ExpectedColor": "Red", "ColorTolerance": 30, "MinBrightness": 100 }, { "Id": "status_led", "Name": "状态指示灯", "X": 150, "Y": 50, "Width": 20, "Height": 20, "ExpectedColor": "Green", "ColorTolerance": 30, "MinBrightness": 100 } ] } ``` ## API参考 ### 主要方法 | 方法 | 描述 | |------|------| | `Initialize(configFilePath)` | 初始化库 | | `SetConfigFile(configFilePath)` | 设置配置文件路径 | | `StartCamera()` | 启动摄像头连接 | | `StartCapture(intervalMs)` | 开始循环捕获图像 | | `DetectLeds()` | 手动检测LED状态 | | `GetLedStatuses()` | 获取LED状态 | | `ShowRegionEditor()` | 显示区域编辑器 | | `StopCapture()` | 停止捕获 | | `StopCamera()` | 停止摄像头 | | `Shutdown()` | 关闭并释放资源 | ### 事件 | 事件 | 描述 | |------|------| | `LedStatusUpdated` | LED状态更新事件 | | `ConnectionStateChanged` | 连接状态变更事件 | | `CaptureStateChanged` | 捕获状态变更事件 | | `ErrorOccurred` | 错误事件 | ### LED状态信息 `LedStatus`类包含以下属性: - `RegionId`: 区域ID - `RegionName`: 区域名称 - `DetectedColor`: 检测到的颜色(Red/Yellow/Blue/Green/Unknown) - `State`: LED状态(On/Off/Blinking/Unknown) - `IsBlinking`: 是否闪烁 - `Brightness`: 亮度值(0-255) - `Confidence`: 置信度(0-100%) - `LastUpdateTime`: 最后更新时间 ## 测试程序 运行测试程序来验证库的功能: ```bash cd test dotnet run ``` 测试程序提供交互式菜单,可以测试所有功能: ``` 功能菜单: 1. 初始化 2. 设置配置文件路径 3. 启动摄像头 4. 开始捕获图像 5. 检测LED灯状态 6. 查询灯的状态 7. 显示区域编辑器 8. 停止捕获 9. 停止摄像头 10. 更新IP地址 11. 保存配置 12. 显示状态 0. 退出 ``` ## 注意事项 1. **网络配置**: 确保摄像头IP地址正确,网络连接正常 2. **权限**: 确保有足够的权限访问摄像头 3. **配置文件**: LED区域坐标需要根据实际图像调整 4. **性能**: 建议捕获间隔不要设置得太短(建议≥500ms) 5. **资源释放**: 使用完毕后务必调用`Shutdown()`释放资源 ## 故障排除 ### 连接失败 - 检查IP地址和端口配置 - 确认摄像头网络连接正常 - 验证用户名和密码 ### LED检测不准确 - 调整LED区域的坐标和大小 - 调整亮度阈值和颜色容差 - 确保图像质量良好 ### 性能问题 - 增加捕获间隔时间 - 减少LED区域数量 - 检查系统资源使用情况 ## 技术支持 如有问题,请参考示例配置文件和测试程序进行调试。确保所有依赖项都已正确安装。