Retinaface+CurricularFace实战教程:添加WebUI界面(Gradio)实现可视化比对
1. 引言:为什么需要可视化界面?
想象一下这样的场景:你正在测试一个人脸识别系统,每次都要打开终端、输入命令、等待结果,然后还要手动查看图片和相似度分数。这个过程不仅繁琐,而且不够直观。特别是当你需要快速对比多组人脸图片时,命令行方式显得效率低下。
这就是为什么我们需要为Retinaface+CurricularFace人脸识别模型添加一个WebUI界面。通过Gradio这个简单易用的框架,我们可以快速构建一个可视化的人脸比对工具,让你能够:
- 直接上传图片或输入网络图片URL
- 实时查看人脸检测和比对结果
- 直观调整判定阈值
- 一键获取相似度分数和判定结论
本教程将手把手教你如何为现有的人脸识别模型添加WebUI界面,让技术演示和日常使用变得更加简单高效。
2. 环境准备与Gradio安装
2.1 激活基础环境
首先确保你已经按照基础教程进入了工作目录并激活了conda环境:
cd /root/Retinaface_CurricularFace conda activate torch252.2 安装Gradio库
Gradio是一个专门为机器学习模型快速构建界面的Python库,安装非常简单:
pip install gradio安装完成后,你可以验证一下版本:
python -c "import gradio; print(f'Gradio版本: {gradio.__version__}')"正常情况下会输出类似Gradio版本: 4.24.0的信息。
3. 创建WebUI界面代码
3.1 编写Gradio应用脚本
在工作目录下创建一个新的Python文件webui_face.py:
import gradio as gr import cv2 import numpy as np from inference_face import compare_faces def visualize_face_comparison(input1, input2, threshold=0.4): """ 人脸比对可视化函数 """ try: # 调用原始推理函数 score, result, img1_with_face, img2_with_face = compare_faces( input1, input2, threshold, return_images=True ) # 准备输出信息 output_text = f"相似度得分: {score:.4f}\n判定结果: {result}" return img1_with_face, img2_with_face, output_text except Exception as e: return None, None, f"处理出错: {str(e)}" # 创建Gradio界面 with gr.Blocks(title="人脸识别比对系统") as demo: gr.Markdown("# 🎭 Retinaface+CurricularFace 人脸识别系统") gr.Markdown("上传两张人脸图片或输入网络图片URL进行相似度比对") with gr.Row(): with gr.Column(): input1 = gr.Image(label="第一张图片", type="filepath") input1_url = gr.Textbox(label="或输入图片URL", placeholder="https://example.com/image1.jpg") with gr.Column(): input2 = gr.Image(label="第二张图片", type="filepath") input2_url = gr.Textbox(label="或输入图片URL", placeholder="https://example.com/image2.jpg") threshold = gr.Slider(minimum=0.0, maximum=1.0, value=0.4, label="判定阈值", step=0.05, info="分数高于此值判定为同一人") submit_btn = gr.Button("开始比对", variant="primary") with gr.Row(): output1 = gr.Image(label="检测到的人脸1", interactive=False) output2 = gr.Image(label="检测到的人脸2", interactive=False) output_text = gr.Textbox(label="比对结果", interactive=False) # 处理URL输入 def process_urls(input1_url, input2_url, threshold): if input1_url and input2_url: return visualize_face_comparison(input1_url, input2_url, threshold) return None, None, "请提供有效的图片URL" # 绑定事件 submit_btn.click( fn=visualize_face_comparison, inputs=[input1, input2, threshold], outputs=[output1, output2, output_text] ) # URL提交按钮 url_submit_btn = gr.Button("使用URL比对") url_submit_btn.click( fn=process_urls, inputs=[input1_url, input2_url, threshold], outputs=[output1, output2, output_text] ) if __name__ == "__main__": demo.launch(server_name="0.0.0.0", server_port=7860, share=False)3.2 修改原始推理脚本
为了让Gradio界面能够正常工作,我们需要稍微修改原始的inference_face.py脚本,添加图像返回功能:
# 在原始脚本中添加以下函数 def compare_faces(input1, input2, threshold=0.4, return_images=False): """ 增强版人脸比对函数,支持返回带检测框的图像 """ # 这里是原始的人脸比对逻辑 # 为了简洁,省略具体实现细节 if return_images: # 绘制人脸检测框(实际实现需要根据你的代码调整) img1_with_face = draw_face_boxes(input1, faces1) img2_with_face = draw_face_boxes(input2, faces2) return score, result, img1_with_face, img2_with_face else: return score, result def draw_face_boxes(image_path, faces): """ 在图像上绘制人脸检测框 """ img = cv2.imread(image_path) for face in faces: x1, y1, x2, y2 = face['bbox'] cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2) return img4. 启动WebUI界面
4.1 运行Gradio应用
现在你可以启动WebUI界面了:
python webui_face.py你会看到类似这样的输出:
Running on local URL: http://0.0.0.0:78604.2 访问Web界面
打开你的浏览器,访问http://你的服务器IP:7860,就能看到美观的人脸比对界面了。
5. 界面功能详解
5.1 主要功能区域
我们的WebUI界面包含以下几个主要部分:
- 图片输入区域:可以上传本地图片或输入网络图片URL
- 阈值调节滑块:实时调整判定阈值(0.0-1.0)
- 结果显示区域:显示带人脸框的图片和比对结果
- 操作按钮:开始比对和使用URL比对
5.2 使用示例
示例1:上传本地图片比对
- 点击"第一张图片"上传按钮,选择本地人脸图片
- 点击"第二张图片"上传按钮,选择另一张图片
- 调整阈值滑块(默认0.4)
- 点击"开始比对"按钮
- 查看右侧的检测结果和相似度分数
示例2:使用网络图片比对
- 在第一张图片URL输入框中粘贴网络图片地址
- 在第二张图片URL输入框中粘贴另一个网络图片地址
- 点击"使用URL比对"按钮
- 查看比对结果
6. 高级功能与自定义
6.1 添加批量处理功能
如果你需要批量比对多组图片,可以扩展界面:
# 在webui_face.py中添加批量处理选项卡 with gr.Tab("批量比对"): gr.Markdown("## 批量人脸图片比对") file_count = gr.Slider(1, 10, value=3, label="比对组数") batch_output = gr.Dataframe(label="批量比对结果") def batch_compare(file_count): # 实现批量比对逻辑 results = [] for i in range(file_count): # 模拟比对结果 results.append([f"图片{i}_1", f"图片{i}_2", 0.75, "同一人"]) return results batch_btn = gr.Button("开始批量比对") batch_btn.click(batch_compare, file_count, batch_output)6.2 添加历史记录功能
保存比对历史方便后续查看:
# 添加历史记录功能 import json import datetime def save_history(input1, input2, score, result): history_entry = { "timestamp": datetime.datetime.now().isoformat(), "input1": input1, "input2": input2, "score": float(score), "result": result } # 保存到文件 with open("comparison_history.json", "a") as f: f.write(json.dumps(history_entry) + "\n") return "记录已保存" # 在比对函数中添加历史记录 def visualize_face_comparison(input1, input2, threshold=0.4): # ...原有代码... save_history(input1, input2, score, result) # ...原有代码...7. 常见问题解决
7.1 端口被占用问题
如果7860端口已被占用,可以指定其他端口:
python webui_face.py --server-port 78617.2 图片加载失败
如果网络图片无法加载,检查:
- URL地址是否正确
- 图片是否支持直接访问
- 网络连接是否正常
7.3 人脸检测失败
如果某张图片中没有人脸或人脸太小,界面会显示错误信息。建议:
- 使用清晰的正脸图片
- 确保人脸在图片中足够大
- 避免过度遮挡或极端光线
8. 总结
通过本教程,你已经成功为Retinaface+CurricularFace人脸识别模型添加了一个功能完整的WebUI界面。现在你可以:
- ✅ 通过可视化界面轻松进行人脸比对
- ✅ 实时调整判定阈值观察效果变化
- ✅ 同时支持本地图片和网络图片
- ✅ 直观查看人脸检测和比对结果
这个WebUI界面不仅大大提升了用户体验,还让技术演示和日常测试变得更加便捷。你可以在此基础上继续扩展功能,比如添加批量处理、历史记录、结果导出等特性,让这个工具更加强大实用。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。