当前位置: 首页 > 知识库问答 >
问题:

检测图像中的对象(单词)

姚浩歌
2023-03-14

我想在车牌(城市名称)中实现目标检测。我有一个形象:

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

我尝试了使用OpenCV和MATLAB的模板匹配方法,但是在其他图像上测试的结果很差。

有谁能帮我或者给我一个逐步解决的方法吗?我有一个项目来识别车牌,我们可以识别和检测数字,但我需要检测和识别字(它是相同的字与更多的车)

共有1个答案

狄旭
2023-03-14

你的问题很宽泛,但我会尽我所能在编程的上下文中解释光学字符识别(OCR),并给你一个通用的项目工作流程,然后是成功的OCR算法。

你面临的问题比大多数人都容易,因为你不需要识别/区分不同的字符,而只需要识别单个图像(假设这是你想识别的唯一一个城市)。然而,您会受到任何图像识别算法的许多限制(质量、光照、图像变化)。

您需要做的事情:

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

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

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

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

2)图像捕获/预处理

这对于您的特定实现是非常重要的一步。虽然可能,但你的形象看起来像这样的可能性很小:

因为你的摄像头必须在车牌的正前方。更有可能的是,您的图像可能看起来像以下其中之一:

您可能需要(a)将图像转换为黑白图像和(b)降低图像的噪声。这两个过程分别称为二值化和去斑点化。这些算法有许多不同语言的实现,大多数可以通过Google搜索获得。如果需要,您可以使用任何语言/免费工具批处理您的图像,或者找到与您决定使用的任何语言一起工作的实现。

4)模式识别

如果您只想搜索这一个城市的名字(永远只有一个词),那么您很可能希望实现矩阵匹配策略。很多人也把矩阵匹配称为模式识别,所以你可能以前在这个上下文中听过。这里有一篇很好的文章详细介绍了一个算法实现,如果您选择使用矩阵匹配,它将对您有很大的帮助。另一个可用的算法是特征提取,它试图根据字母中的模式(即环路、曲线、线)来识别单词。如果车牌上的字的字体风格不断变化,你可能会使用这个,但如果一直使用相同的字体,我认为矩阵匹配会有最好的结果。

5)算法训练

根据您采用的方法(如果您使用学习算法),您可能需要使用标记的数据来训练您的算法。这意味着您有一系列图像,您已经将其标识为true(包含城市名称)或false(不包含)。下面是一个psuedocode示例,说明了它是如何工作的:

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)

上面的过程已经执行了很多次,并以多种语言进行了详细的文档记录。下面是一些在您的问题中标记的语言中的实现。

    null
 类似资料:
  • 我需要帮助来识别边界,并将图像与原始图像进行比较。我需要指导如何我可以实现这通过处理或matlab或任何初学者。例如,请看下面的图像。 原始图像:

  • 我正在为Waze开发开源JavaScript插件——著名的免费GPS导航器——专门为在线编辑器开发。这个用户脚本的想法是可以快速选择大的统一颜色的地图区域,将它们转换为地标。 到目前为止,我已经成功地在Photoshop这样的图形编辑器中实现了一个你称之为“魔杖”的工具:用户点击地图上的某个地方(比如,在湖泊或森林上),脚本选择相同颜色覆盖的整个区域,并为地标创建一个多边形。 一切都很好,除了我使

  • 问题内容: 我想用JAXB将我的pojo转换为json,我的pojo具有一对多的关系,当我将pojo转换为json时,JAXB会产生错误“在对象图中检测到一个循环。这将导致无限深的XML”。 我从网上读到,可以通过@XmlID和@XmlIDREF的帮助解决此问题,但是有一个问题,我的Id属性不是String类型,而是Long。据我所知,@ XmlID只能与String属性一起使用。 其他网站建议使

  • 我已经了解了如何使用PIL检测图像中的边缘(图像大部分是白色背景和黑色绘图标记)。如何检测包含这些边的矩形,以便裁剪图像。 例如,我想裁剪如下内容: 成: 或者这个: 成: 我熟悉PIL中的裁剪,但不知道如何围绕对象自动居中。 我已通过执行以下操作来检测边缘: 如何得到包含所有这些边的矩形?

  • 我想知道如何使用OpenCV在我的摄像机上检测图像。该图像可以是500个图像中的一个。 我此刻正在做的事: 我想要检测的图像是2-5KB小的。很少有人在上面发短信,但其他的只是一些迹象。这里有一个例子: 你们知道我怎么做吗?

  • 我有RestController终结点: 类B看起来与类A相似(但只包含字符串字段)。 前端客户机(React使用Axios)发送表单值(两个字符串、图像文件)。我使用javascript FormData对象将这些值发送到一个请求中,并且运行良好。 但我还想发送一个列表B对象。所以我尝试添加一个列表B对象到FormData并发送它。