[转]阅读tesseract-OCR(3.01)程序源码的一点心得体会

原文地址:http://blog.renren.com/share/32364603/13432350985

阅读tesseract-OCR3.01)程序源码的一点心得体会

一、基本情况

时间:5月25日-6月15日(共3周)

源码大小:413M

所含文件数:1418

项目所含工程数:20

源码行数:不知道该如何统计,反正挺大了,呵呵。

源码实现功能:从识别图片中文字信息并输出相应的TXT文件。对特定字体进行训练。

阅读完成情况:只阅读了文字识别的主要流程,没有阅读“特定字体训练”的部分。

二、心得体会

1、  直观可视化

尽量将代码中变量信息跟实际的图片信息相对应,比如知道某个数据表示的是图像上哪个像素位置的坐标,那么一定要在图片中直观的将其标注出来(用特殊颜色的点),这样有助于深入理解该数据的具体含义,因为我们面对数据的时候是没有直观感受的,但是一旦在图片中标注出来,就可以很感性的认识到,“哦,程序是以行或字为单位进行识别的”或者“这个数据代表了8联通区域的对角线信息”“for循环中是按从下向上的顺序来操作的”,我总结这样做的好处是有助于将抽象思维具体化,更容易理解,一方面可以帮助理解,一方面可以用来验证自己的猜想,提高阅读的准确性。

2、  善用源码工具

很多人在编写代码时,为了方便自己调试,会编写一些输出或显示函数。但是在实际运行的时候,配置了相应的参数并不对其进行执行,我们在阅读的时候如果发现了,要善用利用,也是可以方便直观的理解代码意义的。

3、  “3个数据”原则

这是我自己命名的一个原则,在一些循环中,至少要查看循环进行3次的数据量,我觉得5次可能更好。我再阅读tesseract代码的时候就因为自己想当然,只看了前两次循环的数据量,结果前两次识别提取的是汉字的部分信息,导致我直接错误的理解了函数的功能,以为它每次提取的都是汉字的部分信息。后来花费了大概3天的时间才发现这个问题,其实此函数是按它自己的理解来提取完整汉字信息,它只是把有些汉字拆分成了两个汉字来处理了。这个理解错误,导致我对后面阅读的假设都是错的,所以越看越不明白,头大了很久!

4、  前后推理

我阅读源码的时候顺序比较混乱,有时候从结果向前推,有时候从前向后推。目前还没有想清楚什么时候从前向后推比较好,什么时候从后向前推比较好,通常都是看着看着看不下去了,就换个方向再看看。

5、  做笔记

刚开始看代码的时候没有做笔记,这样导致的一个不好的结果就是看过的会忘记,因为有时候对一个函数理解的并不是很深刻,需要回头阅读,当回过去阅读的时候又需要借助其他函数参考理解,但是其他函数可能太久不看了,又忘了当时看懂的是什么意思了,于是又反过来重新阅读,就造成了时间上的浪费,后来开始做笔记,及时记录下每个函数的功能意义,查找起来就快很多了。

(1)       时间管理

从开始做笔记读代码开始,我就按照“番茄工作法”开始进行时间管理,但是自己后来执行的不好,中间还是会刷微博,豆瓣啥的分心,这个慢慢改进吧,自律不是一朝一夕的,养成习惯后也就不需要靠意志力来让自己自律了,慢慢来吧。

(2)       如何做笔记

我的方法是,就像流水线操作一样,其实不光是做笔记,很多事情都是有章可循的,就是要制定好这个“章”,然后自己就按照操作步骤一步一步的执行好了,把自己想象成一个机器人,这点在我当年复习托福考试的时候深有体会,所以我觉得,学习一门技能,最痛苦的不是执行,而是不知道该怎么执行,在读书上课的时候,老师会告诉我们该怎么执行,但以后自己学习的时候,就需要我们主动去寻找了,我的经验是,可以自己创造,可以上网看别人的方法(有人乐意分享真的是一件好事),可以参加相应的培训班等等。

(3)       我是怎样做笔记的

这个方法是我自己想的,总体来说,对我还是有帮助的,但是我觉得对理解源码来说,应该不是特别好的一种,准备回头去网上找找别人的方法,再实践,再总结。

  1. 记录函数名称(这时候根据名称就可以猜测函数的功能了)
  2. 标注每个参数的含义&谁是输入,谁是输出
  3. 单步运行函数,记录实际执行的子函数名称(这里,要自己判断一下,只记录有意义的子函数名,像那些格式转换的,输入输出的就别记了,浪费时间,要记录干货)
  4. 翻译代码注释(输入什么,输出什么,完成什么功能等等)
  5. 记录函数流程,都对各变量做了些什么,哪里执行了for循环,每次循环中变化的是什么,对什么进行了操作。

大概就这样吧,然后阅读的时候临时想到了什么也要及时写下来,加个TODO的标记,回头看到的时候不会忘,现在脑子越来越不行了,啥都记不住了。

6、  反思:

执行的不好的地方还是时间管理上,太容易分心了,经常控制不住的会去刷个微博,看个豆瓣上的小文章,偶尔聊个QQ啥的,浪费时间不说,还打断思路,也不能给自己太大压力,只能一点一点克服吧,希望自己在以后的工作和学习中能够效率更高,注意力集中的时间一天比一天久,还有就是我觉得,还是前面提到的那个问题,就是如果知道自己该怎么执行,就比较容易集中注意力做事情,大概还没有把自己修炼到熟练工的程度,慢慢来吧。

 希望有类似经验的童鞋多多交流,共同进步哇!!!

原文地址:https://www.cnblogs.com/Crysaty/p/6061953.html