如何在 Python 中抑制 ITK 警告信息

4
每当我使用Python Medpy.io加载函数加载.img.gz文件时,都会收到警告消息,例如:
警告:在/usr/share/miniconda/envs/bld/conda-bld/simpleitk_1598369168428/work/build/ITK/Modules/IO/NIFTI/src/itkNiftiImageIO.cxx的第1009行中, NiftiImageIO(0x56268f287910):/data/temp.img.gz是分析文件,已被弃用。
有没有办法抑制警告消息? 我尝试使用导入日志记录库和设置logging.disable(sys.maxsize) & 导入警告和设置warnings.simplefilter("ignore", category=PendingDeprecationWarning)
但这两种方法都不起作用。
3个回答

2

ITK警告信息显示可以通过itk.ProcessObject.SetGlobalWarningDisplay进行全局切换。所以你想要

itk.ProcessObject.SetGlobalWarningDisplay(False)

请查看静态函数itk::Object::SetGlobalWarningDisplayC++文档在此处

1
这对我来说有效,我认为最明确地回答了楼主关于ITK的问题。 - undefined

1

你可能想在Github上查看如何在Python中禁用simpleitk.ReadImage的警告

你可以通过调用SetGlobalWarningDisplay来禁用SimpleITK的所有警告显示。

import SimpleITK as sitk
from medpy.io import load

sitk.ProcessObject_SetGlobalWarningDisplay(False)
image_data, image_header = load('path/to/image.nii.gz')
sitk.ProcessObject_SetGlobalWarningDisplay(True)

0
如果您不指定类别会怎么样?
我按照具体情况来处理,这样就不会影响整个Python文件。
import warnings

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    # do whatever after this
    

更新:这可能是C++方面的问题,而不是Python引起的警告。你需要深入研究C++来解决它。 https://github.com/InsightSoftwareConsortium/ITK/blob/34231b57021418fdb6afd4fcf5082a73b12969ed/Modules/IO/NIFTI/src/itkNiftiImageIO.cxx#L1009 然后查看 itkWarningMacro: https://itk.org/Doxygen318/html/itkMacro_8h.html#a0c47033c6ca9aae1319b1793f4419ada

我试图访问itkNiftiImageIO.cxx文件,但是找不到它。它显示miniconda文件夹不存在。 - undefined
抱歉,我之前说得不准确。如果你改变了C++源代码,那么你需要重新编译Python模块。但是你可能不应该这样做。我之前想说的是,你需要理解C++是如何记录日志的,itkWarningMacro的作用是什么,这样你才有机会用Python捕获它。你还可以查看NIFTI的GitHub页面来创建问题或寻找解决方案。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接