【发布时间】:2014-07-15 07:20:49
【问题描述】:
我正在创建一个基于 Java 的 OCR。我的目标是从视频文件中提取文本(后处理)。
这是一个艰难的搜索,试图找到完全适用于 Java 的免费、开源 OCR。我发现 Tess4J 是唯一流行的选项,但鉴于对本机界面的需求,我不知何故倾向于从头开始开发算法。
鉴于文本在视频帧中所在的区域是预先定义的,我需要创建一个可靠的 OCR,以合理的准确度正确识别英文字母(仅限计算机字体,而不是手写文本)。我们也可以假设文本的颜色是给定的。
到目前为止我做了什么:
(所有图像处理都使用 Java 绑定为 openCV 完成)
-
我提取了用于训练分类器的特征:
A.将字符图像下采样到 12 X 12 分辨率后的像素强度。 (144 个特征向量)
B. Gabor 小波变换跨越 8 个不同的角度(0、11.25、22.5 ...等),并使用所有这些角度的信号均方值计算能量。 (8个特征向量)
A+B 给了我图像的特征向量。 (共152个特征向量)
我有 62 个分类类,即。 0,1,2...9 | a,b,c,d...y,z | A,B,C,D...Y,Z
我使用 20 x 62 个样本(每个类 20 个)训练分类器。
-
对于分类,我使用了以下两种方法:
A.具有 1 个隐藏层(120 个节点)的 ANN。输入层有 152 个节点,输出有 62 个节点。隐藏层和输出层有 sigmoid 激活函数,网络使用弹性反向传播进行训练。
B.对整个 152 个维度进行 kNN 分类。
我的立场:
k-最近邻搜索被证明是比神经网络更好的分类器(到目前为止)。但是,即使使用 kNN,我也很难对以下字母进行分类: 或 。
此外,它将 归类为 Z... 仅举几例异常情况。
我在寻找什么:
我想了解以下内容:
为什么 ANN 表现不佳?我应该使用什么网络配置来提高性能?我们能否对 ANN 进行微调,使其性能优于 kNN 搜索?
我可以使用哪些其他特征向量来使 OCR 更加健壮?
欢迎任何其他性能优化建议。
【问题讨论】:
-
神经网络的性能应该优于 KNN 搜索,而且不会出汗!我可以推荐使用 R,一个常用的统计软件来找出哪些算法适用于你的数据集,然后才开始专注于你的实现。现在几乎不可能判断问题出在您的实施、训练数据还是决策者中。
-
好的。我应该使用什么类型的 ANN 来获得我的目标 (OCR) 的最佳结果?我已经使用 OpenCV 和 Encog 框架交叉检查了我的 ANN 实现,这两个 API 似乎都产生了相似的结果。因此,它归结为 1)我的 ANN 配置是次优的(这是我认为的)或 2)我用来训练 ANN 的特征向量不符合标准。请给我一个想法,我应该关注哪里?
-
可能是您的结果过拟合或欠拟合。您是否知道是否有某些字母失败了,或者是整个数据集表现不佳?
-
您是否在 NN 中使用任何卷积层?
标签: java opencv ocr knn neural-network