从0到1构建奶牛行为智能监控系统(五)基于Fastapi的目标检测、身份识别和行为识别服务
·
前面基于vllm框架部署了qwen3.5-9b大模型服务,本期介绍基于Fastapi的目标检测、身份识别、行为识别服务部署。
一、模型
这三个服务分别基于奶牛yolox模型、reid模型、c3d模型,具体原理可以分别查询目标检测、重识别(人脸识别/度量学习)、行为识别领域的相关资料。
二、基于Fastapi的模型封装
2.1.目标检测服务构建
目标检测服务实现的功能为:将用户上传的图像送入模型,返回检测结果数据(类别、坐标、置信度),创建了3个接口:
- “/api/detection/health”接口使用“GET” HTTP请求,用于检查服务状态
- '/api/detection/images/upload'接口使用“POST” HTTP请求,用于处理前端传来的用户图像文件(由于安全限制,浏览器无法直接写服务器磁盘)
- '/api/detection/images/detect'接口使用“POST” HTTP请求,将调用yolox模型对上传的图像进行检测,返回类别、坐标、置信度
相关伪代码如下:
from pathlib import Path
from typing import Dict, Any
from contextlib import asynccontextmanager
from fastapi import FastAPI, UploadFile, File
from fastapi.middleware.cors import CORSMiddleware
import uvicorn
#检测功能实现
class DetectorService:
def __init__(self, config_path: Path, checkpoint_path: Path, device: str) -> None:
#创建检测实例
app = FastAPI(title='YOLOX Detection API', version='1.0.0', lifespan=lifespan)
#中间件
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
#健康查询接口
@app.get('/api/detection/health')
#图像上传接口
@app.post('/api/detection/images/upload')
#检测功能接口
@app.post('/api/detection/images/detect')
#服务启动
uvicorn.run(app, host=args.host, port=args.port, reload=True)
2.2.身份识别服务构建
身份识别服务实现的功能为:将用户上传的图像送入模型,返回检测结果数据(身份、置信度),也是创建了3个接口:
- “/api/identifeication/health”接口使用“GET” HTTP请求,用于检查服务状态
- '/api/identifeication/images/upload'接口使用“POST” HTTP请求,用于处理前端传来的用户图像文件
- '/api/identifeication/images/detect'接口使用“POST” HTTP请求,将调用reid模型对上传的图像进行特征提取并于query向量数据库进行对比,返回身份结果、置信度
和目标检测不同,身份识别使用的reid模型进行识别需要对比输入图像和图库数据相似度,以此来判别输入奶牛身份,因此模型的识别需要准备gallery向量库。
具体做法为使用训练好的reid模型对图库图像进行特征提取,保存为npz文件,服务启动时先加载gallery向量库。
当有用户上传请求发送时,先使用模型对上传图像进行特征提取,再与gallery特征进行相似度计算,选择相似度最高匹配身份作为待识别奶牛的身份。
2.3.行为识别服务构建
行为识别服务实现的功能为:将用户上传的视频送入模型,返回检测结果数据(行为类别、置信度),也是创建了3个接口:
- “/api/action/health”接口使用“GET” HTTP请求,用于检查服务状态
- '/api/action/video/upload'接口使用“POST” HTTP请求,用于处理前端传来的用户视频文件
- '/api/action/video/detect'接口使用“POST” HTTP请求,将调用行为识别模型对上传的视频进行特征提取,通过softmax函数身份结果。
更多推荐





所有评论(0)