216 lines
5.2 KiB
Markdown
216 lines
5.2 KiB
Markdown
|
|
# XCamera LED灯识别库
|
|||
|
|
|
|||
|
|
基于.NET Framework 4.0的摄像头LED灯识别库,使用XCloudSDK实现摄像头连接和图像捕获功能。
|
|||
|
|
|
|||
|
|
## 功能特性
|
|||
|
|
|
|||
|
|
1. **初始化** - 初始化SDK和库
|
|||
|
|
2. **设置配置文件路径** - 加载JSON配置文件
|
|||
|
|
3. **启动摄像头** - 根据配置连接摄像头
|
|||
|
|
4. **循环捕获图像** - 定时从摄像头捕获图像
|
|||
|
|
5. **LED灯识别** - 识别LED灯的颜色、亮灭状态、是否闪烁
|
|||
|
|
6. **状态查询** - 提供函数查询LED灯状态
|
|||
|
|
7. **区域设置窗口** - 可视化设置LED区域
|
|||
|
|
8. **资源释放** - 关闭卸载并释放资源
|
|||
|
|
|
|||
|
|
## 摄像头配置
|
|||
|
|
|
|||
|
|
- **IP地址**: 通过配置接口设置(默认192.168.100.10)
|
|||
|
|
- **TCP端口**: 34567(固定)
|
|||
|
|
- **HTTP端口**: 8888(固定)
|
|||
|
|
- **ONVIF端口**: 8899(固定)
|
|||
|
|
|
|||
|
|
## 快速开始
|
|||
|
|
|
|||
|
|
### 1. 初始化
|
|||
|
|
```csharp
|
|||
|
|
// 使用默认配置初始化
|
|||
|
|
bool result = XCamera.Initialize();
|
|||
|
|
|
|||
|
|
// 或指定配置文件路径
|
|||
|
|
bool result = XCamera.Initialize("config.json");
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 设置配置文件
|
|||
|
|
```csharp
|
|||
|
|
bool result = XCamera.SetConfigFile("config.json");
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 启动摄像头
|
|||
|
|
```csharp
|
|||
|
|
bool result = XCamera.StartCamera();
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 开始捕获图像
|
|||
|
|
```csharp
|
|||
|
|
// 默认间隔1秒
|
|||
|
|
bool result = XCamera.StartCapture();
|
|||
|
|
|
|||
|
|
// 或指定捕获间隔(毫秒)
|
|||
|
|
bool result = XCamera.StartCapture(2000); // 2秒间隔
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5. 订阅LED状态更新事件
|
|||
|
|
```csharp
|
|||
|
|
XCamera.LedStatusUpdated += (sender, statuses) =>
|
|||
|
|
{
|
|||
|
|
foreach (var status in statuses)
|
|||
|
|
{
|
|||
|
|
Console.WriteLine($"{status.RegionName}: {status.DetectedColor} {status.State}");
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6. 手动检测LED状态
|
|||
|
|
```csharp
|
|||
|
|
var statuses = XCamera.DetectLeds();
|
|||
|
|
foreach (var status in statuses)
|
|||
|
|
{
|
|||
|
|
Console.WriteLine(status.GetStatusDescription());
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 7. 显示区域编辑器
|
|||
|
|
```csharp
|
|||
|
|
XCamera.ShowRegionEditor();
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 8. 关闭资源
|
|||
|
|
```csharp
|
|||
|
|
XCamera.Shutdown();
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 配置文件格式
|
|||
|
|
|
|||
|
|
```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
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 核心类说明
|
|||
|
|
|
|||
|
|
### XCamera(主类)
|
|||
|
|
提供静态方法,简化库的使用。包含所有主要功能的封装。
|
|||
|
|
|
|||
|
|
### XCameraManager(管理器)
|
|||
|
|
核心管理器,负责协调各个组件的工作。
|
|||
|
|
|
|||
|
|
### ConfigurationManager(配置管理器)
|
|||
|
|
管理JSON配置文件的加载、保存和更新。
|
|||
|
|
|
|||
|
|
### CameraConnectionManager(摄像头连接管理器)
|
|||
|
|
负责摄像头的连接、登录、实时预览和图像捕获。
|
|||
|
|
|
|||
|
|
### ImageProcessor(图像处理器)
|
|||
|
|
提供图像处理功能,包括颜色分析、亮度计算等。
|
|||
|
|
|
|||
|
|
### LedDetector(LED检测器)
|
|||
|
|
负责LED灯的状态检测,包括颜色识别、亮度检测、闪烁检测。
|
|||
|
|
|
|||
|
|
### RegionEditorForm(区域编辑器)
|
|||
|
|
可视化界面,用于设置和调整LED区域。
|
|||
|
|
|
|||
|
|
## 事件
|
|||
|
|
|
|||
|
|
- **LedStatusUpdated**: LED状态更新事件
|
|||
|
|
- **ConnectionStateChanged**: 连接状态变更事件
|
|||
|
|
- **CaptureStateChanged**: 捕获状态变更事件
|
|||
|
|
- **ErrorOccurred**: 错误事件
|
|||
|
|
|
|||
|
|
## 使用示例
|
|||
|
|
|
|||
|
|
```csharp
|
|||
|
|
using System;
|
|||
|
|
using XCamera;
|
|||
|
|
|
|||
|
|
class Program
|
|||
|
|
{
|
|||
|
|
static void Main()
|
|||
|
|
{
|
|||
|
|
// 初始化
|
|||
|
|
if (!XCamera.Initialize("config.json"))
|
|||
|
|
{
|
|||
|
|
Console.WriteLine("初始化失败");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 订阅LED状态更新
|
|||
|
|
XCamera.LedStatusUpdated += (sender, statuses) =>
|
|||
|
|
{
|
|||
|
|
Console.WriteLine("LED状态更新:");
|
|||
|
|
foreach (var status in statuses)
|
|||
|
|
{
|
|||
|
|
Console.WriteLine($" {status.GetStatusDescription()}");
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 启动摄像头
|
|||
|
|
if (XCamera.StartCamera())
|
|||
|
|
{
|
|||
|
|
Console.WriteLine("摄像头启动成功");
|
|||
|
|
|
|||
|
|
// 开始捕获图像
|
|||
|
|
if (XCamera.StartCapture(1000))
|
|||
|
|
{
|
|||
|
|
Console.WriteLine("开始捕获图像...");
|
|||
|
|
|
|||
|
|
// 等待用户输入
|
|||
|
|
Console.WriteLine("按任意键停止...");
|
|||
|
|
Console.ReadKey();
|
|||
|
|
|
|||
|
|
// 停止捕获
|
|||
|
|
XCamera.StopCapture();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 停止摄像头
|
|||
|
|
XCamera.StopCamera();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 关闭资源
|
|||
|
|
XCamera.Shutdown();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 编译说明
|
|||
|
|
|
|||
|
|
1. 确保已安装.NET Framework 4.0或更高版本
|
|||
|
|
2. 项目依赖Newtonsoft.Json 8.0.3
|
|||
|
|
3. 需要XCloudSDK.dll文件(已包含在lib目录中)
|
|||
|
|
4. 使用Visual Studio或MSBuild编译
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. 确保摄像头IP地址正确配置
|
|||
|
|
2. 检查网络连接是否正常
|
|||
|
|
3. 确保有足够的权限访问摄像头
|
|||
|
|
4. 配置文件中的LED区域坐标需要根据实际图像调整
|
|||
|
|
5. 建议在实际使用前进行充分的测试和校准
|
|||
|
|
|
|||
|
|
## 错误处理
|
|||
|
|
|
|||
|
|
库中所有方法都有完善的错误处理机制,失败时会返回false,并通过ErrorOccurred事件提供详细的错误信息。
|
|||
|
|
|
|||
|
|
## 技术支持
|
|||
|
|
|
|||
|
|
如有问题,请参考示例配置文件和测试程序进行调试。
|