我想在车牌(城市名称)中实现对象检测。我有一张图片:
我想检测图像是否包含单词“بابل”:
我尝试过使用OpenCV的模板匹配方法,也使用MATLAB,但在使用其他图像测试时结果很差。
我也读过this page,但我无法很好地理解该怎么做。
任何人都可以帮我或一步一步地解决这个问题吗? 我有一个识别车牌的项目,我们可以识别并检测数字,但我需要检测并识别单词(这是与更多车辆相同的单词)
答案 0 :(得分:46)
您的问题非常广泛,但我会尽力在程序化背景下解释光学字符识别(OCR),并为您提供一般项目工作流程,然后是成功的OCR算法。
您面临的问题比大多数人更容易,因为您不必识别/区分不同的角色,而只需要识别单个图像(假设这是您唯一想要识别的城市)。但是,您受到任何图像识别算法(质量,光照,图像变化)的许多限制。
您需要做的事情:
1)图像隔离
您必须将图像与嘈杂的背景隔离开来:
我认为最好的隔离技术是首先隔离牌照,然后隔离您正在寻找的特定字符。在此步骤中要记住的重要事项:
任务的难度/实施在很大程度上取决于这三个问题的答案。
2)图像捕获/预处理
这是您特定实施的一个非常重要的步骤。虽然可能,但您的图片看起来不太可能如下:
因为你的相机必须直接在车牌前面。更有可能的是,您的图片可能看起来像其中之一:
取决于拍摄图像的视角。理想情况下,所有图像都将从相同的有利位置拍摄,您只需应用单个变换,使它们看起来相似(或根本不应用)。如果您从不同的有利位置拍摄照片,则需要来操作它们,否则您将比较两个不同的图像。此外,尤其是如果您只从一个有利位置拍摄图像并决定不进行变换,请确保您的算法所寻找的文本转换为来自相同的视点。如果不这样做,那么你将获得一个难以调试/计算出来的不太高的成功率。
3)图片优化
您可能希望(a)将图像转换为黑白图像,以及(b)降低图像的噪点。这两个过程分别称为二值化和去斑点。这些算法有许多实现可用于许多不同语言,大多数可通过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)
上述流程已多次实施,并以多种语言进行了详细记录。以下是您问题中标记的语言的一些实现。
答案 1 :(得分:13)
如果你问“我想检测图像是否包含单词”بابل“ - 这是使用http://code.opencv.org/projects/opencv/wiki/FaceDetection类似分类器解决的经典问题。
但我认为你还需要更多。多年前我试图解决simiar问题,并提供示例图像来显示它的好坏:
对于检测到的牌照,我使用了非常基本的矩形检测,它包含在每个OpenCV样本文件夹中。然后使用透视变换来修复布局和大小。重要的是要实施多项检查以确定矩形是否足以成为车牌。例如,如果矩形是500px高和2px宽,那么可能这不是我想要的并被拒绝。
使用https://code.google.com/p/cvblob/提取检测到的平板上的阿拉伯文字和其他成分。我昨天对其他项目也有类似的需求。我不得不从页面中提取日语汉字符号:
CvBlob为你做了很多工作。
下一步使用技术解释http://blog.damiles.com/2008/11/basic-ocr-in-opencv/来匹配城市名称。只需使用不同城市名称的示例图像教授算法,很快它就会告诉99%的人只是开箱即用。我在不同的项目中使用了类似的方法,并确信它们可以正常工作