gpt4 book ai didi

java - 检测图像中的物体(单词)

转载 作者:IT老高 更新时间:2023-10-28 22:22:52 27 4
gpt4 key购买 nike

我想在车牌(城市名称)中实现对象检测。我有一张图片:

我想检测图像是否包含单词“بابل”:

我曾尝试使用通过OpenCV和MATLAB进行模板匹配的方法,但是在与其他图像进行测试时,效果却很差。

我也读过this page,但是我不能从中很好地理解该怎么做。

谁能帮助我或逐步解决这个问题?
我有一个识别车牌的项目,我们可以识别和识别数字,但是我需要识别和识别这些单词(更多汽车使用相同的单词)

最佳答案

您的问题非常广泛,但是我将尽力在程序化背景下解释光学字符识别(OCR),并为您提供常规的项目工作流程以及成功的OCR算法。

您所面对的问题比大多数问题都容易解决,因为您不必识别/区分不同的字符,而只需识别一张图像(假设这是您要识别的唯一城市)。但是,您会受到任何图像识别算法的许多限制(质量,照明,图像变化)。

您需要做的事情:

1)图像隔离

您必须将图像与嘈杂的背景隔离开:

我认为最好的隔离技术是首先隔离车牌,然后隔离您要查找的特定字符。在此步骤中要记住的重要事项:

  • 车牌是否总是出现在汽车上的同一位置?
  • 拍摄图像时,汽车是否始终位于同一位置?
  • 您要找的单词总是在车牌上的同一位置吗?

  • 任务的难度/执行很大程度上取决于对这三个问题的答案。

    2) 图像捕获/预处理

    对于您的特定实现,这是非常重要的一步。尽管可能,但是您的图像看起来不太可能像这样:

    因为您的相机必须直接在牌照前面。您的图像更有可能看起来像其中之一:



    取决于拍摄图像的角度。理想情况下,所有图像都将从同一有利位置拍摄,并且您只需应用一个变换就可以使它们看起来都相似(或完全不应用)。如果您从不同的角度拍摄照片,则需要对其进行操作,否则将比较两个不同的图像。另外,尤其是如果您仅从一个有利位置拍摄图像并决定不进行转换,请确保将算法要查找的文本转换为同一视角。如果不这样做,您将获得一个不太好的成功率,这很难调试/确定。

    3) 图像优化

    您可能需要(a)将图像转换为黑白,并且(b)降低图像的噪点。这两个过程分别称为二值化和去 Blob 。这些算法有许多不同语言的实现方式,大多数可通过Google搜索访问。您可以根据需要使用任何语言/免费工具对图像进行批处理,或者找到可以使用您决定使用的任何语言的实现。

    4) 模式识别

    如果您只想搜索这个城市的名称(曾经只有一个单词),那么您很可能想要实现矩阵匹配策略。许多人也将矩阵匹配称为模式识别,因此您可能在此之前已经听说过。这是一个 excellent paper,其中详细介绍了一种算法实现,如果您选择使用矩阵匹配,则应该会极大地帮助您。可用的另一种算法是特征提取,它试图根据字母内的图案(即环,曲线,直线)识别单词。如果车牌上单词的字体样式发生了变化,则可以使用此字体,但是如果始终使用相同的字体,我认为矩阵匹配将具有最佳效果。

    5) 算法训练

    根据您采用的方法(如果使用学习算法),可能需要使用标记的数据来训练算法。这意味着您拥有一系列被标识为 True(包含城市名称)或 False(没有)的图像。这是一个伪代码示例,说明其工作方式:
    train = [(img1, True), (img2, True), (img3, False), (img4, False)]

    img_recognizer = algorithm(train)

    然后,您应用训练有素的算法来识别未标记的图像。
    test_untagged = [img5, img6, img7]

    for image in test_untagged:
    img_recognizer(image)

    您的训练集应大于四个数据点;通常,越大越好。就像我之前说过的,只要确保所有图像都具有相同的变换即可。

    这是一个非常非常高级的代码流,可能有助于实现算法:
    img_in = capture_image()

    cropped_img = isolate(img_in)

    scaled_img = normalize_scale(cropped_img)

    img_desp = despeckle(scaled_img)

    img_final = binarize(img_desp)

    #train
    match() = train_match(training_set)

    boolCity = match(img_final)

    上面的过程已经实现了很多次,并以多种语言进行了详尽的记录。以下是在您的问题中标记的语言的一些实现。
  • Java
  • OpenCV中的
  • cvBlob(也请查看此tutorial和此blog post)
  • C++中的
  • tesseract-ocr
  • Matlab OCR

  • 祝好运!

    关于java - 检测图像中的物体(单词),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23028037/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com