在与大家交流的过程中,发现了一个问题,一直想说出来。可是通常实话都不会那么顺耳,所以总有些犹豫。可后再一想,既然大家来此的目的不过是为了讨论问题、互通有无,那么说了也应无妨。这个问题就是:我发现国内80%搞这行(机器视觉)的朋友所走的路子是错的。
这个感觉是从论坛上大家所问的问题得出来的。因为。在论坛中看到不少朋友所问的问题,是相当可笑的。说可笑并非指所提问题过于简单幼稚,而是所问的问题一看就是从书本上抄来的,而不是在实际情况下所遇到的。换句话说,论坛中的朋友大多只是在纸上谈兵,极少有人真正自已动手开发视觉系统。这样说是因为自己搞开发的人绝对问不出某些奇怪问题来的。往深了说一点,好象国内的朋友们只喜欢啃书本,并不愿意(也可能是懒得)动手。
现在就回到本文的题目上来:到底如何学习机器视觉?为了说明这个问题,我觉得应该先要简单地说明另一个问题:国内外机器视觉发展的不同。我本人认为,只有先搞清了两边的不一样,才便于说清如何下手学习。国外机器视觉发展到今天,已经从“一包到底”式的工作程序,发展到了细致分工的阶段了。由于篇幅问题。就不细讲这一行当如何从“一包到底”发展到细致分工过程。
一句话,国外机器视觉发展到今天,已经可以清清楚楚分为三个部分:
1,底层开发部分。
2,二次开发部分。
3,最终使用部分。
于是在国外,从事这一行业的人现在也就可以简单而清楚地分成三种人>
1,底层开发的人(从事底层开发工作的人)。
2,二次开发的人(从事二次开工作的人)。
3,使用及操作机器视觉系统的人(从事最终使用工作的人)。
第一类人。就是我们常说的,开发通用视觉系统(如:DVT,西门子,欧姆龙,EVISION,COGNEX等等)的开发人员,也就是DVT,COGNEX这些公司开发部的技术职工。
第二类。就是大家所说的OEM用户。是专门用第一类人所开发出的系统,给第三类人搞二次开发,开发各种专为第三类人所用的系统。第三类人,就是用户(end user)。这类人是真正将机器视觉系统应用到各个领域中的人,他们不仅在各自的行业中使用种种已经开发成型的机器视觉系统。而且负责对各类系统进行测试及评估。
举个实际例子,这里有不少朋友问过这类问题:如何检测某一工件;检测光盘表面的系统该如何配置CCD相机、镜头及灯源等。问这些问题的朋友应该算是第三类人。他们公司要他们寻找一个系统可以用来检测本公司的产品。但由于第一类人所开发的,只是通用的系统以及视觉系统开发工具的软件包。并没有哪家公司专门开发一套系统来检测光盘或是某种特定的工件。所以,这些朋友就应该来找我,因为我是第二类人。
我的工作就是,专门用DVT,EVISION,COGNEX等的视觉卡,以及视觉系统开发工具软件包为他们专门开发一套他们所需要的光盘检测系统或是工件检测系统。 但是,我在这里所看到奇怪的现象却是,这些第三类的朋友一直问的,都是第二类人所问的问题。如:问应该用哪家公司的开发软件;用什么样的CCD;如何标定等等。我真的不知道如何回答你:你明明是第三类人,要找第二类人帮忙。现在却以第二类人的身份甚至是以第一类人的身份问问题。绕了老大一圈,其实要说的问题就是一个----我所发现的问题:这里80%以上朋友把自己的身分混淆了,越俎代庖。
或许有的朋友会这样说:我虽然是第三类人,但我对机器视觉有兴趣,想自己学习啊!。这就是我想讨论的:到底如何学习机器视觉?我个人认为,应该先确定自己的身份,从自己具体的需要入手来学习。举个例子:大家一定都有学习英文的经验,而且也一定都有同样的感觉----怎么学也学不好----我就是这样。我们抛开所谓的语言天分不说,大家学不好的原因其实很简单:没有语言环境。一语中的啊!学而不用,怎么也不会学好。
同样,学习机器视觉,无论你在书本上看了多少理论,你自己若没有实际动手操作、编程的经验也是枉然。还不如从你每天能接触得到的东西开始学习。教游泳的教材随手可得,但为什么并非人人都下得了水呢?!不客气的说,目前国内搞这行的朋友似乎都有些好高骛远。不少从事第二部分工作朋友(搞二次开发的第二类人)对于机器视觉有关知识的了解,尚不如国外第三类人的知识水平(我是从大家所问的问题感觉到的)。而国内第三类朋友知识水平就更可想而知。
可是奇怪的是,每个人所问的却都是第二类人要问的,有些甚至是一类人才会问的问题。好象,机器视觉是个十分简单的技术,凭大家随便问几个“关键性”的问题,再由所谓的“专家”三言两语的回答一下。大家就一夜之间都可以自己搞底层开发,成第一类人了。
要成为第一类人,又分硬件及软件两种。要对自己所负责的这个模块非常了解,搞软件要知道算法及运行速度;搞硬件要明白公司所选用芯片的特点等等。同时还要清楚对手公司的优缺点以及机器视觉这一行的种种动态和最新技术。
想成为第二类人,你一定要是个通才。就是说什么都要知道一点。不仅要了解第三类人的要求,而且也要知道各种第一类人(不同品牌的视觉卡及软件包)的水平。
要成为第三类人,不仅要有机器视觉基本的相关知识。而且,要对自己所工作的行业及领域的机器视觉系统非常熟悉。专作你这行的机器视觉公司有哪几家?各有什么优缺点等等。总结一下。这三种人相比,第一类人一定要专业,对机器视觉的某一领域非常非常了解;第二类人虽比不上第一类人那么专业,但更加全面;第三类人更熟悉各个应用系统开发公司(第二类人)的优缺点。
现在大家可以看得出,机器视觉发展到今天,其分工已经越来越细,每个部分的工作其实是很难相互取代的。大家不要以为第三类人就比第一类人低一等,这是一个错误的等级概念。我本人过去曾属于第一类人,现在作的是第二类工作。而我的几个“师弟师妹”(当初曾一起作第一类人时的同事)现在就在干第三类工作。大家别小看第三类工作,以为这是小儿科,你能真作好这一行也不是很容易。毕竟这也是一门行当也是一个饭碗!另外,以我个人来看:以国内现在机器视觉的水平,对于那些想作第一类人的朋友我在这里劝一句:还是算了吧。
国内的机器视觉水平打根子上就差,您还打算搞底层?算法本身都是抄人家的,就只能和对手拼程序的写法了。不过我觉得那更没戏。这样说我绝没有看不起初学者的意思。我说过:所问的问题再简单,我都不会笑话你。对于每样事物我们都是从无知开始的。但是,对于那些极不实际的好高骛远的问题,我还是要说,希望大家踏实下来,戒浮躁,从最基本地学起----先确定自己的身份。
.以上所讲,是从工程(engineering)以及实际应用的角度来谈如何学习机器视觉。如果是想作学问,写论文的博士、硕士们就不太适合了。且全是作者一家之言,实话实说,言语间若有得罪各位之处,敬请谅解。