DAMO-YOLO快速上手:curl命令行调用API获取JSON检测结果
DAMO-YOLO快速上手:curl命令行调用API获取JSON检测结果
1. 开篇:为什么需要命令行调用?
你是不是遇到过这样的情况:想要批量处理图片,但不想一次次点击上传按钮?或者需要在服务器上自动化运行目标检测,但不想打开浏览器界面?这时候,命令行调用就派上用场了。
DAMO-YOLO不仅提供了酷炫的网页界面,还隐藏着一个强大的API接口。通过简单的curl命令,你就能直接获取JSON格式的检测结果,方便集成到各种自动化流程中。今天我就带你快速上手这个实用功能。
2. 环境准备:确保服务正常运行
在开始之前,我们需要确认DAMO-YOLO服务已经正常启动。打开终端,运行以下命令:
# 检查服务状态 ps aux | grep python | grep flask # 如果服务未运行,启动服务 bash /root/build/start.sh服务正常启动后,你应该能看到类似这样的输出:
* Serving Flask app 'app' * Debug mode: off * Running on http://127.0.0.1:5000确保服务在5000端口正常运行,这是我们调用API的基础。
3. 理解API接口:核心参数说明
DAMO-YOLO的API接口设计得很简单,主要参数就两个:
- image: 需要检测的图片文件
- confidence_threshold: 置信度阈值(可选,默认0.5)
接口地址是:http://localhost:5000/detect
这个接口接收POST请求,返回JSON格式的检测结果。返回的数据结构包含检测到的目标列表、置信度、坐标位置等信息。
4. 基础调用:最简单的检测命令
让我们从最简单的例子开始。假设你有一张名为test.jpg的图片,想要检测其中的目标:
curl -X POST -F "image=@test.jpg" http://localhost:5000/detect这个命令会:
- 使用POST方法发送请求
- 通过
-F参数上传图片文件 - 调用检测接口
你会立即得到类似这样的JSON响应:
{ "detections": [ { "class": "person", "confidence": 0.87, "bbox": [123, 45, 200, 300] } ], "count": 1 }5. 高级用法:自定义参数和批量处理
5.1 设置置信度阈值
如果你只想检测高置信度的目标,可以添加阈值参数:
curl -X POST \ -F "image=@test.jpg" \ -F "confidence_threshold=0.7" \ http://localhost:5000/detect这样只会返回置信度大于0.7的检测结果。
5.2 批量处理多张图片
想要批量处理整个文件夹的图片?结合shell脚本很容易实现:
#!/bin/bash for image in ./images/*.jpg; do echo "处理图片: $image" curl -X POST -F "image=@$image" http://localhost:5000/detect > "${image%.jpg}_result.json" echo "结果保存到: ${image%.jpg}_result.json" done这个脚本会处理images文件夹下的所有jpg图片,并将结果保存为对应的JSON文件。
5.3 只获取统计信息
如果只需要知道检测到了多少目标,不需要详细的坐标信息:
curl -X POST -F "image=@test.jpg" http://localhost:5000/detect | jq '.count'这里使用了jq工具来提取count字段的值。
6. 处理返回结果:JSON数据结构详解
了解返回数据的结构很重要,这样你才能更好地利用检测结果。返回的JSON包含以下主要字段:
{ "success": true, "detections": [ { "class": "目标类别", "confidence": 0.95, "bbox": [x1, y1, x2, y2] } ], "count": 5, "inference_time": 0.045 }- success: 请求是否成功
- detections: 检测到的目标列表
- count: 检测到的目标总数
- inference_time: 推理耗时(秒)
每个检测目标包含类别、置信度和边界框坐标。坐标格式是[左上角x, 左上角y, 右下角x, 右下角y]。
7. 常见问题解决:你可能遇到的坑
7.1 连接拒绝错误
如果看到Connection refused错误,可能是服务没启动:
# 检查端口占用 netstat -tlnp | grep 5000 # 如果没有输出,启动服务 bash /root/build/start.sh7.2 图片格式不支持
确保图片格式是常见的jpg、png等格式。如果遇到格式问题,可以先用 imagemagick 转换:
convert input.bmp output.jpg7.3 返回数据为空
如果检测结果为空,可能是置信度阈值设置太高,或者图片中确实没有可检测的目标。尝试降低阈值:
curl -X POST \ -F "image=@test.jpg" \ -F "confidence_threshold=0.3" \ http://localhost:5000/detect8. 实际应用场景:命令行调用的优势
命令行调用API在实际工作中特别有用:
自动化监控系统:可以定时对监控截图进行检测,发现异常时触发报警批量图片处理:一次性处理大量图片,生成检测报告集成到工作流:作为更大系统的一个组件,提供视觉检测能力资源受限环境:在只有命令行的服务器环境中使用
比如,你可以创建一个简单的入侵检测脚本:
#!/bin/bash # 每隔10秒检测一次 while true; do # 截取屏幕 screencapture -x current.jpg # 调用检测 result=$(curl -s -X POST -F "image=@current.jpg" http://localhost:5000/detect) # 检查是否检测到人 if echo "$result" | jq '.detections[].class' | grep -q "person"; then echo "检测到人员活动!" # 这里可以添加报警逻辑 fi sleep 10 done9. 性能优化建议
为了获得更好的性能,这里有一些建议:
- 图片尺寸:适当调整图片大小,过大图片会影响处理速度
- 批量处理:如果需要处理大量图片,考虑使用并发请求
- 缓存利用:相同的图片可以缓存检测结果,避免重复计算
- 硬件加速:确保使用了GPU加速,处理速度会快很多
10. 总结
通过本文的介绍,你应该已经掌握了如何使用curl命令行调用DAMO-YOLO的API接口。这个功能虽然简单,但非常实用,能够大大扩展DAMO-YOLO的应用场景。
记住几个关键点:
- 接口地址是
http://localhost:5000/detect - 使用POST方法和multipart/form-data格式
- 主要参数是image和confidence_threshold
- 返回结果是结构化的JSON数据
现在你可以尝试将DAMO-YOLO集成到自己的项目中,享受命令行带来的自动化便利了。如果有任何问题,欢迎在评论区讨论。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
