buffalo_l是insightface提供的预训练人脸模型包名,包含检测、识别、关键点等模块,与go语言buffalo框架无关;其核心能力包括scrfd检测、arcface识别及106点关键点定位。

Buffalo 框架里没有 buffalo_l 模型字段忽略机制
Buffalo 是 Go 语言的全栈 Web 框架,和 InsightFace 的 buffalo_l 模型完全无关。你看到的 buffalo_l 是 InsightFace 提供的一个预训练人脸模型包名,不是 Buffalo 框架的配置项或模块。两者只是名字巧合撞车,代码层面零关联。
InsightFace 的 buffalo_l 模型加载失败时如何跳过特定子模型
你遇到的报错 ‘FaceAnalysis’ object has no attribute ‘load_model’ 和日志里反复出现的 Applied providers: [‘CPUExecutionProvider’],说明你用的是较新版本 InsightFace(v0.7+),其 API 已重构:FaceAnalysis 不再有 load_model 方法,而是通过 model = get_model('buffalo_l') + model.prepare(ctx_id=0, det_size=(640, 640)) 初始化。
若想跳过某个子模型(比如不用 3D 关键点,只做人脸检测+属性),不要手动删 .onnx 文件,而应显式禁用组件:
- 初始化时传入
providers=['CPUExecutionProvider'],避免 CUDA 相关警告干扰 - 调用
get_model后,用model.models查看已加载子模型列表,例如:['detection', 'landmark_2d_106', 'genderage'] - 删除不需要的键:
del model.models['landmark_3d_68'](注意:必须在model.prepare()之后操作,否则会触发懒加载) - 后续调用
model.get(img)时,它就不会再跑被删掉的子模型
为什么直接删 models/buffalo_l/ 下的 .onnx 文件会出问题
InsightFace 在首次加载 buffalo_l 时,会根据固定命名规则(如 det_10g.onnx、genderage.onnx)自动匹配并加载全部组件。如果你手动删了 1k3d68.onnx,但代码仍尝试调用 model.get(img, max_num=0) 或内部逻辑隐式依赖 3D 关键点输出维度,就会 panic 或返回空结果。
Buffalo框架 1.0.1 版本源码包下载,适合需要错误处理改进、依赖更新、render.Download 注释和 request logger 调整的 v1 项目。
更稳妥的做法是保留文件,仅在运行时控制流程:
- 不调用
face.kps(2D 关键点)以外的face.landmark_3d字段 - 在批量处理前加判断:
if hasattr(face, 'landmark_3d') and face.landmark_3d is not None: - 若用 WebUI,可在配置中关闭对应分析开关(如 UI 界面里的 “3D Keypoints” 复选框)
Gin + GORM 场景下如何忽略数据库模型字段(别和 buffalo_l 混了)
如果你真在用 Buffalo 框架(Go)做 CMS,并想让某个 struct 字段不入库或不出 JSON,这才是 Buffalo/Gin 的事:
- 数据库忽略:在 struct tag 里加
gorm:"-",例如TempScore float64 `gorm:"-"` - JSON 输出忽略:用
json:"-"或json:"temp_score,omitempty" - 别写成
gorm:"ignore"—— GORM 没这个 tag,会静默失效 - Buffalo 框架本身不接管 ORM 行为,它只是路由和模板层,实际还是靠 GORM 控制字段映射
名字相似但领域隔离:InsightFace 的 buffalo_l 是模型标识符,Buffalo 框架是 Go Web 工具链。混淆这两者,是本地调试时最常卡住的起点。










