283 lines
7.9 KiB
Markdown
283 lines
7.9 KiB
Markdown
|
|
# 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<LedStatus> 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区域数量
|
|||
|
|
- 检查系统资源使用情况
|
|||
|
|
|
|||
|
|
## 技术支持
|
|||
|
|
|
|||
|
|
如有问题,请参考示例配置文件和测试程序进行调试。确保所有依赖项都已正确安装。
|