【问题标题】:haar-cascade nothing come up with xml filehaar-cascade 没有拿出 xml 文件
【发布时间】:2017-11-24 02:26:54
【问题描述】:

我是学生,我正在尝试使用基本的手部识别创建我自己的第一个 haar-cascade(用于学习)。我收集了 510 个阳性样本和 1276 个阴性样本。我的训练一切正常(我想,我让你看到了终端窗口)。

唯一的事情是当我使用带有基本脚本的 xml 文件时(你会看到它之后),什么都没有出现。我用我的终端启动它,我没有错误。之后我的相机掉了几次!(但速度较慢)但没有出现任何窗口。如果我使用来自网络的其他 xml 文件,它可以工作......我不知道为什么......

有人可以帮助我吗?

Python 3.5 和 opencv 3.2

 Charless-MacBook-Pro:desktop charles$ opencv_traincascade -data data -vec Positive_image.vec -bg Negative_image.text -numPos 449 -numNeg 1276 -numStages 10 -w 50 -h 50 -featureType LBP
    PARAMETERS:
    cascadeDirName: data
    vecFileName: Positive_image.vec
    bgFileName: Negative_image.text
    numPos: 449
    numNeg: 1276
    numStages: 10
    precalcValBufSize[Mb] : 1024
    precalcIdxBufSize[Mb] : 1024
    acceptanceRatioBreakValue : -1
    stageType: BOOST
    featureType: LBP
    sampleWidth: 50
    sampleHeight: 50
    boostType: GAB
    minHitRate: 0.995
    maxFalseAlarmRate: 0.5
    weightTrimRate: 0.95
    maxDepth: 1
    maxWeakCount: 100

    ===== TRAINING 0-stage =====
    <BEGIN
    POS count : consumed   449 : 449
    NEG count : acceptanceRatio    1276 : 1
    Precalculation time: 18
    +----+---------+---------+
    |  N |    HR   |    FA   |
    +----+---------+---------+
    |   1|        1|        1|
    +----+---------+---------+
    |   2|        1|        1|
    +----+---------+---------+
    |   3|        1| 0.402821|
    +----+---------+---------+
    END>
    Training until now has taken 0 days 0 hours 1 minutes 31 seconds.

    ===== TRAINING 1-stage =====
    <BEGIN
    POS count : consumed   449 : 449
    NEG count : acceptanceRatio    1276 : 0.403542
    Precalculation time: 19
    +----+---------+---------+
    |  N |    HR   |    FA   |
    +----+---------+---------+
    |   1|        1|        1|
    +----+---------+---------+
    |   2|        1|        1|
    +----+---------+---------+
    |   3| 0.995546| 0.300157|
    +----+---------+---------+
    END>
    Training until now has taken 0 days 0 hours 3 minutes 14 seconds.

    ===== TRAINING 2-stage =====
    <BEGIN
    POS count : consumed   449 : 451
    NEG count : acceptanceRatio    1276 : 0.121674
    Precalculation time: 19
    +----+---------+---------+
    |  N |    HR   |    FA   |
    +----+---------+---------+
    |   1|        1|        1|
    +----+---------+---------+
    |   2|        1|        1|
    +----+---------+---------+
    |   3|        1| 0.413009|
    +----+---------+---------+
    END>
    Training until now has taken 0 days 0 hours 4 minutes 59 seconds.

    ===== TRAINING 3-stage =====
    <BEGIN
    POS count : consumed   449 : 451
    NEG count : acceptanceRatio    1276 : 0.0501789
    Precalculation time: 20
    +----+---------+---------+
    |  N |    HR   |    FA   |
    +----+---------+---------+
    |   1|        1|        1|
    +----+---------+---------+
    |   2|        1|        1|
    +----+---------+---------+
    |   3|        1|0.0783699|
    +----+---------+---------+
    END>
    Training until now has taken 0 days 0 hours 6 minutes 46 seconds.

    ===== TRAINING 4-stage =====
    <BEGIN
    POS count : consumed   449 : 451
    NEG count : acceptanceRatio    1276 : 0.00391926
    Precalculation time: 20
    +----+---------+---------+
    |  N |    HR   |    FA   |
    +----+---------+---------+
    |   1|        1|        0|
    +----+---------+---------+
    END>
    Training until now has taken 0 days 0 hours 8 minutes 44 seconds.

    ===== TRAINING 5-stage =====
    <BEGIN
    POS count : consumed   449 : 451
    Train dataset for temp stage can not be filled. Branch training terminated.

这是我使用 python 编写的基本脚本:

import numpy as np
import cv2

face_cascade = cv2.CascadeClassifier('/Users/charles/Desktop/closedFist.xml')

cap = cv2.VideoCapture(0)

while 1:
    ret, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)

    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]

    cv2.imshow('img',img)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()

编辑:

它有效。我收集了 2100 个正样本和 4500 个负样本。我的 xml 文件有 25 个阶段。我的错误是具有相同分辨率的负样本和正样本:50x50 像素。现在负样本的比例为 16:9。 160x90 像素。它有效!!!

【问题讨论】:

  • 哇,您的代码与我自己的级联文件完美配合。我怀疑 XML 文件有问题。你能检查 XML 文件的大小吗?另请注意,Training STAGE-5 已终止!您能否说明您在创建级联文件时遵循的步骤?
  • 我的级联文件只有 5KB。如果你想看的话,我已经关注了这个:link。我也花了很多时间阅读文档。 :)
  • 5KB 对于 50x50 像素图像的标准 10 级级联分类器文件来说非常小...尝试 2:1 比例,它应该在第 9 阶段正常结束(第 10 阶段开始时)与 0)。

标签: python xml opencv haar-classifier


【解决方案1】:

我有一些制作 HAAR 级联分类器的经验。在您的训练阶段,您提供的终端转储已TRAINING 5-stage 终止。所以训练阶段已经中止了。(你在代码中指定了10个训练阶段,但是第5个失败了,并且中止了整个训练过程......)

我怀疑您需要更多正样本来进行对象识别。负面文件太多了。我使用了 2:1 的正负样本比例。尝试不同的比例,但最好有更多的阳性样本。 (也取决于您的矢量文件创建选项!)

如果您能描述您是如何创建矢量文件并启动 train 命令的,那么 SO 社区可以为您提供更好的帮助。 :)


编辑:

我刚刚发现“无法填充临时阶段的训练数据集。分支训练终止”的“错误”消息意味着该算法已达到逻辑结束。这意味着使用给定的图像数据集无法使分类模型变得更好。所以使用 stage=5 因为 stage=6 会导致这个问题......希望它有所帮助!

【讨论】:

  • 谢谢!我会试试你的比例!这是我的矢量文件代码 opencv_createsamples -info Positive_image.info -num 510 -w 50 -h 50 -vec Positive_image.vec 。这是我为矢量文件所做的唯一事情。
  • 很遗憾我有同样的问题...我已经更新了帖子以显示我所做的!
猜你喜欢
  • 2014-02-16
  • 2017-01-19
  • 2011-01-01
  • 2014-01-31
  • 2013-12-16
  • 2013-03-21
  • 2020-04-03
  • 2019-12-12
  • 1970-01-01
相关资源
最近更新 更多