检查 python cv2 中分类器对象的类型?

check type of classifier object in python cv2?

如何检查 openCV 2 中是否有 cv2.CascadeClassifier 对象?
Atm,如果我 运行 它的路径错误,它不会让我知道并且会给我无效的结果。所以我想要这张支票,但不知道正确的 call/syntax.

输入: cascadePath = "correctPath.xml"

# load the trained cascade
print("loading classifier...")
trainedCascade = cv2.CascadeClassifier(cascadePath)

试一试:

if type(trainedCascade) is not 'cv2.CascadeClassifier':
        print(type(trainedCascade))
        raise Exception("no classifier found at this path")

结果 1:

<type 'cv2.CascadeClassifier'>
Exception: no classifier found at this path

尝试2:

if not isinstance(trainedCascade, type(cv2.CascadeClassifier)):
    raise Exception("no classifier found at this path")

结果 2: Exception: no classifier found at this path

尝试3 empty() method:

  if cv2.CascadeClassifier.empty():
        print("trained cascade is empty!")

结果 3:

AttributeError: 'builtin_function_or_method' object has no attribute 'empty'

你快完成了:

if not isinstance(trainedCascade, cv2.CascadeClassifier):

更新: 如果你得到 TypeError: isinstance() arg 2 must be a class..,这意味着 cv2.CascadeClassifier 不是 class,但可能是某种工厂函数.根据它的不透明程度,您可能无法检查返回的类型。你可以试试:

if trainedCascade.empty():

我遇到了同样的问题。正如@thebjorn 所说,您可以使用

if isinstance(object, class):

如果您收到错误 TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types,您可以尝试:

if isinstance(trainedCascade, type(cv2.CascadeClassifier())):

这样你就可以构造一个所需类型的对象,然后将它与你的目标对象进行检查。