【视觉多模态】基于视觉AI的人物轨迹生成方案

【视觉多模态】基于视觉AI的人物轨迹生成方案

  • 背景
  • 步骤
  • 小结

背景

基于 Yolo-World v2 把人物从视频每帧中提取出来并分别存储在某路径下。现在的下一步,应该是把这些截图全部转换为向量并存储到向量数据库。

步骤

  1. 下载SFace模型
https://github.com/opencv/opencv_zoo/blob/main/models/face_recognition_sface/face_recognition_sface_2021dec.onnx
  1. 安装opencv-python 依赖,测试可用性
importcv2 print("OpenCV版本:", cv2.__version__)print("是否支持dnn模块:", hasattr(cv2,'dnn'))
  1. 基础调用测试代码
importcv2importnumpy as np def sface_extract_face_vector(image_path, model_path,input_size=(112,112)):""" 利用SFace模型提取人脸图像的特征向量 :param image_path: 输入人脸图像路径 :param model_path: SFace模型(onnx格式)路径 :param input_size: SFace输入尺寸(固定112x112,不可修改) :return:512维人脸特征向量(归一化后)"""# 步骤1:读取并预处理图像(SFace强制要求,必须严格遵循)# 1.1 读取图像(彩色模式)img=cv2.imread(image_path)ifimg is None: raise FileNotFoundError(f"无法读取图像文件:{image_path}")# 1.2 转换色彩空间(BGR→RGB,SFace模型要求)img_rgb=cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# 1.3 调整图像尺寸(固定112x112,SFace输入尺寸)img_resized=cv2.resize(img_rgb, input_size)# 1.4 数据格式转换(HWC→CHW,并添加批次维度)img_transposed=np.transpose(img_resized,(2,0,1))# (H,W,C)→(C,H,W)img_batch=np.expand_dims(img_transposed,axis=0)# (C,H,W)→(1,C,H,W)# 1.5 归一化(像素值归一化到[-1, 1],SFace模型要求)img_normalized=(img_batch.astype(np.float32)-127.5)/127.5# 步骤2:加载SFace onnx模型net=cv2.dnn.readNetFromONNX(model_path)# 可选:启用GPU加速(若有NVIDIA GPU,需配置OpenCV GPU环境)# net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)# net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)# 步骤3:模型推理(前向传播,获取特征向量)net.setInput(img_normalized)face_vector=net.forward()# 输出形状:(1, 512)# 步骤4:向量归一化(提升后续相似度计算的准确性)face_vector_normalized=face_vector / np.linalg.norm(face_vector,axis=1,keepdims=True)# 步骤5:返回一维特征向量(去除批次维度)returnface_vector_normalized.squeeze()# ---------------------- 配置参数并运行 ----------------------if__name__=="__main__":# 配置路径(修改为你的实际路径)importos SFACE_MODEL_PATH="/data1/projs/SFace/opencv_zoo/face_recognition_sface_2021dec.onnx"path='/data1/datas/wildtrack_dataset/wildtrack_dataset/Wildtrack_dataset/Image_subsets/C1/cropped'forfileinos.listdir(path): TEST_IMAGE_PATH=f"{path}/{file}"try:# 提取人脸特征向量face_feature=sface_extract_face_vector(TEST_IMAGE_PATH, SFACE_MODEL_PATH)# 打印结果验证print("SFace特征向量形状:", face_feature.shape)# 应输出 (512,)print("SFace特征向量前10个值:", face_feature[:10])print("向量归一化验证(模长应≈1):", np.linalg.norm(face_feature))except Exception as e: print("运行报错:", str(e))

结果:

024.8.0-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher41849-- /data1/projs/yolov5-botsort/test_only.py OpenCV版本:4.12.0 是否支持dnn模块: True SFace特征向量形状:(128,)SFace特征向量前10个值:[-0.041811070.105901390.045133310.013772150.0497637-0.03535534 -0.16844605 -0.079534460.00360839-0.02015602]向量归一化验证(模长应≈1):1.0SFace特征向量形状:(128,)[-0.008649510.137211070.00097885-0.00774572 -0.0306458 -0.01465974 -0.15866575 -0.06293750.090498960.017362320.0341635-0.13206565 -0.04685504 -0.059280860.04323329-0.035856850.11940002-0.003557990.05041823-0.01659128 -0.095046920.061995030.02595275-0.010231040.04494344-0.04678775 -0.006651940.062947180.05229411-0.11271915 -0.05184305 -0.03285127 -0.1269116 -0.18189423 -0.036520130.074977380.12063970.133915750.055842040.00342186-0.11525489 -0.1169667 -0.03108696 -0.10747405 -0.01156010.26701513-0.036781990.01830711-0.054812350.033669390.141028690.059063080.11707348-0.01611113 -0.101282090.06425073-0.044345770.226847960.07182860.10504609-0.10001983 -0.046612850.033695380.07690774-0.022769180.015273040.0209459-0.067221560.12785007-0.073309060.127180430.036501170.03357406-0.22308070.06874490.051670810.13399096-0.00556050.009251020.17704780.120136760.10237920.04011027-0.013265070.002124440.032370540.109193120.051502680.07991081-0.04595529 -0.05336874 -0.081588280.032809460.08914431-0.04767266 -0.09420003 -0.21350156 -0.049842370.125270650.017782810.046942-0.155373450.006912940.005221670.00649380.113883170.0553209-0.069932110.03343213-0.07741141 -0.04298204 -0.196524440.088440690.044994650.003223820.15364304-0.006026310.09509759-0.051170120.006598860.10149482-0.13059730.12939171-0.05865399 -0.0644947 -0.091725510.09984177-0.00866709]

小结

SFace可用了,但有很多配套的内容需要补充。
(1)SFace 只针对人脸,并不包括人的身形、衣着等,因此,身形、衣着还是要另外的模型去辨别;
(2)SFace 只针对人脸,也因此,需要有前置的内容,先从图中检测到人脸,并进行切割后再传给SFace;
(3)细节上,为了更好发挥模型的效果,还有一个如下的流程:【意识上漏掉了一些逻辑,比如:对齐、标准化这两步】

原始图像 → 人脸检测(定位人脸框坐标) → 人脸裁剪(仅保留人脸区域) → 人脸对齐(可选,提升精度) → 标准化预处理(112x112/RGB/归一化) → SFace特征提取 → 有效512维人脸向量

人脸检测:核心是定位人脸的位置和范围(输出人脸框的 x/y/w/h 坐标),解决 “图像里哪里有人脸” 的问题,过滤掉无脸 / 背影图像。
推荐模型:轻量场景用 OpenCV Haar 级联,高精度场景用 MTCNN/RetinaFace(能检测侧脸、小人脸,还能输出人脸关键点,为后续对齐做准备)。
人脸裁剪:根据检测到的人脸框坐标,从原始图像中精准切割出仅包含人脸的区域,剔除背景、身体、衣物等无关像素,让后续处理只聚焦人脸。
注意:裁剪时可适当扩大人脸框(比如向外扩展 10%),避免裁剪掉人脸边缘(如头发、下巴),保证人脸特征的完整性。
人脸对齐(可选但推荐):基于人脸检测输出的关键点(眼睛、鼻子、嘴巴),将人脸旋转、平移到标准正面姿态,解决人脸倾斜、侧脸导致的特征提取偏差。
这一步是提升 SFace 特征匹配精度的关键,比如同一人侧脸和正面的人脸,对齐后提取的向量相似度会大幅提升。
标准化预处理:将对齐后的人脸区域调整为 SFace 要求的112x112 固定尺寸,再完成 BGR→RGB、归一化到 [-1,1]、格式转换(HWC→CHW),满足模型输入格式要求。

所以,还需要进一步完善补充。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1149975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

经济领域的第一性原理:资源相对稀缺与人性欲望无穷大

经济领域的第一性原理:资源相对稀缺与人性欲望无穷大在经济学的理论体系中,“资源相对稀缺” 与 “人性欲望无穷大” 的核心矛盾,是当之无愧的第一性原理。这一矛盾并非简单的 “资源不够用”,而是贯穿所有经济活动的底层逻辑 ——…

nt!IopInitializeBootDrivers和ACPI!ACPIInitialize和pci!PciScanBus先后关系

nt!IopInitializeBootDrivers和ACPI!ACPIInitialize和pci!PciScanBus先后关系kd> g Breakpoint 1 hit nt!IopInitializeBootDrivers: 80e68fc6 55 push ebp 1: kd> kc# 00 nt!IopInitializeBootDrivers 01 nt!IoInitSystem 02 nt!Phase1Initialization 0…

零代码部署GTE中文向量模型|Web界面实时计算文本相似度

零代码部署GTE中文向量模型|Web界面实时计算文本相似度 1. 背景与核心价值 在当前的自然语言处理(NLP)应用中,语义相似度计算已成为搜索、推荐、问答系统和RAG(检索增强生成)等场景的核心能力。传统的关键…

支持33种语言互译,HY-MT1.5大模型镜像应用全景

支持33种语言互译,HY-MT1.5大模型镜像应用全景 1. 引言:多语言翻译的工程挑战与HY-MT1.5的破局之道 在全球化加速和AI技术深度融合的背景下,高质量、低延迟的机器翻译已成为跨语言交流、内容本地化、智能客服等场景的核心基础设施。然而&am…

【人工智能引论期末复习】第3章 搜索求解1 - 启发式搜索

一、核心概念(填空/选择高频)1. 搜索算法基础搜索算法的形式化描述:状态、动作、状态转移、路径/代价、目标测试搜索树的概念:从初始状态出发,扩展后继节点,直到找到目标搜索算法的评价指标:完备…

StructBERT中文情感分析镜像发布|CPU友好+WebUI+API集成

StructBERT中文情感分析镜像发布|CPU友好WebUIAPI集成 1. 背景与技术选型 在自然语言处理(NLP)领域,情感分析是企业级应用中最常见的任务之一,广泛应用于舆情监控、客服质检、用户评论挖掘等场景。传统方法依赖规则或…

【无人机巡检】基于matlab粒子群算法无人机巡检中的区域覆盖问题【含Matlab源码 14924期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…

零基础小白如何入门CTF,看这一篇就够了(附学习笔记、靶场、工具包)_ctf入门

CTF简介: CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼…

从入门到应用:GTE-Base-ZH模型镜像化实践全解析

从入门到应用:GTE-Base-ZH模型镜像化实践全解析 1. 背景与核心价值 在当前检索增强生成(RAG)和语义搜索广泛应用的背景下,高质量的中文文本向量化能力成为系统性能的关键瓶颈。传统的关键词匹配方式难以捕捉用户真实意图&#x…

零代码构建中文相似度计算器|GTE大模型镜像集成WebUI与API

零代码构建中文相似度计算器|GTE大模型镜像集成WebUI与API 1. 背景与需求:为什么需要语义相似度计算? 在自然语言处理(NLP)的实际应用中,判断两段文本是否“语义相近” 是一个高频且关键的需求。例如&…

【无人机编队】基于matlab粒子群算法PSO多无人机UAV群体协同轨迹规划【含Matlab源码 14919期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…

【无人机巡检】粒子群算法无人机巡检中的区域覆盖问题【含Matlab源码 14924期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab武动乾坤博客之家💞…

Linux 系统基础操作实验报告

一、实验名称Linux 虚拟机部署与文件管理、vi/vim 编辑器综合实践二、实验目的掌握在 VMware 中创建虚拟机并安装 RHEL9 操作系统的完整流程。学会通过 SSH 协议实现对 Linux 服务器的远程连接与管理。熟练运用 Linux 文件管理命令,完成目录与文件的创建、编辑等操作…

中文语义相似度计算实践|基于GTE轻量级镜像快速部署

中文语义相似度计算实践|基于GTE轻量级镜像快速部署 1. 业务场景与痛点分析 在构建智能客服、问答系统或内容推荐引擎时,一个核心需求是判断两段中文文本是否“语义相近”。例如: 用户提问:“怎么重置密码?” vs 知…

如何快速实现中文文本相似度计算?GTE轻量级CPU镜像全解析

如何快速实现中文文本相似度计算?GTE轻量级CPU镜像全解析 在自然语言处理(NLP)的实际应用中,中文文本相似度计算是智能客服、推荐系统、语义搜索等场景的核心能力。然而,许多开发者面临模型部署复杂、依赖冲突、推理速…

高效图像抠图新选择|CV-UNet大模型镜像全面测评

高效图像抠图新选择|CV-UNet大模型镜像全面测评 在图像处理领域,高质量的图像抠图(Image Matting) 一直是视觉AI应用中的关键环节。无论是电商产品图去背景、影视后期合成,还是AI写真生成,精准的前景提取能…

如何快速实现高精度图片抠图?CV-UNet镜像批量处理方案详解

如何快速实现高精度图片抠图?CV-UNet镜像批量处理方案详解 在电商、设计、AI内容生成等场景中,高质量的图像抠图(即前景提取与背景移除)是一项高频且关键的需求。传统手动抠图效率低,而基于深度学习的自动抠图技术又常…

【无人机编队】粒子群算法PSO多无人机UAV群体协同轨迹规划【含Matlab源码 14919期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab武动乾坤博客之家💞…

如何在资源受限设备运行大模型?AutoGLM-Phone-9B实战解析

如何在资源受限设备运行大模型?AutoGLM-Phone-9B实战解析 随着大语言模型(LLM)能力的持续突破,如何在移动端、边缘设备等资源受限环境中部署高效推理成为业界关注的核心问题。传统百亿级大模型往往依赖高性能GPU集群,…

WebDriver——》页面弹窗、鼠标键盘、显示等待、截图操作

1、页面弹窗alert:只有确定按钮alert driver.find_element(xpath,//input[onclick "myalert()"]) alert.click() tc driver.switch_to.alert #进入弹窗 tc.accept() #点击确定prompt:弹窗可以输入文本,有确定、取消按钮prompt …