Java OCR算法改进
我正在创建一个基于Java的OCR。我的目标是从视频文件中提取文本(后处理) 这是一个艰难的搜索,试图找到纯粹在Java上工作的免费开源OCR。我发现Tess4J是唯一流行的选项,但考虑到对本机接口的需要,我不知何故倾向于从头开始开发算法 我需要创建一个可靠的OCR,能够以合理的精度正确识别英文字母(仅计算机化字体,而非手写文本),因为视频帧中的文本区域是预定义的。我们也可以假设文本的颜色是给定的 到目前为止我所做的: (使用openCV的Java绑定完成所有图像处理)Java OCR算法改进,java,opencv,ocr,knn,neural-network,Java,Opencv,Ocr,Knn,Neural Network,我正在创建一个基于Java的OCR。我的目标是从视频文件中提取文本(后处理) 这是一个艰难的搜索,试图找到纯粹在Java上工作的免费开源OCR。我发现Tess4J是唯一流行的选项,但考虑到对本机接口的需要,我不知何故倾向于从头开始开发算法 我需要创建一个可靠的OCR,能够以合理的精度正确识别英文字母(仅计算机化字体,而非手写文本),因为视频帧中的文本区域是预定义的。我们也可以假设文本的颜色是给定的 到目前为止我所做的: (使用openCV的Java绑定完成所有图像处理) 我提取了用于训练分类器的
欢迎对性能优化提出任何其他建议。对于特征向量:您是否规范化了强度?也许可以使用直方图均衡化
分类:看一看。这是一种将高维特征简化为更容易聚类的二维平面的随机方法。kNN算法与神经网络不同,不需要太多调整,因此可以轻松获得良好的性能,但多层感知器的性能可能优于kNN。目前,我认为使用深度学习可以达到最佳效果,您应该以卷积神经网络为例 来自维基百科: 一个CNN由一个或多个完全相同的卷积层组成 连接层(与典型人工神经网络中的层匹配) 网络)在顶部。它还使用绑定权重和池层。这 体系结构允许CNN利用 输入数据。与其他深层架构相比,卷积 神经网络在这两方面都开始显示出优越的效果 和语音应用。他们还可以接受标准培训 反向传播。CNN比其他常规、深度、, 前馈神经网络,并且具有更少的参数 评估,使其成为一个极具吸引力的体系结构 说到MLP,有很多算法可以搜索更好的参数,例如网格搜索或群优化。我喜欢使用遗传算法来调整神经网络的参数,它非常简单,并产生良好的性能 我推荐您,一个很好的java遗传算法框架,可以开箱即用:) 以下是JGAP对遗传算法的介绍,它比我的任何介绍都要好: 遗传算法(GA)是通过 自然选择的过程。他们从一组样本开始 潜在的解决方案,然后朝着一组更优化的方向发展 解决。在样本集中,较差的解决方案往往会消亡 当更好的解决方案匹配并传播其优势时 特性,从而在集合中引入更多的解决方案 更大的潜力(集合总大小保持不变;对于每个新的 添加解决方案后,将删除旧的解决方案)。一点随机变异会有所帮助 确保一个集合不会停滞,只需填满大量 相同解决方案的副本 一般来说,遗传算法往往比传统算法工作得更好 优化算法,因为它们不太可能被引入歧途 通过局部最优。这是因为他们没有利用单点 从解决方案中的单个实例移动的转换规则 空间到另一个。相反,GA利用了一整套 解决方案遍布整个解决方案空间,所有这些都是 对许多潜在的优化进行实验 然而,为了使遗传算法有效地工作,有几个 必须满足以下标准: 评估潜在解决方案的“好”程度必须相对容易 是相对于其他潜在的解决方案 必须能够将潜在的解决方案分解为离散的部分 这可以独立变化。这些部分成为大脑中的“基因” 遗传算法 最后,遗传算法最适合于 “好”的答案就足够了,即使它不是绝对最好的答案
神经网络应该比KNN搜索更出色,而且不会出一身冷汗