Has*_*ash 33 java ocr tesseract image-processing hough-transform
我正在尝试编写一个应用程序来查找图像中的数字并添加它们.
如何识别图像中的书写号码?
我需要在图像中有许多方框来获取左侧的数字并将它们相加以得出总数.我怎样才能做到这一点?
编辑:我在图像上做了一个java tesseract ocr,但我没有得到任何正确的结果.我怎么训练呢?
也
我做了边缘检测我得到了这个:

npi*_*nti 20
您很可能需要执行以下操作:
在整个页面上应用Hough变换算法,这应该产生一系列页面部分.
对于您获得的每个部分,请再次应用它.如果当前部分产生了2个元素,那么你应该处理一个类似于上面的矩形.
完成后,您可以使用OCR提取数值.
在这种情况下,我建议你看看JavaCV(OpenCV Java Wrapper),它应该允许你处理Hough变换部分.然后你需要类似于Tess4j(Tesseract Java Wrapper)的东西,它应该允许你提取你所追求的数字.
另外请注意,为了减少误报的数量,您可能需要执行以下操作:
如果您确定某些坐标永远不会包含您所追踪的数据,请裁剪图像.这应该会给你一个较小的图片.
将图像更改为灰度可能是明智的(假设您正在使用彩色图像).颜色会对OCR解析图像的能力产生负面影响.
编辑:根据你的评论,给出这样的东西:
+------------------------------+
| +---+---+ |
| | | | |
| +---+---+ |
| +---+---+ |
| | | | |
| +---+---+ |
| +---+---+ |
| | | | |
| +---+---+ |
| +---+---+ |
| | | | |
| +---+---+ |
+------------------------------+
Run Code Online (Sandbox Code Playgroud)
你会裁剪图像,以便你通过裁剪图像删除没有相关数据的区域(左边的部分),你会得到这样的东西:
+-------------+
|+---+---+ |
|| | | |
|+---+---+ |
|+---+---+ |
|| | | |
|+---+---+ |
|+---+---+ |
|| | | |
|+---+---+ |
|+---+---+ |
|| | | |
|+---+---+ |
+-------------+
Run Code Online (Sandbox Code Playgroud)
我们的想法是运行Hough变换,以便您可以获得包含矩形的页面片段,如下所示:
+---+---+
| | |
+---+---+
Run Code Online (Sandbox Code Playgroud)
然后,您将再次应用Hough变换,最后得到两个段,然后左侧一个.
一旦你有左段,你就会应用OCR.
您可以尝试手动应用OCR,但最好的情况是,OCR将识别两个数字值,无论是写入还是两种类型,从我得到的,不是你所追求的.
此外,描绘矩形的额外线条可能会使OCR偏离轨道,并使其产生不良结果.
bvd*_*vdb 10
我建议结合2个基本的神经网络组件:
一个感知器是一个非常简单的神经网络组件.它需要多个输入并产生1个输出.您需要通过输入和输出来训练它.这是一个自学习的组成部分.
在内部,它有一系列权重因子,用于计算输出.这些体重因素在训练期间是完善的.关于感知器的美妙之处在于,(经过适当的培训)它可以处理以前从未见过的数据.
您可以通过将感知器安排在多层网络中来使感知器更强大,这意味着一个感知器的输出充当另一个感知器的输入.
在您的情况下,您应该使用10个感知器网络,每个数值一个(0-9).
但是为了使用感知器,你需要一组数字输入.首先,您需要将视觉图像转换为数值.一个自组织映射(SOM)使用相互连接的网格点.这些点应该被吸引到图像的像素上(见下文)

这两个组件很好地协同工作.SOM具有固定数量的网格节点,您的感知器需要固定数量的输入.
这两个组件都非常受欢迎,并且可以在MATLAB等教育软件包中使用.
这个视频教程演示了如何使用Google的TensorFlow框架在python中完成它.(点击这里查看书面教程).
小智 8
神经网络是解决此类问题的典型方法.
在这种情况下,您可以将每个手写数字视为像素矩阵.如果您使用与要识别的图像大小相同的图像训练神经网络,则可能会获得更好的结果.
您可以使用不同的手写数字图像训练神经网络.一旦经过训练,如果您传递手写数字的图像进行识别,它将返回最相似的数字.
当然,训练图像的质量是获得良好结果的关键因素.
在大多数图像处理问题中,您希望尽可能多地利用信息.鉴于图像,我们可以做出假设(可能还有更多):
然后我们可以使用这些假设来简化问题:
但要点是使用任何可以将问题简化为更小,更简单的子问题的假设.然后看看有哪些工具可以单独解决每个子问题.
如果您不得不开始担心现实世界,如果要对它们进行扫描,您需要考虑"模板"或数字的倾斜或旋转,那么很难做出假设.
| 归档时间: |
|
| 查看次数: |
6233 次 |
| 最近记录: |