Roger
Roger
我这个项目采用的思路比较传统,现在有比较好的end-to-end的模型,其识别公式鲁棒性和精确度更好,你可以看看TAP(CNN+RNN+Attention)这个模型。如果你只是想学习,在我开源的基础上进行改进,参考两方面的文章,一个是对字符之间的关系进行分类。第二个是结构分析,这个可以参考编译原理的语法分析方法(算符优先法,或者递归下降法),或者二维文法。
> @Roujack 请问二维文法的英文术语叫什么? 不太清楚二维文法的术语,我的意思是那种考虑空间关系的文法。我觉的,现在基于规则的方法效果可能没有连接主义的方法好。目前跟CNN+RNN+Attention不同的做法,可能通过Graph convolution network去做,不清楚mathematical expression recognition有没有相关文献,在表格识别就有,参考[Rethinking table recognition using graph neural networks](https://arxiv.org/abs/1905.13391)
myscript的确牛逼,据说是法国公司,他会收集每个国家的文字作为数据集。
> 个人感觉实现了OCR识别表达式之后就转化成了数学计算,而数学计算有matlab、wolfram alpha这些工具,如果能够调用他们的api(如果有的话),问题就转化成了OCR符号识别。 > > 另外一点,因为这个问题对识别结果要求很高,建议在识别的结果上加上可以人工修正识别结果的环节,ios上有一个app叫Mathkey,就是能够实现将图片转化为Latex格式的公式,而且可以人工修正;自动识别后只需要少量修改就能够不产生错误了。 > > 博主最后说的想法有点符号主义的感觉?有点难以理解。 > > 博主加油! 的确,识别是目前主要的挑战。人工修改环节在某些应用场景可以考虑,在另外的应用场景可能就不能人工修改。 关于后面的想法,我想表达的是,其实文字、语言以及图像目标对象只不过是人类创造的认识世界的标记。现在大部分工作是去把文字、语言、目标识别出来,下一步就要去像人一样去理解它(让机器与人共享同一个世界观)。
其实输入是有假设的,即假设单个字符一般是联通的(因此根号是一个连通体)。这样采用opencv的findContour就可以分割出来。等于号的处理是,先识别出两个横线,然后在词法分析的时候(把字符合并成一个最小单元),需要确定横线是分数线,减号,还是等于号。 如果这个假设不成立,你想要应用到更加通用的场景,字符之间可以连笔,单个字符可以多个笔划,不建议采用切割的方式,建议采用端到端的模型去做。
大概是这样做的。你看看词法分析器的知识。
一个可能的办法是检测每一个算术题+识别单一算术题去做。