如何用 InsightFace 的 SCRFD Person 模型完成全身人物检测? 📅 发布时间:2026/9/12 8:44:05 👁 浏览次数: 如何用 InsightFace 的 SCRFD Person 模型完成全身人物检测【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightfaceInsightFace 的 SCRFD Person 检测示例 可以完成一个具体任务给定一张图片在一次前向推理中同时输出全身人物的 bounding box以及该人物当前可见区域的标记。模型是scrfd_person_2.5g.onnx通过downloadTrue参数自动从官方存储服务器下载到本地不需要手动找模型文件。最终产物是叠加了标注结果的图片绿色框表示全身蓝色掩码表示可见区域。环境准备示例入口是 scrfd_person.py文件开头的版本断言给出了最低要求import insightface assert insightface.__version__0.4安装与升级方式见 examples/README.md 和 examples/person_detection/README.mdpip install -U insightface代码中还依赖cv2和numpy来读图、画框和保存结果。运行示例脚本前需要准备两样东西一个可读写的工作目录脚本从这里读取输入图片一个名为data/images的目录把待检测的.jpg图片放进去——脚本用glob.glob(data/images/*.jpg)匹配文件。另外注意脚本结尾会把结果写到./outputs/目录运行前需确认当前工作目录下已存在该目录否则cv2.imwrite会失败。加载并初始化 SCRFD Person 模型模型加载和参数配置是两行代码官方示例中的写法是detector insightface.model_zoo.get_model(scrfd_person_2.5g.onnx, downloadTrue) detector.prepare(0, nms_thresh0.5)逐条说明get_model(scrfd_person_2.5g.onnx, downloadTrue)如果本地~/.insightface/models/下已有该 onnx 文件就直接加载不存在则自动下载model_zoo.py 中allow_download为 True 时走下载分支默认root为~/.insightface。这一步需要网络可访问断网环境下请提前准备好模型文件再传downloadFalse以外的本地路径。detector.prepare(0, nms_thresh0.5)ctx_id传0表示使用非负上下文标识初始化nms_thresh用于后置 NMS 的 IoU 阈值。SCRFD 类中 NMS 阈值默认为0.4、检测分数阈值det_thresh默认为0.5见 scrfd.py 第 87–88 行示例显式把nms_thresh调到了0.5即框重叠达到 0.5 才会被 NMS 抑制。运行检测并理解返回结果官方示例的核心函数节选自 scrfd_person.pydef detect_person(img, detector): bboxes, kpss detector.detect(img) bboxes np.round(bboxes[:,:4]).astype(np.int) kpss np.round(kpss).astype(np.int) kpss[:,:,0] np.clip(kpss[:,:,0], 0, img.shape[1]) kpss[:,:,1] np.clip(kpss[:,:,1], 0, img.shape[0]) vbboxes bboxes.copy() vbboxes[:,0] kpss[:, 0, 0] vbboxes[:,1] kpss[:, 0, 1] vbboxes[:,2] kpss[:, 4, 0] vbboxes[:,3] kpss[:, 4, 1] return bboxes, vbboxesdetector.detect(img)返回两个数组bboxes每个检测出的人物一行前 4 列是全身框(x1, y1, x2, y2)最后一列是置信度示例取前 4 列并取整用于画框。kpss每个人物 5 个关键点形状(n, 5, 2)。示例的“可见区域”是这样得到的直接取第 1 个关键点(kpss[:, 0, 0], kpss[:, 0, 1])作为可见框左上角、第 5 个关键点(kpss[:, 4, 0], kpss[:, 4, 1])作为右下角构造vbboxes并把坐标裁剪到图像边界内。这就是 README 里说的“单次前向中同时输出全身框与可见区域”。完整脚本的运行逻辑是遍历data/images/*.jpg对每张图调用detect_person然后为每个人物画绿色全身框cv2.rectangle颜色(0,255,0)并在可见区域内用 alpha 为 0.8 的蓝色(255, 0, 0)做混合着色四角再画圆点标记。最后按原文件名写入./outputs/。如果你的图片不是.jpg把glob.glob(data/images/*.jpg)里的后缀改成实际格式即可其余代码不变。验证结果示例脚本没有打印数值型指标验证方式是查看./outputs/下生成的标注图绿色矩形 该人物的全身检测框蓝色着色区域 该人物的可见区域。examples/person_detection/README.md 中给出的检测效果示意文档示例图片仅供参考判断运行是否正常的依据加载模型时如果本地没有 onnx 文件终端会打印download_path:开头的下载信息加载成功后get_model内部会打印Applied providers: ...一行onnxruntime 会话创建后输出。./outputs/下出现了与输入同名的图片且图中框与人物位置相符即说明检测链路已跑通。如果某张图输出为空白没有框表示该输入下没有满足阈值的检测——可以调低nms_thresh/检测阈值重新尝试但示例本身没有给出推荐数值请按自己的数据试验。限制与适用条件官方示例的测试条件是 640 输入尺寸README 原文“We make tests on the input size of 640”换其他输入尺寸效果未在该文档中说明。模型自动下载依赖网络downloadTrue时请确认能访问存储服务器。脚本按data/images/*.jpg硬匹配输入目录图片放错目录或格式不符时img_paths为空脚本会静默不处理任何图片——运行前先用ls data/images确认。版本要求以示例自带的断言insightface.__version__0.4为准。进一步阅读模型实现见 detection/scrfd 目录onnx 模型加载逻辑见 python-package/insightface/model_zoo。【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考