首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用智能手机摄像头识别字母

用智能手机摄像头识别字母
EN

Stack Overflow用户
提问于 2014-03-20 16:50:50
回答 3查看 9K关注 0票数 1

我将开发一个网络应用程序,可以识别使用智能手机摄像头文本。我在网络上看到了很多可以识别图片/流视频文本的解决方案,但所有这些解决方案都需要开发一个本地应用程序。我想通过创建一个小站点来识别文本,在这个站点中我可以做以下工作:

  1. 注册我自己
  2. 进入智能手机摄像头
  3. 识别镜头中的文字
  4. 显示在简单标签中识别的字母
  5. 将此信函保存在与我的帐户相关联的远程数据库中。

有谁知道一种不用拍照就能识别字母的方法,也不需要本地应用程序?我在网上找到了tesseract ocr,但我不确定是否可以在HTML5、CSS3和javascript页面中使用。有人用过这个图书馆吗?它在哪个移动浏览器中工作(Safari用于iOS,browser用于Android,用于Windows 7/8)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-20 16:57:05

你试过这个吗?这是一个Javascript库

OCRAD

票数 1
EN

Stack Overflow用户

发布于 2014-03-20 17:23:20

这是个相当棘手的问题。我以前试过一次,让它在一个相当基本的水平上工作。真正的困难在于使它成为多面手。

那里可能有一个库,所以也许这是你最好的方法。但是,在没有库的情况下,我认为最好的方法是(我只想概述一下)。

( 1)在某种意义上,你需要拍照。我确信有方法可以从相机中获取一个持续的输入,但是即使这样,您也不能将所有这些发送回您的服务器,所以您可能至少希望从中获取帧。

( 2)字母识别不需要颜色。设备端,我建议将图像转换为黑白,甚至是一个整数数组,其值表示图像中不同点的亮度。您可能想要限制亮度相对于图像亮度的总体差异。我的意思是,找到最亮的像素,那就是整数100,最暗的是整数0,所有其他数字1到99代表最大和最小之间不同的均匀间隔亮度。

3)现在,您有一些较小的图像要发送回和处理,所以把它发送到您的服务器!

4)好的,现在有个棘手的问题:我们需要处理这个图像。首先,我们需要把所有的字母分开。问题是字母和背景可能是任何颜色。图像中很容易出现其他对象。我们现在需要计算出图像中的哪些对象是字母,它们在哪里。我解决这个问题的方法是寻找图像中最主要的相似亮度成分。我的意思是,计算每个不同亮度阈值之间的像素数,很可能纸张是最主要的贡献,字母是第二个。不一定只是可能。

5)通过图像提取出每个物体。你可以去每个像素,如果这是你的代码认为字母是的颜色,检查所有相邻的像素,然后所有的相邻像素,直到你找不到类似颜色的边缘像素。这是封信。

6)因此,在这一点上,我们有了一组代表原始图像的数字,并且从图像中有多少相同亮度的物体覆盖了多少字母,我们对这些数字有一定的了解。接下来,我们将讨论对象的实际标识,但我建议使用与后面类似的技术,以确保您的代码所认为的字母实际上就是字母。本质上,您希望从每组更有可能是字母的对象中提取几个对象,然后在这些字母上尝试实际的单个字母识别算法。可以确定为字母的集合,因为算法将(应该)输出一个对象比任何其他字母更可能是一个特定的字母。

您可以做的另一个检查是每组对象的大小。字母都应该是相当一致的大小,或一对相当一致的大小。

对,所以我们有一组对象(希望附加了一些坐标,这样您就不会忘记这些对象是从哪里来的),它们可能是字母。我们怎么认识他们?进行“光学字符识别”的方法主要有两种。它们是:矩阵匹配和特征提取。特征提取涉及到寻找循环和线条以及字母的其他特征。这是很难编程,所以我们仍然与矩阵匹配。

依次取每个对象,并将其与表示字母表中每个字母的对象进行比较。您应该尝试对齐这两个图像,并拉伸/缩小以适应这两个图像(想想:如果相机是倾斜的,那么物体就不会匹配得太好。)如果相机离得更近,物体会变大),然后从另一个像素中减去一个像素中的所有像素。残值最少的字母很可能是正确的。很有可能。如果您必须处理非常不同的字体,这种技术就会失败。你可以比较所有的字体,但是这需要很大的计算能力。

你也可以为图像识别做一些花哨的特征向量分析,但我不完全确定这在这种情况下是否合适。

现在,取所有最有可能的字母,使用它们关联对象中的坐标来重建文本。

简而言之,这是非常棘手的。你最好使用一个已经建好的库,但即便如此,它也不会在很多时候是准确的。

抱歉,如果这不是你想要的答案。如果你读了这么多就谢谢了。我只是觉得这是个很有趣的问题。

票数 2
EN

Stack Overflow用户

发布于 2016-11-05 04:31:49

为了让刚刚遇到这个问题的用户受益,在GitHub上有一个JS端口Tesseract (在问题本身中提到的库):https://github.com/naptha/tesseract.js/:所以要回答这部分问题,是的,实际上,您可以在浏览器端项目中使用Tesseract!

也可用(通过同一个开发人员!)https://github.com/antimatter15/ocrad.js/ (在前面的答案中提到过)和https://github.com/antimatter15/gocr.js/ --这两种方法都可能对您的目的有用吗?但是要记住的是,在实际识别文本的能力方面,这两种方法都没有使用与Tesseract相近的功能。因此,您将牺牲一些(有时甚至是巨大的)质量,以换取更小的脚本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22539864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档