我想在车牌(城市名称)中实现物体检测.我有一个形象:

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

我已经尝试使用模板匹配方法使用OpenCV和也使用MATLAB,但是当与其他图像进行测试时,结果很差.

我也读了this page,但是我不能很好地了解该怎么做.

任何人都可以帮我或者一步一步地解决这个问题吗?
我有一个项目来识别牌照,我们可以识别和检测数字,但是我需要检测和识别这些单词(与更多的汽车是一样的)

解决方法

您的问题非常广泛,但我将尽力在程序语境中解释光学字符识别(OCR),并为您提供一般的项目工作流程,然后是成功的OCR算法.

你面对的问题比大多数人更容易,因为不必识别/区分不同的角色,只需要识别一个图像(假设这是唯一想要识别的城市).然而,您受到任何图像识别算法(质量,照明,图像变化)的许多限制.

你需要做的事情

1)图像隔离

你必须隔离你的形象与嘈杂的背景:

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

车牌总是出现在汽车的同一个地方吗?
>图像拍摄时,汽车总是处于相同的位置吗?
你正在寻找的词总是在车牌上的同一个地方吗?

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

2)图像捕获/预处理

这是您特定实现的一个非常重要的步骤.尽管可能,您的图像极不可能如下所示:

因为您的相机必须直接在车牌前.更可能的是,您的图像可能如下所示:

取决于拍摄图像的透视图.理想情况下,您的所有图像都将从同一个有利位置获取,您只需应用一个变换,使它们看起来相似(或根本不应用).如果您从不同的有利位置拍摄照片,则需要操作它们,否则您将比较两个不同的图像.另外,特别是如果您只从一个有利位置拍摄图像,并决定不进行转换,请确保您的算法正在寻找的文本被转换为来自相同的视点.如果你不这样做,你将会有一个不太好的成功率,很难调试/弄清楚.

3)图像优化

您可能想(a)将您的图像转换为黑白和(b)减少图像的噪点.这两个过程分别称为二值化和去散布.这些算法有许多实现可用于许多不同的语言,大多数可通过Google搜索访问.您可以使用任何语言/免费工具批量处理您的图像,如果你想要的,或者找到一个适用于您决定工作的任何语言的实现.

4)模式识别

如果你只想搜索这个城市的名字(只有一个字),你很有可能要实现矩阵匹配策略.许多人也将矩阵匹配称为模式识别,因此您可能已经在此背景下听到过.这是一个excellent paper详细的算法实现,应该帮助你非常应该选择使用矩阵匹配.可用的其他算法是特征提取,其尝试基于字母(即循环,曲线,线)内的图案来识别单词.如果许可证上的字词的字体风格发生变化,您可能会使用这种方式,但如果始终使用相同的字体,我认为矩阵匹配将获得最佳效果.

5)算法训练

取决于您采取的方法(如果您使用学习算法),则可能需要使用标记的数据对算法进行训练.这意味着你有一系列的图像被识别为True(包含城市名称)或False(不).这是一个如此有效的伪代码示例:

train = [(img1,True),(img2,(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
> cvBlob在OpenCV(查看这tutorial和这blog post)
> tesseract-ocr在C
> Matlab OCR

祝你好运!

java – 检测图像中的对象(单词)的更多相关文章

  1. 用Swift实现MD5算法&引入第三方类库MBProgressHUD

    之前项目里面是用objc写的MD5加密算法,最近在用swift重写以前的项目,遇到了这个问题。顺带解决掉的还有如何引入第三方的类库,例如MBProgressHUD等一些特别好的控件解决的方法其实是用objc和swift混合编程的方法,利用Bridging-header文件。你可以简单的理解为在一个用swift语言开发的工程中,引入objective-c文件是需要做的一个串联文件,好比架设了一个桥,让swift中也可以调用objective-c的类库和frame等等。

  2. swift排序算法和数据结构

    vararrayNumber:[Int]=[2,4,216)">6,216)">7,216)">3,216)">8,216)">1]//冒泡排序funcmaopao->[Int]{forvari=0;i

  3. swift - 函数指针的应用 - 避免重复算法

    =nil;})}privatefuncsearch(selector:(Employee->Bool))->[Employee]{varresults=[Employee]();foreinemployees{if(selector(e)){results.append(e);}}returnresults;}}

  4. 如何用 Swift 实现 A* 寻路算法

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. swift算法实践1

    在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,所以,这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法。逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出。如果,该字符优先关系高于此运算符栈顶的运算符,则将该运算符入栈。倘若不是的话,则将栈顶的运算符从栈中弹出,直到栈顶运算符的优先级低于当前运算符,将该字符入栈。

  6. swift算法实践2

    字符串hash算法Time33在效率和随机性两方面上俱佳。对于一个Hash函数,评价其优劣的标准应为随机性,即对任意一组标本,进入Hash表每一个单元之概率的平均程度,因为这个概率越平均,数据在表中的分布就越平均,表的空间利用率就越高。Times33的算法很简单,就是不断的乘33,见下面算法原型。

  7. swift算法实践3)-KMP算法字符串匹配

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  8. swift算法实践4)-trie自动机

    1、trie自动机是识别字符串的确定性有向无环自动机2、图示3、构造代码F包括了状态q所对应的P中的字符串

  9. Swift 算法实战之路一

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  10. Swift 算法实战之路二

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部