OCR 算法改进
我正在创建一个基于Java的OCR。我的目标是从视频文件中提取文本(后期处理)。
这是一个困难的搜索,试图找到完全在Java上运行的免费开源OCR。我发现Tess4J是唯一流行的选择,但考虑到对本机界面的需求,我不知何故倾向于从头开始开发算法。
我需要创建一个可靠的OCR,以合理的精度正确识别英语字母(仅限计算机化字体,而不是手写文本),因为文本在视频帧中的区域是预先定义的。我们还可以假设给出了文本的颜色。
到目前为止,我所做的工作:
(所有图像处理都使用Java绑定完成openCV)
-
我提取了用于训练分类器的功能:
A. 像素强度,将字符图像下采样到 12 X 12 分辨率后。(144 个特征向量)
B. Gabor小波在8个不同角度(0,11.25,22.5 ...etc)以及使用所有这些角度的信号均方值计算的能量。(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. kNN 分类,适用于整个 152 个维度。
我的立场:
k-最近邻搜索被证明是比神经网络更好的分类器(到目前为止)。但是,即使使用kNN,我也发现很难对字母进行分类,例如: OR 。
此外,它被分类为Z...仅举几例异常。
我要找的:
我想找出以下几点:
为什么ANN表现不佳?我应该使用什么网络配置来推动更高的性能?我们能否对 ANN 进行微调,使其性能优于 kNN 搜索?
我还可以使用哪些其他特征向量来使 OCR 更加可靠?
欢迎提出任何其他性能优化建议。