当时为了完成学校举办的一个训练计划,我自己翻阅各类文献,用python做用来识别手指静脉纹路的软件,GUI用wxpython编写,项目的具体介绍在如下链接:bmxbmx3/Finger_Vein_Recognitiongithub.com
插个百度百科对指静脉识别的解释:
指静脉识别是静脉识别的一种,首先通过指静脉识别仪取得个人手指静脉分布图,从手指静脉分布图依据专用比对算法提取特征值,通过近红外光线照射,利用CCD摄像头获取手指静脉的图像,将手指静脉的数字图像存贮在计算机系统中,将特征值存储。
以下是我所作项目的图像处理的展示:指静脉图像处理流程图
下面大致讲一下我从这个项目入手python的过程吧:
因为python灵活的特性吸引了我,所以将之作为本项目的开发语言。说实话,项目初期因为刚开始学习python,做起来比较吃力,后来我看知乎的介绍一步步跟着廖雪峰老师的博客练习,对它才算掌握个大概。
然后就是python GUI的开发,这上面我也绕了不少路子。当时有心学pyqt,但是因为时间来不及,就跟着zetcode的tutorial着手wxpython,再熟悉了大体框架后直接用wxformbuilder建立界面。这里不得不吐槽wxformbuilder的layout嵌套不够人性化,后来做毕设时对界面设计转到pyqt后用qt designer就顺手许多。另,pyqt的文档我是直接照着qt c++的文档阅读,虽然没学过c++,但是如果了解面向对象的思想,基本也能做到通读。
最后是图像处理部分,从知网下了几篇硕士论文,啃了很长时间才搞透我所做的指静脉识别的相关算法。起初用matlab模拟花了不少时间,导致后面算法移植到python时临近答辩期限。眼看来不及,这时我发现了pypi,才真正体会到python的强大之处——除了库多还是库多233。matlab的一个嵌套了不知多少for循环的搜索算法,只需python几个库相互配合就能轻松解决,以此我顺带初步掌握了numpy、pillow、matplotlib、scikit-image等与图像处理有关的库的用法,仅花了一个月就实现了软件的编写与封装。
这里有个小插曲,当时做完项目答辩后,我很快就面临六级考试,但因为做这个项目花去了太多时间,导致平时并没有怎么复习英语,后来考试我就没有抱太大的希望。然而在成绩出来后,意料之外的是我竟然过了。仔细想想应该是做这个项目的时候,我逼迫自己大量查阅外文文献,因而顺带掌握了流利阅读外文的能力。
这里我总结了几个小tips,算是对这个项目学习过程的总结吧:做项目时找队友是关键,划水一律踢。
英文要熟练,对你编程有极大的帮助。
善用google关键词搜索你想找的内容,必要时加tutorial、documentation等词,实在不会用how to、what is等疑问句。
有些问题去stackoverflow、reddit等社区逛逛,若不行查阅blog,再次去github看有没有相关issue,总能有不少收获。
生活作息一定做到有规律、有计划。
特别是第一条,我做这个项目时队友什么也不干,全“寄托”在我的身上,让我花了不少时间和精力,以至于临近答辩的时候我每天熬夜到两三点是常有的事,看论文、写代码等很多繁杂的事压得我一人有时力不从心。更气的是队友趁我忙于项目的时候外出旅游,一点忙儿也没帮上,当我做完项目后他还诧异地说:“我以为你做不出来了呢。”如果你们遇到这样偷懒的伙伴,请坚决不要与之共事,不要念什么情分,或者不好意思怎样,该踢则踢。
不过我也感谢划水的队友,把所有的事“托付”给我,反而让我学到了很多。
欢迎fork我的项目,如果喜欢点个star,有什么建议也可提issue,我会及时回复。