昨天去海淀图书城买到一本Joel On Software,果然不错。
刚从架子上抽出来的时候,还以为这仅仅就是项目管理方面的书。的确,开头几节就是著名的Joel 12条。我就在用这个方法对各课题组进行评价。
跳到后面,随机浏览了几节,才发现涉及范围很广,甚至包括产品市场策略和商业模式。“向后兼容”、“Windows API”、“.net SDK”、“Web应用程序”,这都是技术概念,和软件公司的商业模式又有什么联系呢?最后几章的论述很清晰。
前天下班忘了关系统。夜里值班师傅报告:晚上睡觉,半夜莫名其妙听到人脸考勤系统说:“您好,请看摄像头”,“再见请慢走”,实验室没别人,夜深人静怪吓人的。于是办公室女孩子们谣言四起。
我的系统识别率相当高,一开始听到出这种事情也很诧异。
仔细计算一下,系统分别使用到了检测算法、定位算法和识别算法。状态策略是和检测算法、识别算法有关的。其中“您好,请看摄像头”是在连续三帧视频都检测到人脸后播放的,那么它只和检测算法有关。
检测算法在CASPEAL测试的FAR(错检率)是2%到3%之间,往少了算2%,连续三帧错误的概率就是百万分之八,看起来可能性很少啊。可是如果计算摄像头视频,1秒处理15帧,1小时3600秒,1天24小时下来总共处理1296000帧。那么1天内出现这种情况的概率为10次。
晚上不像白天,是人工光线,图象的明暗纹理很分明,的确有可能在统计上或者信号频域上和人脸类似;加上晚上视频画面基本上是不动的,一旦第一帧检测错误,后两帧很有可能也会错误,所以“闹鬼”概率更高了。
用数学算算,就不用大惊小怪了。最近更换了性能更好的摄像头和采集卡,以后出现这种事情概率会更低。当然,现在下班我都不会忘了关系统,免得给自己惹麻烦。
昨天晚上玩得很happy,现在工作热情很高。
我们最终采购的是点击的产品。这些天都忙着调试部署软件,发现IM联系人分组无法从服务器下推。自己费劲把上百帐号分好组,却又不能导出给别人用,联系厂商实施的项目经理,想要个导入导出工具,总没回音。早上研究了配置文件和数据库,做了两个试验,拷出了分组,替代了别人电脑上的文件,成功。由于是强行硬crack,只好到领导、组长和办公室秘书那里一个个亲手操作,免得出错,其他人就顾不上了。坦率地说,点击的产品技术和服务都有问题。27日是协同软件实施关键。
刚看到有人对点击老板王志东的评价:
“很沉稳、各方面都很投入,对家庭、工作、个人生活都安排得很均匀,这一点很难。这种状态很重要。看一个企业家能做多大的事情,只要看一个参数就可以看得出来,就是他放松到了什么程度。”
下午沉下心又做了次努力,居然查清了人脸识别考勤系统的故障原因:其实是两个很幼稚BUG的叠加。
系统很长时间不能工作,视频采集的驱动又给我捣乱,在VC7 debug环境下rebuild,会导致系统重启,组长怒了不止一次,郁闷了好几个月。
把代码依植回VC6,每个步骤中间结果都写到文件里去。重新生成一次特征写入数据库,半小时,然后憋口气查找,调试,再生成数据,再调试……bug虽然藏得很深,但如果更勤奋认真一点,不至于头痛这么久。反省。
移植人脸识别检测SDK的事情终于有眉目了。明天开始集成测试。
先把算法从VC6.0升级到7.1,尽量符合C++ ISO/98标准语法;然后去掉MFC编译头,自己实现必要的类;接着移植到Eclipse + CDT + CygWin环境下;最后才移植到Linux下 (还是用Eclipse + CDT 编辑)。
最初的检测部分算法依赖OpenCV。移植到最后一步,安装linux版OpenCV编译通过,可CppUnit单元测试总是红色。一步步检查回去,才发现原文大量修改了Windows版OpenCV库本身的代码。原作者修改时没有标记和注释原因,虽然仅过了半年,他已经记不清到底干了些什么,最终只好从头移植另一种检测算法。
大量类似问题都是不良风格造成的。不考虑代码会给其他人使用,不预计以后升级移植时怎么修改,写不出好气味的代码。
Eclipse + CDT 帮了大忙,无论是J2EE还是C++,Windows还是Linux,我已经离不开这个工具了。CppUnit在VC6.0、VC7.0和gcc下工作都很出色。红旗4.1扭转了我的恶劣印象,虽然还是更喜欢Magic。
技术上自信的原因之一,就是比较擅长阅读别人的代码。这的确是件苦差事,但能锻炼能力。