RetinafaceCurricularFace实战教程添加日志输出与比对结果JSON格式导出功能1. 引言为什么需要日志和JSON导出在实际的人脸识别项目部署中仅仅在终端输出相似度得分是远远不够的。想象一下这样的场景你需要批量处理上千张图片的比对任务或者需要将识别结果集成到其他系统中。这时候结构化的日志记录和标准化的数据导出就变得至关重要。本教程将手把手教你为RetinafaceCurricularFace人脸识别模型添加两大实用功能详细的日志输出系统记录完整的处理过程便于调试和监控JSON格式结果导出生成标准化的比对结果方便与其他系统集成无论你是刚接触人脸识别的新手还是需要将模型部署到生产环境的开发者这个教程都能帮你快速实现这些实用功能。2. 环境准备与代码分析2.1 确认当前环境首先确保你已经进入了正确的工作目录并激活了环境cd /root/Retinaface_CurricularFace conda activate torch252.2 理解原始代码结构在开始修改之前我们先分析一下原始的inference_face.py脚本。这个脚本主要完成以下工作加载RetinaFace人脸检测模型加载CurricularFace人脸识别模型对输入图片进行人脸检测和对齐提取人脸特征并计算相似度在终端输出最终结果我们的目标是在这个基础上添加日志记录和JSON导出功能而不影响原有的核心识别逻辑。3. 添加日志输出功能3.1 配置日志系统我们在脚本开头添加日志配置代码。创建一个新的Python文件或者在原有脚本中添加import logging import os from datetime import datetime # 创建日志目录 log_dir ./logs os.makedirs(log_dir, exist_okTrue) # 配置日志格式 log_format %(asctime)s - %(levelname)s - %(message)s logging.basicConfig( levellogging.INFO, formatlog_format, handlers[ logging.FileHandler(f{log_dir}/face_recognition_{datetime.now().strftime(%Y%m%d_%H%M%S)}.log), logging.StreamHandler() # 同时在终端输出 ] ) logger logging.getLogger(__name__)3.2 在关键步骤添加日志记录接下来我们在原始代码的关键处理步骤中添加日志记录# 在图片加载后添加 logger.info(f成功加载图片1: {args.input1}) logger.info(f成功加载图片2: {args.input2}) # 在人脸检测后添加 logger.info(f图片1检测到{len(faces1)}张人脸使用最大人脸进行处理) logger.info(f图片2检测到{len(faces2)}张人脸使用最大人脸进行处理) # 在特征提取后添加 logger.info(人脸特征提取完成开始计算相似度) # 在结果输出前添加 logger.info(f相似度计算完成: {similarity_score:.4f}) logger.info(f使用阈值: {args.threshold}, 判定结果: {同一人 if similarity_score args.threshold else 不同人})这样每次运行脚本时都会生成详细的日志文件记录完整的处理过程和时间戳。4. 实现JSON格式结果导出4.1 定义结果数据结构我们创建一个标准化的JSON输出格式import json from datetime import datetime def generate_result_json(input1_path, input2_path, similarity_score, threshold, is_same_person): 生成标准化的JSON结果 result { timestamp: datetime.now().isoformat(), input_images: { image1: input1_path, image2: input2_path }, comparison_result: { similarity_score: round(similarity_score, 4), threshold: threshold, is_same_person: is_same_person, verdict: 同一人 if is_same_person else 不同人 }, processing_info: { model: RetinaFaceCurricularFace, version: 1.0, processing_time: datetime.now().strftime(%Y-%m-%d %H:%M:%S) } } return result4.2 添加JSON导出功能在原始脚本的结果输出部分之后添加JSON导出代码# 生成JSON结果 result_data generate_result_json( args.input1, args.input2, similarity_score, args.threshold, similarity_score args.threshold ) # 保存JSON文件 output_dir ./results os.makedirs(output_dir, exist_okTrue) output_filename fcomparison_result_{datetime.now().strftime(%Y%m%d_%H%M%S)}.json output_path os.path.join(output_dir, output_filename) with open(output_path, w, encodingutf-8) as f: json.dump(result_data, f, ensure_asciiFalse, indent2) logger.info(f结果已保存至: {output_path})4.3 添加命令行参数支持为了让用户可以选择是否导出JSON我们添加一个命令行参数# 在ArgumentParser中添加新参数 parser.add_argument(--export-json, -ej, actionstore_true, help导出JSON格式结果文件)然后在JSON导出代码处添加条件判断if args.export_json: # 生成并保存JSON结果 result_data generate_result_json(...) # ...保存逻辑5. 完整代码整合与测试5.1 修改后的使用示例现在你可以这样使用增强后的脚本# 基本使用同时输出日志和JSON python inference_face_enhanced.py -i1 ./imgs/face1.jpg -i2 ./imgs/face2.jpg --export-json # 只输出日志不导出JSON python inference_face_enhanced.py -i1 ./imgs/face1.jpg -i2 ./imgs/face2.jpg # 使用网络图片并设置自定义阈值 python inference_face_enhanced.py -i1 https://example.com/face1.jpg -i2 https://example.com/face2.jpg -t 0.5 --export-json5.2 查看生成的文件运行完成后你可以在相应目录查看生成的文件# 查看日志文件 ls -la ./logs/ # 查看JSON结果文件 ls -la ./results/ # 查看最新的JSON结果 cat ./results/comparison_result_20231201_143022.json5.3 JSON输出示例生成的JSON文件内容类似这样{ timestamp: 2023-12-01T14:30:22.123456, input_images: { image1: ./imgs/face_recognition_1.png, image2: ./imgs/face_recognition_2.png }, comparison_result: { similarity_score: 0.7823, threshold: 0.4, is_same_person: true, verdict: 同一人 }, processing_info: { model: RetinaFaceCurricularFace, version: 1.0, processing_time: 2023-12-01 14:30:22 } }6. 实际应用场景6.1 批量处理自动化有了JSON输出功能你可以轻松编写批量处理脚本import subprocess import json import glob # 批量处理所有图片对 image_pairs [(img1_a.jpg, img1_b.jpg), (img2_a.jpg, img2_b.jpg)] for img1, img2 in image_pairs: result subprocess.run([ python, inference_face_enhanced.py, -i1, img1, -i2, img2, --export-json ], capture_outputTrue, textTrue) # 这里可以添加结果收集和分析逻辑6.2 系统集成JSON格式的结果可以轻松被其他系统调用和解析# 其他系统读取比对结果 with open(comparison_result_20231201_143022.json, r) as f: result json.load(f) if result[comparison_result][is_same_person]: print(身份验证通过) # 执行后续业务逻辑 else: print(身份验证失败) # 执行相应的处理流程6.3 监控与调试详细的日志记录让问题排查变得更容易# 查看错误日志 grep ERROR logs/face_recognition_20231201.log # 查看处理时间统计 grep 处理完成 logs/face_recognition_20231201.log # 查看特定图片的处理记录 grep face_recognition_1.png logs/face_recognition_20231201.log7. 总结与建议通过本教程你已经成功为RetinafaceCurricularFace人脸识别模型添加了两个实用功能日志输出功能让你能够完整记录每次识别的处理过程方便排查问题和优化性能监控系统的运行状态JSON导出功能让你能够标准化输出格式便于系统集成支持批量处理和自动化流程提供结构化的结果数据7.1 进一步优化建议如果你想要进一步扩展功能可以考虑数据库集成将结果直接保存到数据库中Web服务接口将脚本封装为REST API服务性能监控添加处理时间统计和性能指标结果可视化生成带有人脸标注和相似度分数的图片7.2 注意事项确保有足够的磁盘空间存储日志和JSON文件定期清理旧的日志文件避免占用过多空间在生产环境中建议使用更成熟的日志管理系统如Logrotate现在你已经拥有了一个功能更完善的人脸识别系统可以更好地满足实际项目需求了获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。