那些年从项目中走过——从完结的基于视频的车辆识别系统写起

高效学习与项目攻关技巧
本文分享了如何快速进入新领域、有效获取专家帮助、提出高质量问题及提升问题解决效率的经验,适合初学者和进阶者参考。

暂且不说在这个特殊的时间做这个系统对与错,毕竟这一个多月已经结束了。自己也学到很多跟opencv有关的知识。前面也做过几个比较大的项目,但一直都没做过总结,下面做些有关学习和做项目方面的总结吧!

一,如何快速的了解某个领域

如果说你从来没有接触过某个领域,现在要你用这个领域的知识做某个东西,就像我以前没有用过opencv一样,现在要用opencv做一个车辆识别系统,你会怎么办?很多人是找一些这些专业或领域的基础教程,或者是直接从网上找一些源代码。这些都不是!最好的办法是找这个领域和你要做的东西相关的论文!至于为什么,我后面会说。于是我从网上找了10几篇关于opencv车辆识别的论文,最先花了一段时间看论文。当然刚开始看的时候完全看不懂,什么各种滤波啊,各种变换啊,各种检测,还有好多不懂的数学知识,怎么办?于是就找了一些opencv的基础教程。边看论文,边看基础教程。论文中出现一些专业的名词不懂的话就在教程中找相应的介绍,当然一篇好的论文应该是能让任何一个外行的人读懂的,所以论文的好处就是,他会把一些非常专业的,非常重要的知识作一些介绍的,比如滤波,我看的那么多的论文,几乎都有对中值,均值等滤波做一个比较分析。看了4.5篇论文后你就知道了一些你后面要用到的专业的而且非常重要的东西。再看几篇,用心归纳下的话你便可以知道做这个东西,大体就经过哪些步骤,要怎么做。还是拿这个系统来说,当我看了10来篇论文后,我大概知道,做一个基于视频的车辆识别系统,首先要进行车辆检测,就是要把马路上的车辆给找出来,而不是那些树啊,人啊,然后要车辆找到后就要找车牌,所以下步要做的就是车牌定位,找到车牌后,你就可以分析车牌的内容了,比如车牌号啊,颜色啊,我们把这步叫做车牌的识别。

之所以建议看论文,而不是直接看基础教程,是因为论文跟你的主题最贴切,然后又附带这些领域的知识。这样就确保你花最少的时间学到你最需要的东西。直接看基础教程不行:一因为教程是专业性的,里面的很多东西你根本就用不到,你有再多的时间也不够你看教程。二是基础教程没有针对性,opencv用途那么广只看教程你不可能知道做车辆识别要用到什么知识!此外,在网上找一些源代码,想从源代码入手是最蠢的行为。没有这些基础知识,你根本不可能调通别人的程序,就算是别人的程序是好的,可以运行,你也不知道里面的原理,一不小心运行出现问题了,你根本就无法解决。要记住程序是不可能没有bug的。所有程序都有bug,现在能运行只是你还没碰到而已。所以,不要想通过调通别人的程序来完成这个任务(当然一个小课设什么的不算)。此外就是每个人都有自己的编程风格和思想,这增加了你读程序难度。然后程序是片面的,为了达到某个目的根据个人习惯,还有一些其他因素可以用不同的方法,同样是字符识别,你可以用神经网络,也可以用模板匹配,还可以用向量机。这些在程序里面是不可能全部体现的。一个程序一般只会选择一种方法。最后,这些源代码的数量是非常有限的。你不可能找到和论文数量一样多的源代码。能找到1,2个就非常幸运了,即便opencv是开源的。至于有没有用,这就更难说了。所以不要傻乎乎的一开始就去网上找源码,想通过别人的源码来解决,或者把别人的源码改改应付了事,这是行不通的。

二,在遇到问题时如何最快获得一些大神的帮助

最好的办法是加相关的群和论坛。群的和实时性很高,但不确定因素很多。别人有可能回答你,帮你解决问题,也有可能不帮你,当你的问题对于那些大神来说非常简单(对于菜鸟的你可能非常复杂)而且这个大神又有些“自以为是”的话他甚至还有可能嘲讽你,还有可能很吵杂,消息很多。不同的群也有自己的特点,有些很活跃,有些很冷清,有些很热心,有些很冷漠。我在的一个opencv群就是每天早上有几个人都会发一个“早上好”即使快到中午了,所以每天登陆的话都可以看到有那几个“早上好”。最后总结在群里面问问题是看运气的,运气好可能有人帮你解答,运气不好直接被下个人的问题给带过去了,或者是没人回答。在论坛里面发帖子实时性不高,但至少别人无法嘲讽你,然后得到帮助的可能性也会更大,一般一个论坛里面好的管理员都是那些大神们,别人不回复那些管理员大神看到了帮你解答的可能性是很高的,当然不排除一些论坛的管理员是真正的“管理员”,除了管理不懂这个领域的任何知识。帖子一发就沉下去的群我也碰到过,好像是一个三维建模的群,发了好几个帖子都没人回答。然后就不想再发了。不过也碰到好的论坛,比如osg论坛,里面就挺好的,即使前面没人回复,最后管理员都会回复,因为管理员是这方面的大神!当然里面也有很多很热心的其他大神。

三,如何使提问获得最多的帮助

提问后如何才能得到比较多的回复呢?我记得以前有人特意写过这样的帖子,怎样发帖或者提问才能获得比较多的回复。的确,自己也遇到过许多的神提问,也不说清具体是什么原因就问为什么,怎么办了,其实我们根本就不知道他碰到什么问题了,这样叫大神们怎么回答呢。在这总结下自己的经验吧,第一,要有礼貌,很多人提问不礼貌,也没感谢,对于这个我在我的博文里说到好多次了,这个真的非常重要,你自己都不礼貌,别人凭什么要帮你?这可是没有任何回报的。又要说到那个给我留言问我问题的人,我先给他详细的解释过,他又不懂,然后又跟我要代码,然后我又把代码给他,再给他解释一遍,在这个过程中ta没有一句谢谢!想想这样的人为什么要帮他呢?第二,问题要清楚,要让别人知道你想问什么,你哪里遇到问题了,像上面说的,根本就没把问题说清楚就问,谁能回答呢?别忘了别人可不知道你具体的在干什么,遇到了什么问题,他知道的就是你的那些描述,所以对问题的描述一定要清楚。三,遇到问题自己先思考,别动不动就问别人,自己却不想,这样既浪费自己的时间,又浪费别人的时间。所以在发帖和提问时可以告诉别人,你做了多少努力,做了什么什么测试都没用,这样别人不但可以更清楚的了解问题,还可以避免提供你试过的方法。当然看到你那么努力的试了那么就没解决的话,别人也更有同情心帮你,而对于那些一碰到问题自己也不想就问的人,我想谁都会烦的。


四,如何提高解决问题的效率

正如前面说的,遇到问题了,帮助我们解决问题的方法很多,可以看教程,可以到论坛上找帖子,可以群里问人。但如果你马马虎虎看两分钟教程,感觉没什么收获不如去论坛上找办法,又到论坛上找帖子,浑浑噩噩看了三分钟,感觉又没什么收获,不如去看教程,这样蜻蜓点水,最后时间都浪费了,终一无所获。所以当遇到问题时,应该先看教程,仔细的看,认真的看一行一行看,一个字一个字的看,千万别蜻蜓点水,一扫而过,那样是没用的。教程讲的是理论,是基础,只有打好基础才能应用。看完教程理论后看看教程中带的例子,不够还可以读osgexample里面的例子,都说那个是最好的教程。当然读这些都会比较枯燥,但写程序本来就是一件很枯燥的事。看完教程和例子,感觉自己把理论和原理都弄的非常透彻了,就可以尝试解决自己的问题。如果遇到的问题不说理论问题,或者说教程上比较基础,而你的问题偏更高级点的应用,那么你可以到论坛上找找帖子,看看有没有类似的,看帖子的时候记得做好笔记,防止一口气把所有的帖子都看了一遍,却忘记了自己要做什么,当自己想到要做什么了却忘记哪篇帖子上有了。所有一定要做好笔记。如果把所有相关的帖子都看完了,还没找到解决办法,那你就可以考虑自己发帖和到群里问问了。这里有回到上面说的,如何快速获得大神的帮助了,其实正如前面说的,只有你自己尝试过了,别人才会更乐意帮你,所以前面做的那些看教程看例子是非常有必要的,不管是对解决问题还是对提问,都是非常重要的。毕竟谁都讨厌自己什么都不做,光会问的人。这段是写给自己的,因为到后面觉得自己变得非常浮躁,一个问题折腾来折腾去,就是没有半点进展。所以把方法写下来,希望对大家也有帮助。

总结一下步骤:1,看教程(认真看,至少要有三四本教程,比如《stepintoosg》《osg程序设计教程》《osg设计与实现》《osg渲染引擎编程指南》等等),2看例程,3看帖子,4,提问。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值