第8次作业:手写数学式子识别
项目 |
内容
|
---|---|
这个作业属于哪个课程 | |
这个作业的要求在哪里 | |
我在这个课程的目标是 |
学会、理解和应用神经网络知识来完成一个app
|
这个作业在哪个具体方面帮助我实现目标 |
思考手写数学式子结构的分割
|
作业正文 | |
参考文献 |
一、作业内容
思考题 1:如何识别不合法(既非数字又非符号)的输入?
思考题 2:如何设计该计算器应用以识别下列元素:
A. 更多的符号,比如sin函数
B. 复杂的表达式结构(上下结构),比如指数\(e^x\) ,分数 $\frac{\pi}{2}$
C. 更复杂的表达式结构(包围结构),比如平方根 $\sqrt{a^2+b^2}$
二、正文
思考题1:在利用神经网络CNN识别字符时,最后一层网络将会给出这些符号属于哪一类特征的概率。当出现不合法的输入时,不合法的输入不会属于任何一个类,其或许会比较靠近某一类特征,但是其概率与合法的输入相比还是比较低的,通过设置合适的阈值,将有办法区别合法和非法的输入。除了设置合适的阈值以外,还可以通过比较非法输入的标准差Standard Deviation 来检测其是否属于合法的输入。
思考题2:手写识别数学公式的拓展
A:
- 在识别数字的模型中添加英文字母的识别, 识别出每一个输入的英文字母,之后进行组合(string),便能识别出该函数。
- 将sin()函数看成一个整体,通过与事先生成的sin()的模板进行匹配。
B:
- 对于复杂的上下结构,可以给字符的最小外接框定义参考线来测量符号之间的水平或垂直距离。参考线分别为:左(右)上边界、左(右)下边界、左(右)中心线。通过比较两个符号的参考线坐标(比如指数中的e的中心参考线与其幂次方的中心参考线是有一定的距离的),便可以分辨出该符号为上升型、居中型、下降型。
- 对于识别分式,在获取分子、分母和“-”的参考线坐标后,会发现它们三个的参考线坐标(垂直方向)是没有重合的(example: y方向的坐标:(4-9),(12-13),(16-20))。
C:
- 可以通过水滴算法/瀑布算法来检测连续的笔画,当笔画终止时,就能分割出根号。或者使用OpenCV中的轮廓检测/分水岭算法来检测根号的轮廓。在识别了根号之后,可以得知根号与根号下的数学式子的坐标,如果数学式子的x坐标完全包含于根号的x坐标时,则可以认为该数学式子为根号所包围的数学式子。