Anomalib使用
Anomalib 是一个专注于视觉异常检测的开源库旨在为开发者、研究人员和工业用户提供一站式解决方案。无论是检测生产线上的产品缺陷、监控视频中的异常行为还是识别医疗影像中的病灶Anomalib 都能胜任。其设计理念是简单、模块化、高效通过直观的 API 和命令行接口CLI用户可以轻松训练模型、优化超参数并部署到边缘设备。一、trainfrom anomalib.data import MVTecAD from anomalib.models import Patchcore from anomalib.engine import Engine import os os.environ[HF_ENDPOINT] https://hf-mirror.com # 1. 准备数据 datamodule MVTecAD(root./mvtec, categorybottle) # 2. 定义模型 (例如 PatchCore) model Patchcore(backboneresnet18, pre_trainedTrue) # 3. 定义训练器 (Engine) engine Engine(max_epochs1, devices1) # 4. 训练与测试 engine.fit(modelmodel, datamoduledatamodule) results engine.test(modelmodel, datamoduledatamodule)二、inferencefrom pathlib import Path from anomalib.data import MVTecAD from anomalib.models import Patchcore from anomalib.engine import Engine import cv2 import numpy as np import os os.environ[HF_ENDPOINT] https://hf-mirror.com # 1. 准备数据 datamodule MVTecAD(root./mvtec, categorybottle) # 2. 定义模型 model Patchcore(backboneresnet18, pre_trainedTrue) # 4. 定义训练器 (将回调函数加入 Engine) engine Engine() # 5. 执行推理 # 注意predict 过程中visualizer_callback 会自动被调用 predictions engine.predict( datamoduledatamodule, modelmodel, ckpt_path./results/Patchcore/MVTecAD/bottle/v0/weights/lightning/model.ckpt, ) # 6. 终端打印输出保留你原有的逻辑 if predictions is not None: for batch in predictions: for i in range(len(batch[image_path])): # 1. 提取路径和原始预测数据 img_path batch[image_path][i] anomaly_map batch[anomaly_map][i].cpu().numpy().squeeze() # 2. 引入 pred_label 和 pred_score # 注意Anomalib 返回的 label 通常是 Tensor需要转为 Python 原生类型 label_idx batch[pred_label][i].item() score batch[pred_score][i].item() # 将 0/1 转换为易读的文字 label_text Anomaly if label_idx else Normal # 3. 处理热力图渲染 # 归一化到 0-255 并应用伪彩色 heatmap (anomaly_map * 255).astype(np.uint8) heatmap cv2.applyColorMap(heatmap, cv2.COLORMAP_JET) # 4. 构造更有意义的文件名 # 例如Anomaly_0.9850_img_01.png file_name Path(img_path).name save_filename f{label_text}_{score:.4f}_{file_name} save_path Path(./output_images) / save_filename os.makedirs(./output_images, exist_okTrue) # 5. 保存并打印 cv2.imwrite(str(save_path), heatmap) print(fResult: {label_text} (Score: {score:.4f}) | Saved: {save_path}) print(\n所有预测图片已处理完成)在终端改变一下环境变量能够加快运行export HF_ENDPOINThttps://hf-mirror.com三、exportfrom anomalib.engine import Engine from anomalib.models import Patchcore # 以 PatchCore 为例 from anomalib.deploy import ExportType # 1. 初始化模型和训练好的权重 model Patchcore() path ./results/Patchcore/MVTecAD/bottle/v0/weights/lightning/model.ckpt # 2. 初始化引擎 engine Engine() # 3. 导出模型 (可以选择 ExportType.ONNX 或 ExportType.OPENVINO) # 这会在你的项目目录下生成相应的模型文件如 .onnx 或 .xml/.bin exported_model_path engine.export( modelmodel, export_typeExportType.OPENVINO, # 推荐使用 OpenVINO 提高速度 ckpt_pathpath, export_rootdeploy_models/ ) print(f模型已成功导出至: {exported_model_path})pip install openvino nncfimport cv2 import os import glob from anomalib.deploy import OpenVINOInferencer from pathlib import Path # 1. 配置路径 # 输入图片文件夹路径请确保路径正确 input_folder mvtec/bottle/test/broken_large # 结果保存文件夹 output_root results/patchcore_predictions os.makedirs(output_root, exist_okTrue) # 2. 初始化推理器 inferencer OpenVINOInferencer( pathdeploy_models/weights/openvino/model.xml, deviceCPU ) # 3. 获取所有图片文件 (支持 jpg, png, jpeg) image_extensions (*.png, *.jpg, *.jpeg, *.JPG, *.PNG) image_files [] for ext in image_extensions: image_files.extend(glob.glob(os.path.join(input_folder, ext))) print(f共找到 {len(image_files)} 张图片开始处理...) # 4. 循环处理每一张图片 for img_path in image_files: # 读取图片 image cv2.imread(img_path) if image is None: print(f跳过损坏图片: {img_path}) continue # 执行推理 predictions inferencer.predict(imageimage) # 获取文件名不带路径用于保存 file_name os.path.basename(img_path) # 打印进度和得分 print(f处理中: {file_name} | 异常得分: {predictions.pred_score.item():.4f}) # --- 修正后的保存逻辑 --- if hasattr(predictions, anomaly_map): res_img predictions.anomaly_map # 1. 如果是 Tensor, 转为 Numpy if hasattr(res_img, detach): res_img res_img.detach().cpu().numpy() # 2. 核心修正去掉多余维度 (从 [1, 1, H, W] 变成 [H, W]) res_img res_img.squeeze() # 3. 归一化到 0-255 并转为 8位无符号整数 (这是 OpenCV imwrite 的标准要求) # 假设原本 score map 是 0 到 1 之间的浮点数 res_img (res_img * 255).astype(uint8) # 4. (可选) 应用伪彩色让热力图更好看 (红外检测常用) res_img cv2.applyColorMap(res_img, cv2.COLORMAP_JET) save_path os.path.join(output_root, fres_{file_name}) cv2.imwrite(save_path, res_img) print(f\n全部处理完成结果已保存至: {output_root})
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2449847.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!