#
Junjie
4 天以前 0ecd4a0ec8c4c5585cbd8975d7786c5618814381
README.md
@@ -1,4 +1,213 @@
## hik-video
# 海康工业相机HTTP API服务
通过FastAPI提供HTTP接口控制海康工业相机拍照
## 功能特性
- ✅ 支持多相机管理
- ✅ 通过IP地址、序列号、索引选择相机
- ✅ RESTful API接口
- ✅ 自动图像格式转换(BMP/JPG)
- ✅ 图片下载接口
- ✅ 完整的错误处理
## 安装依赖
```bash
pip install -r requirements.txt
```
## 启动服务
```bash
python camera_api.py
```
服务将在 `http://localhost:8000` 启动
## API文档
启动服务后访问:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
## API接口
### 1. 列出所有相机
**GET** `/cameras`
响应示例:
```json
{
  "success": true,
  "count": 2,
  "cameras": [
    {
      "index": 0,
      "type": "GigE",
      "model": "MV-CS200-10GC",
      "serial": "00J12345678",
      "ip": "192.168.1.100",
      "user_defined_name": "Camera1"
    }
  ]
}
```
### 2. 拍照(通过IP地址)
**GET** `/capture?ip=192.168.1.100&filename=test_image`
**POST** `/capture`
```json
{
  "ip": "192.168.1.100",
  "filename": "test_image",
  "save_bmp": true,
  "save_jpg": true,
  "timeout": 3000
}
```
响应示例:
```json
{
  "success": true,
  "message": "拍照成功",
  "files": ["test_image.bmp", "test_image.jpg"],
  "camera_info": {
    "type": "GigE",
    "model": "MV-CS200-10GC",
    "serial": "00J12345678",
    "ip": "192.168.1.100"
  }
}
```
### 3. 拍照(通过序列号)
**GET** `/capture_by_serial?serial=00J12345678&filename=test_image`
### 4. 拍照(通过索引)
**GET** `/capture_by_index?index=0&filename=test_image`
### 5. 下载图片
**GET** `/image/test_image.jpg`
### 6. 健康检查
**GET** `/health`
## 使用示例
### Python客户端
```python
import requests
# 列出所有相机
response = requests.get("http://localhost:8000/cameras")
cameras = response.json()["cameras"]
# 通过IP地址拍照
response = requests.get(
    "http://localhost:8000/capture",
    params={
        "ip": "192.168.1.100",
        "filename": "my_image"
    }
)
result = response.json()
print(f"保存的文件: {result['files']}")
# 下载图片
response = requests.get("http://localhost:8000/image/my_image.jpg")
with open("downloaded.jpg", "wb") as f:
    f.write(response.content)
```
### cURL
```bash
# 列出相机
curl http://localhost:8000/cameras
# 拍照(GET)
curl "http://localhost:8000/capture?ip=192.168.1.100&filename=test_image"
# 拍照(POST)
curl -X POST http://localhost:8000/capture \
  -H "Content-Type: application/json" \
  -d '{"ip":"192.168.1.100","filename":"test_image"}'
# 下载图片
curl -O http://localhost:8000/image/test_image.jpg
```
### JavaScript/Fetch
```javascript
// 列出相机
fetch('http://localhost:8000/cameras')
  .then(res => res.json())
  .then(data => console.log(data));
// 拍照
fetch('http://localhost:8000/capture?ip=192.168.1.100&filename=test_image')
  .then(res => res.json())
  .then(data => console.log(data));
// 下载图片
fetch('http://localhost:8000/image/test_image.jpg')
  .then(res => res.blob())
  .then(blob => {
    const url = window.URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = 'test_image.jpg';
    a.click();
  });
```
## 测试
运行测试客户端:
```bash
python test_api.py
```
## 文件说明
- `camera_api.py` - FastAPI服务主文件
- `camera_manager.py` - 相机管理类
- `test_api.py` - API测试客户端
- `test.py` - 基础测试脚本
- `example_multi_camera.py` - 多相机使用示例
- `requirements.txt` - Python依赖
## 注意事项
1. 确保相机已正确连接并配置好网络
2. 关闭海康MVS客户端软件,避免设备占用
3. 图片默认保存在当前目录
4. 建议在生产环境中添加认证和权限控制
5. 可以通过环境变量配置服务端口和保存路径
## 故障排除
### 错误:设备无访问权限 (0x80000203)
- 关闭海康MVS客户端
- 确保没有其他程序占用相机
### 错误:获取图像失败 (0x80000007)
- 检查相机镜头盖是否打开
- 确保有足够光线
- 增加timeout参数值
### 错误:无法连接到API服务
- 确保服务已启动:`python camera_api.py`
- 检查端口8000是否被占用