人体姿势检索实战:Pose-Search 开源项目完整上手指南
人体姿势检索实战Pose-Search 开源项目完整上手指南【免费下载链接】pose-searchx6ud.github.io/pose-search项目地址: https://gitcode.com/gh_mirrors/po/pose-search图片找图已经是家常便饭但按姿势找图呢想象你是一名滑板教练想从几千张照片里找出所有空中展体的动作瞬间关键词搜索完全无能为力——而这就是人体姿势检索项目 Pose-Search 解决的问题。它用 33 个骨骼关键点把每张照片变成一串可计算的空间坐标让你拖一拖 3D 模型就能按姿势相似度把整个照片库重新排序。这篇文章记录我实际跑通它的完整过程以及它最值得借鉴的几个设计思路。一图理解这不是搜图是给姿势配一把量角器Pose-Search 的逻辑可以概括为一句话把姿势翻译成数字再按数字找同类。作者 x6ud 选了一条非常聪明的路径不训练自己的识别模型而是用 Google 的 MediaPipe Pose 在浏览器里完成姿态估计把检测到的 33 个关键点肩、肘、腕、髋、膝……连同它们的可见度一起存入数据文件。搜索时你在一具可交互的 3D 骨骼模型上摆出目标姿势系统把它当尺子逐一量取照片库中每张图的对应关节角度按误差排序返回结果。上面那张截图就是它的编辑器界面左侧是原始照片与红色骨骼标注中间是 2D 关键点轨迹和 3D 骨骼模型右侧是照片元数据管理。整套数据流完全跑在浏览器里前端代码里src/utils/detect-pose.ts负责姿态检测public/worker/下的 Worker 让检测不卡主线程。真实上手从克隆到搜出第一个结果我按照 README 的指引走了一遍全过程约 15 分钟git clone https://gitcode.com/gh_mirrors/po/pose-search cd pose-search npm install npm run dev启动后访问/#/editor页面会向你要一个 Unsplash 的 App Key。这一步是唯一需要外部准备的去 Unsplash 官网申请一个免费的 Access Key粘贴进输入框即可。接下来就是标准流程搜图输入关键词我用了 skate翻页挑选照片检测点击 Run Model等待 MediaPipe 标注出骨骼关键点入库点击 Add Record照片连同关键点数据写入数据集保存点 Save data.db数据落盘到public/下的photos.json与landmarks.dat一个值得注意的细节作者把关键点存成了紧凑的二进制文件每张照片 33 个点、每个点 7 个浮点数归一化坐标、世界坐标加可见度。几百张照片的数据集依然毫秒级加载这种省到底的存储设计在纯前端项目里很实用。数据准备好后切到/#/search核心玩法出现了——左侧有一具灰色 3D 骨骼模型你可以用鼠标拖动它的控制点比如把右膝掰到 90 度。右侧下拉框选择身体部位Face、Chest、Shoulder、Elbow、Hip、Knee点击搜索照片库会按相似度重新排序还在缩略图上用红点标出匹配的关节位置。我第一次搜出右膝弯曲的结果时确实有点兴奋顶部第一张图就是一张侧身屈膝的照片而系统根本没看过它的文字标签。亮点深挖四个值得抄的设计1. 局部匹配器把大问题拆成小问题src/Search/impl/下没有一个大而全的姿势匹配器而是每个身体部位一个类MatchShoulder、MatchElbow、MatchKnee……它们都实现同一个PoseMatcher接口只有两个方法prepare()读取目标模型的姿态match()对单张照片打分。好处是显而易见的搜肘部角度就不必关心手指计算量小每个部位还能用完全不同的几何策略。想加一个新部位比如脚踝只需新建一个类零侵入。2. 视角无关匹配器消除相机位置的影响这是全文最亮眼的设计。普通匹配器直接在三维空间里比较向量方向但同一姿势从侧面拍和从正面拍向量方向完全不同。解决办法藏在MatchElbowCameraUnrelated这类文件里先把手臂方向从世界坐标系转换到以躯干为基准的局部坐标系——相当于把人的躯干当作参照物重新描述手臂朝向。这样一来无论相机在哪、人物朝向哪边描述手臂怎么抬的数据都不变。界面里Camera Related开关控制的就是切换普通匹配器和这种视角无关匹配器。搜索运动照片时我强烈建议打开它结果质量提升非常明显。3. 3D 骨骼模型就是查询条件本身大部分以图搜图工具要你上传一张示例图而 Pose-Search 让你直接捏出一个姿势。SkeletonModelCanvas组件用 WebGL 2 渲染可交互的 3D 模型拖动手臂、腿部的控制点模型实时响应。更贴心的是左右手镜像处理你在模型上摆的是左臂上举系统也能找出右臂上举的照片搜索结果的缩略图上还会标注出匹配的关键点方便你快速确认得分依据。4. 优雅的工程封装底层用了 Vue 3 naive-ui gl-matrix但作者把算法和 UI 分得很干净。搜索逻辑集中在src/Search/impl/search.ts参数全部收在src/config.tsLANDMARK_VISIBILITY_ACCEPTABLE_THRESHOLD控制关键点可见度下限MAX_NUM_OF_SEARCH_RESULTS限制结果数量。调参时不用翻代码改一个配置文件就行。横向对比它和传统搜图的取舍维度文本关键词搜索传统以图搜图Pose-Search 姿势检索查询方式文字描述上传示例图拖动 3D 模型摆姿势表达能力差姿势难用文字描述中依赖示例图强关节角度精确可控视角鲁棒性无关一般好有视角无关匹配器数据要求文本标签图片特征需先跑一遍姿态检测适合场景海量素材粗筛找同款图动作分析、姿态比对代价也很清楚它需要前置的骨骼关键点数据所以数据准备成本比纯文本索引高但换来的是传统方案给不了的精确度。避坑与 FAQQ网页提示不支持 WebGL 2 怎么办这是硬性要求。3D 骨骼模型依赖 WebGL 2老浏览器或部分虚拟机环境不支持建议换用 Chrome / Edge 最新版并确认硬件加速已开启。Q检测出来的关键点对不上人检查图片里人物是否太小或被遮挡。LANDMARK_VISIBILITY_ACCEPTABLE_THRESHOLD默认 0.4偏低置信度的点会被过滤识别质量直接决定后续搜索精度尽量选主体清晰、光线均匀的照片。Q搜索速度慢先确认数据是否已保存。搜索是纯内存计算数据量大时会线性变慢可以把MAX_NUM_OF_SEARCH_RESULTS调小或精简照片库。QUnsplash 的 Key 存哪了存在浏览器 localStorage 里换机器需要重新粘贴属于正常现象。进阶玩法写一个自己的匹配器给src/Search/impl/加一个类实现PoseMatcher接口然后在src/Search/Search.ts的matchers表里注册就完成了一次扩展。例如为舞蹈分析写一个踝关节匹配器prepare()里算好目标模型脚踝的角度和朝向match()里对每张照片的 14、16 号关键点求误差并打分。想再进一步可以借鉴getNormalInLocalSpace这套局部坐标变换工具让你的匹配器也做到视角无关。社区与生态项目由 x6ud 开发MIT 协议开源代码结构清晰、注释到位非常适合作为人体姿态应用的学习样本。仓库根目录的 README 就是最简入门文档src/下的目录划分Search、Editor、components、utils本身就是在教你如何组织一个视觉类前端项目。下一步动手搜一个姿势Pose-Search 的价值在于它把一个听起来很 AI的需求——按人体姿势检索图像压缩成了一个十几分钟就能跑通的开源工具。无论你想研究姿态估计算法、做运动数据分析还是单纯好奇骨骼关键点能玩出什么花样都值得亲手试一次。打开终端克隆仓库申请一个免费的 Unsplash Key然后试着搜一搜屈膝或上举手臂——你会直观感受到什么叫姿势的数字化表达。跑通之后再回头看src/Search/impl/math.ts里的坐标变换很多算法上的巧思就一目了然了。【免费下载链接】pose-searchx6ud.github.io/pose-search项目地址: https://gitcode.com/gh_mirrors/po/pose-search创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

局域网文件共享全攻略:从SMB协议到NAS搭建,解决跨平台传输难题

局域网文件共享全攻略:从SMB协议到NAS搭建,解决跨平台传输难题

1. 为什么你的局域网共享总是不好用? 每次想从手机传几张照片到电脑,或者把电脑上的电影投到平板上看,你是不是还在用微信文件传输助手、QQ或者数据线?效率低不说,传个大文件还经常失败。其实,你家里或办公…

2026/10/24 23:02:57 阅读更多 →
AI Agent与大模型如何重塑经济模式:从人机协同到智能体革命

AI Agent与大模型如何重塑经济模式:从人机协同到智能体革命

1. 从“人找事”到“事找人”:一个正在发生的范式转移最近和几个不同行业的朋友聊天,发现一个共同的现象:大家都不约而同地感到了某种“失重感”。做软件的朋友说,以前一个功能模块,一个中级工程师吭哧吭哧干一周&…

2026/10/28 4:20:42 阅读更多 →
AI如何重塑经济模式:从传统支柱解构到新价值创造

AI如何重塑经济模式:从传统支柱解构到新价值创造

1. 从“裁员潮”到“模式危机”:我们正在经历什么? 最近几年,从科技巨头到传统制造业,“裁员”这个词频繁地出现在新闻头条里。很多人把原因归结于经济周期、市场饱和或者公司战略调整。但如果你仔细观察,会发现一个更…

2026/10/24 5:45:50 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/27 17:33:32 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/28 7:28:00 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/28 9:02:11 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/27 18:20:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/28 9:00:54 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/28 7:29:02 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 13:55:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 9:01:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 19:19:37 阅读更多 →