news 2026/3/30 5:50:42

YOLO目标检测模型如何对接Apipost平台

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLO目标检测模型如何对接Apipost平台

前言

今天要给大家分享一个在工业巡检场景中非常实用的 AI 边缘计算部署实践。文中涉及的系统架构、接口设计和代码实现均为示例,主要用于说明整体思路和工程方法。我本人也是在实际项目中第一次系统性地接触边缘计算与算法接口化,很多经验都是在不断调试和联调过程中逐步摸索出来的,希望能对同样处在“模型落地阶段”的同学有所帮助。

工业巡检处理流程

在传统的工业巡检系统中,图像数据往往由摄像头、无人机或移动终端采集,然后上传至中心服务器或云端进行分析。这种方式在实验环境下尚可,但在真实工业现场往往会面临网络不稳定、带宽受限、响应延迟较高以及数据外传风险等问题。因此,在本项目中引入了AI 边缘计算的思路,将模型推理能力直接部署在靠近数据源的本地计算节点上。

从整体上看,这其中主要有三个部分:巡检平台、边缘计算节点以及检测模型。巡检平台负责业务调度与任务管理,当某个巡检点位产生检测需求时,平台会通过 HTTP 接口向边缘计算节点发送请求,请求中包含任务标识、巡检点位信息以及待检测的图像数据。

边缘计算节点部署在本地服务器上,在服务启动时会提前加载目标检测模型(如 YOLO),从而避免在每次请求中重复初始化模型带来的性能损耗。当接收到平台请求后,边缘节点首先对上传的图像进行解析和预处理,然后调用本地模型完成推理,得到目标的类别、位置框和置信度等信息。随后,这些原始检测结果会被进一步整理成结构化的 JSON 数据,例如是否存在异常目标、异常类型集合以及相关的检测框信息。

最后,边缘计算节点会将处理结果通过 HTTP 响应返回给巡检平台。平台只需要关心返回的结构化结果,而不需要了解具体使用了哪种模型或推理框架。

本地机测试

API接口定义

用于巡检平台向 AI 边缘计算节点发送巡检图像,边缘节点基于本地部署的目标检测模型完成推理,并返回检测结果。

请求参数用于描述巡检任务的基础信息及检测配置,对应如下数据模型:

from pydantic import BaseModel from typing import List, Optional, Dict, Any class DetectRequest(BaseModel): id: str pointid: str imagefile: str threshold: Optional[float] = 0.5

在实际部署中,imagefile 通常通过 form-data 的方式上传图片文件,而非直接传递本地文件路径,以避免平台与边缘节点之间的环境依赖。

接口响应用于返回边缘节点的检测结果及相关信息,对应如下数据模型:

class DetectResponse(BaseModel): id: str code: int message: str result: bool ident_type: List[str] max_similarity: str image_size: Dict[str, int] detections: List[Dict[str, Any]] model_info: Dict[str, str]

服务器端

服务器端主要的代码如下,yolo_infer.py里面的代码很简单,就是一个yolo模型处理图像并返回信息的操作。

from fastapi import FastAPI from schemas import DetectRequest from yolo_infer import YOLODetector app = FastAPI(title="Inspection YOLO API") detector = YOLODetector( weight_path="yolo11n.pt", conf_thres=0.5 ) @app.post("/api/v1/inspection/detect") def detect(req: DetectRequest): try: infer_res = detector.infer(req.imagefile) except Exception as e: return { "id": req.id, "code": 1002, "message": f"image load or inference failed: {str(e)}", "result": False } detections = infer_res["detections"] if detections: ident_types = list(set(d["class_name"] for d in detections)) max_conf = max(d["confidence"] for d in detections) result = True else: ident_types = [] max_conf = 0.0 result = False return { "id": req.id, "code": 0, "message": "success", "result": result, "ident_type": ident_types, "max_similarity": f"{max_conf * 100:.2f}%", "detections": detections, }

这是一个基于 FastAPI 的 AI 边缘计算推理服务,对外提供一个目标检测接口,内部调用 YOLO 模型完成巡检图像的检测,并返回结构化结果。

定义一个 HTTP POST 接口路径是 /api/v1/inspection/detect,请求体自动映射为 DetectRequest

客户端

首先启动我们的服务器端:

if __name__=="__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8088)

这样就说明是启动成功了。

客户端我们先进行本地的测试,test.jpg为本地的测试图片

import requests url = "http://127.0.0.1:8088/api/v1/inspection/detect" data = { "id": "test_003", "pointid": "P_03", "imagefile": "test.jpg", "threshold": 0.5 } try: resp = requests.post(url, json=data, timeout=30) from pprint import pprint pprint(resp.json()) except requests.exceptions.ConnectionError as e: print(f"❌ 连接失败!请检查:") print(f"1. 服务器IP是否正确:192.168.31.214") print(f"2. 服务器是否正在运行?") print(f"3. 防火墙是否开放了8088端口?") print(f"错误详情:{e}")

这里的url的端口和地址请与前面的保持一致,运行后返回的结果如下所示:

这样就说明是成功了。

不同机器间的测试

首先采用ipconfig查看服务器的IP地址:192.168.xx.xxx。

这里重新采用本地服务器的地址运行

uvicorn.run(app, host="192.168.xx.xxx", port=8088)

然后对于客户端那边,也要修改:

url = "http://192.168.xx.xxx:8080/api/v1/inspection/detect"

还是一样先运行服务器,然后在其他的机子上运行客户端代码,只是说你需要让两台机子处于同一个WiFi,或者是说在公网下,或者就使用云端。

下面是我的服务器端运行效果

下面是我借的同学的电脑做的测试:

一般来说,这种检测平台与服务器应该是在同一个局域网下的。

在Apipost平台做测试

这里要先进行内网穿透,进入官网:ngrok,下载一个windows安装包

在本地解压后会出现一个.exe可执行文件,运行会出现一个终端。

然后,你需要去注册一个ngrok的账号主要是为了获得密钥:

然后执行下面的命令:

ngrok authtoken 密钥

执行成功后,命令行界面中会出现在本地保存的信息。大致内容如下所示:

Authtoken saved to configuration file: C:\Users\ASUS\AppData\Local/ngrok/ngrok.yml

在命令行界面中,执行下面命令,就会将本地端口88映射到外网中,也可以选择其他的端口

ngrok http 8088

然后我们会得到一个公网可以访问的地址了,如果连接失败,可以试一试是否是网络的问题。

https://greasy-kelsey-schizogenetically.ngrok-free.dev

我们在Apipost客户机中新建一个HTTP项目

将下面这个地址填入到里面去,请将GET修改为POST。

https://greasy-kelsey-schizogenetically.ngrok-free.dev/api/v1/inspection/detect

接着填写我们的发送信息,请在Body-raw,选择JSON填入下面的信息。

{ "id": "test_001", "pointid": "P_01", "imagefile": "https://ts2.tc.mm.bing.net/th/id/OIP-C.j_wMLYpr-AlvUkbqhCex7QAAAA?cb=ucfimg2&ucfimg=1&rs=1&pid=ImgDetMain&o=7&rm=3", "threshold": 0.5 }

然后发送我们的请求即可,出现下面的响应,说明这里我们的流程完成。只是需要注意的是,我这里发送的是一个图像网络链接,而不是图像数据本身。

总结

这部分对于工业巡检这类对实时性和稳定性要求较高的应用场景来说,这是一种非常实用且易于落地的技术方案。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/22 17:22:52

固定头尾、中间滚动?用Flex + vh轻松搞定三栏布局

固定头尾、中间滚动?用Flex vh轻松搞定三栏布局固定头尾、中间滚动?用Flex vh轻松搞定三栏布局引言:为什么页面头尾固定这么让人头疼CSS Flex 布局快速上手指南——从“ Flex 是谁”到“ Flex 是我兄弟”1. 激活 Flex 模式2. 主轴与交叉轴—…

作者头像 李华
网站建设 2026/3/29 19:47:16

微电网恒功率PQ控制策略下的LCL并网仿真研究

微电网恒功率PQ控制,LCL并网仿真最近在搞微电网并网控制时发现个有意思的事——并网逆变器的PQ控制策略和LCL滤波器配合使用时,参数整定能把人绕晕。今天咱们就手撕个MATLAB仿真,看看这个经典组合到底怎么玩。先说说控制逻辑的核心&#xff1…

作者头像 李华
网站建设 2026/3/27 3:18:39

【青岛理工】25年计网期末A卷回忆版

一、简答题43分1.TCP/IP协议体系结构各层的核心功能2.简述CDMA的工作原理,计算过程见PPT/作业对于CDMA原理的理解,这里附上我在学习的时候自己的想法和思考(仅供参考,并非教科书式权威的理解):考虑&#xf…

作者头像 李华
网站建设 2026/3/28 5:36:38

51单片机数字电压表

51单片机的数字电压表(数码管显示)–可提供C程序、proteus仿真、原理图、PCB、元件清单 功能说明 主要由51单片机最小系统、四位共阴数码管、ADC0832模数转换芯片组成。 可测DC5V以内的电压,显示精度为0. 001V玩单片机的小伙伴应该都想过自己做个电压表吧&#xff1…

作者头像 李华
网站建设 2026/3/28 6:44:49

新的spring boot3.x和spring-security6.x的流程

以下是Spring Boot 3.x与Spring Security 6.x的核心流程及关键配置要点&#xff1a;依赖配置在pom.xml或build.gradle中添加依赖&#xff1a;<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</a…

作者头像 李华
网站建设 2026/3/29 2:11:44

主动配电网故障恢复的重构与孤岛划分模型 关键词:分布式电源 故障网络重构 主动配电网 孤岛划分...

主动配电网故障恢复的重构与孤岛划分模型 关键词&#xff1a;分布式电源 故障网络重构 主动配电网 孤岛划分 参考文档&#xff1a; [1]《A New Model for Resilient Distribution Systems by Microgrids Formation》 [2]《主动配电网故障恢复的重构与孤岛划分统一模型》 仿真软…

作者头像 李华