【问题标题】:Using haarcascade to detect licence plates with OpenCV and Python使用 haarcascade 通过 OpenCV 和 Python 检测车牌
【发布时间】:2020-03-01 18:13:53
【问题描述】:

我正在编写一个代码,它可以在 opencvPython 的帮助下识别汽车上的车牌。为此,我使用 haarcascades。我从这里下载了 haarcascades(如果你有更好的来源,请告诉我):

https://github.com/opencv/opencv/tree/master/data/haarcascades

这是图片:

当我使用第一个 haarcascade 时,它​​只检测到右车上的车牌*(两次),但它不识别白车上的车牌。

当我工作第二个 haarcascade 时,它​​给了我一个错误,我不知道它是什么意思以及如何解决它,这是错误:

cascadedetect.cpp:567: error: (-2:Unspecified error) in function 'bool __thiscall cv::HaarEvaluator::Feature::read(const class cv::FileNode &,const class cv::Size_<int> &)'
> Invalid HAAR feature (expected: 'rw.r.x < W'), where
>     'rw.r.x' is 32
> must be less than
>     'W' is 16


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\nenad\OneDrive\Desktop\open cv slika\Tablice\tablica.py", line 14, in <module>
    plates_cascade = cv2.CascadeClassifier('haarcascade_licence_plate_rus_16stages.xml')
SystemError: <class 'cv2.CascadeClassifier'> returned a result with an error set

我不认为问题是因为这些 haar 级联有俄罗斯车牌,我在网上看过所有俄罗斯车牌,俄罗斯车牌看起来与其他车牌相似。 这是我写的代码:

# Standard imports

import cv2
import numpy as np

# Read image
img = cv2.imread("slika2.jpg", 1)
gray = cv2.cvtColor(img, 0)
cv2.imshow('img', gray)
cv2.waitKey(0)

#read haarcascade
#plates_cascade = cv2.CascadeClassifier('haarcascade_russian_plate_number.xml') #does not give me error, but result is not correct
plates_cascade = cv2.CascadeClassifier('haarcascade_licence_plate_rus_16stages.xml') #gives me error

plates = plates_cascade.detectMultiScale(gray, 1.2, 4)


for (x,y,w,h) in plates:

    #detect plate with rectangle
    #rec. start point (x,y), rec. end point (x+w, y+h), blue color(255,0,0), line width 1

    plates_rec = cv2.rectangle(img, (x,y), (x+w, y+h), (0,255,0), 1)        
    #cv2.putText(plates_rec, 'Text', (x, y-3), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1)

    gray_plates = gray[y:y+h, x:x+w]
    color_plates = img[y:y+h, x:x+w]

    #cv2.imshow('img', gray_plates)
    #cv2.waitKey(0)

    height, width, chanel = gray_plates.shape
    print(height, width)

cv2.imshow('img', img)
cv2.waitKey(0)
print('Number of detected licence plates:', len(plates))

有什么建议可以改进我的代码并解决这个问题吗? 另外,如果您能告诉我如何创建自己的 haar 级联,我已经查看了整个网络,但找不到任何可行的解决方案。

【问题讨论】:

  • 该数据集用于检测 russian 注册板。你知道这些是否已知(准确地)与非俄罗斯登记牌一起工作?我认为假设他们会这样做是不明确/安全的。
  • 我不知道为什么不起作用,它们看起来和其他人一样。你知道我在哪里可以下载其他板块的 haarcascade 吗?有欧洲的、美国的还是合并的?
  • 训练自己的
  • 你能告诉我怎么做吗?
  • @Micka 你能告诉我如何训练/制作我自己的 haar 级联吗?

标签: python opencv computer-vision


【解决方案1】:

尝试安装不同版本的 OpenCV,然后运行它。 3.4.4 版对我有用。

【讨论】:

    【解决方案2】:

    尝试从创建此文件的来源下载(不要将其复制并粘贴到新创建的文件中)XML 文件。然后放到你原来的python文件所在的目录下。

    例如当我使用 frontalEyes.xml 时,它会给出以下错误

    Invalid HAAR feature (expected: 'rw.r.x + rw.r.width <= W'), where 
    >     'rw.r.x + rw.r.width' is 22
    > must be less than or equal to
    >     'W' is 16
    

    当我打开这个 xml 文件时,我得到了原始文件的链接,就像在这种情况下我得到了http://www-personal.umich.edu/~shameem/haarcascade_eye.xml,然后我下载了这个文件并将它放在主项目目录中。

    现在它可以正常工作了。

    【讨论】:

      【解决方案3】:

      发生错误是因为在 *.xml 权重文件的开​​头,指定了大小。类似的东西,(在非注释行的开头)

      <size> H W </size>
      

      现在,如果您阅读了错误,那么现在该做什么相当直观,只需将 W 的值(对于您的情况,因为您的宽度有错误)更改为 32 或更高,(我不是真的如果您随机设置高值,请注意影响,性能明智,但它肯定不会给出任何错误,因此最好保持低至 32)。 这是一个快速破解,虽然它没有解释为什么在创建 *.xml 文件期间会发生这种大小差异

      【讨论】:

        【解决方案4】:

        你需要替换这一行: plates_cascade = cv2.CascadeClassifier('haarcascade_licence_plate_rus_16stages.xml') 有了这个: plat_detector = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_russian_plate_number.xml")

        【讨论】:

          【解决方案5】:

          转到 haar casecade .xml 文件并更改大小的值。

          <size> H W </size>
          

          【讨论】:

            【解决方案6】:

            仅将opencv version 更改为任何旧版本。它会起作用的。

            【讨论】:

            • 你怎么能在不知道 OP 使用什么版本的情况下提供这样的答案?您是否使用某些 opencv 版本复制了 OP 的代码并得到了正确的结果?如果是,请提供证据。
            猜你喜欢
            • 1970-01-01
            • 2016-04-29
            • 2023-04-11
            • 1970-01-01
            • 2013-01-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多