牛牛工作室的火爆着实给王石赚了不少钱,由于有免费的童工可以剥削,这让王石的野心也开始大了起来。按照梦想的智能水平,应该不下于儿童吧,为了测试梦想的智能水平,王石还特意给她做了智商的测试,结果是智商220分,满分,不过王石总感觉好象还有点欠缺。好象那里有不对劲的感觉。答题速度实在是太快了。可能这些测试比较理性吧。
自从升级以来,梦想的表现越来越出色了,所以在这几个月里,陆续又添置了不少机器,并把所有的机器都挂上不同的网游帐号进行练级。最大限度地让梦想能够发展出自己的个性。
这段时间来,王石一直在琢磨着给梦想加上摄像头。由于一开始梦想的图像识别模块就是比较成熟的了,它不仅在魔兽世界和其他一些网游里发挥了眼睛的作用,而且对一些抽象的东西识别率也相当高,必竟象识别码这样变态的图形字符都能识别,一般性的识别都不是大问题。
而现在加上摄象头的话,按照原理上来讲,应该不是大问题吧,王石是这样想的,但实际情况却出乎王石意料,由于王石对摄象头不是很了解,结果走了不少弯路。王石一开始想直接将摄像头的光电信号直接让梦想分析,在经过好长一段时间努力后,王石放弃了这个计划,因为光电信号要直接让梦想解读分析,还有不少困难没法绕过去。
先,王石不要说不熟悉摄像头,就连SB的协议也不是很了解,这就难以让梦想直接控制摄像头的内部电路。没法使用摄像头的内部电路的话,也就谈不上对图像分析判读了。
其次,王石对图像的格式也不是很了解,只了解最最简单的位图之类的格式。这也造成了图像解读的一个大困难。
幸好王石也不是死脑筋的,最后讨了个巧,一般情况下,摄像头都有自己的驱动和自己自带的软件,当然也有大部分是免驱动的。王石就把直接在屏幕上显示的图像作为分析对象。这个王石有经验,以前的字形识别,魔兽世界的识别等都是直接以屏幕为分析对象的。这就把王石不熟悉的那部分给绕过去了。
由于摄像头的增加,梦想总算也相当于有了眼睛,考虑到梦想从来没有接触过这样的图像,识别起来有困难,所以王石还对她进行了专门的培训。不停地与梦想进行沟通。
为了保证摄像头按照自己的设想运行,王石对程序接口作了一定的改动,然后就象与人视频一样与梦想小妹妹进行面对面的聊天,为了聊天的顺利进行,王石特地选择了几个女性角色的让,梦想程序自己挑选。让王石没想到的是,梦想选择的形象赫然是暗夜精灵。为了能让角色活动起来,王石还特地为暗夜精灵角色建立立体模型。以方便梦想可以控制角色做出各种动作。
这样一个专用的聊天程序视频版就完成了。一般情况下,王石与梦想的沟通就直接过视频进行。当然,对话的文字还是会实时显示在屏幕上的。这让打字不快的王石轻松了不少。
这个为了加个摄像头,前前后后花了2个多月时间,这让王石下定决心,必须对图形图像方面进行更深入的了解,因为这个图形图像的建立和储存对一个智能程序的发展是相当重要的一个环节。
一个人从呱呱坠地开始,一生所接收的信息80%来自于视觉信息,可以想像一下,当一个小孩子从睁开眼开始,就在进行一个智力发展的过程,有个说法很说明问题,据说动物会把睁开眼第一个看到的动物作为母亲。而且,有句话叫作眼见为实,耳听为虚。所以,王石觉得把这个视觉发展完善是相当有必要的。
王石首先让梦想通过搜索下载了各类关于视觉和图像的资料,然后与梦想一起进行学习讨论。由于资料中有相当多的部分是外文资料,这就需要梦想童鞋首先把它们给翻译过来。在经过一段时间学习和讨论后,王石觉得对图像进行立体化建模可能会提升程序的空间感,所以决定做一个图像立体化建模的程序模块。
人的空间感是建立在两只眼睛所得到的不同图像基础上的,由于眼睛本身有个间距,这样每个眼睛所得到的图像的稍有不同,人脑对这个稍有不同的差异形也了人的空间感,这个空间感当然不是一开始就有的,而是随着人脑的发育,眼睛看到的事物不断进行条件反射形成的记忆,这个记忆就是通过长时间的反射所形的神经细胞本身阀值大小。
现在王石不可能采用这个方法,因为这个方法需要花费的时间实在太大了。而且王石已经有了更好的方法来完成这个模块。那就是通过比较两辐不同角度的图像,用数学的方法来反向计算对象的空间位置。
先假定计算对象是不变形的物体,把这个计算对象的各个对象各个端点和特征点标记出来,记录这些点的对应位置。这样就得到两组相对应点的坐标值。然后通过假定一幅图像的摄像机透镜镜心置于空间原点位置,把焦距及另一幅图像的摄像机透镜镜心位置和焦距都作为未知值,这样每个点都可以得到两个方程,这样只要4个点以上确认的话,就可以反算出每个点的空间坐标,包括摄像机的位置和焦距。
其实算法是很简单,其主要难度在于计算对象各个端点和特征点的标记工作上。对于规则物体来讲,还简单些,但对于象人物和风景之类的,那就是一项不可能完成的工作了。
而这个恰好是梦想的强项,王石把这个反算程序编制完成了以后,就让梦想进行测试。
先是立方体的盒子,王石通过摄像头摄制了两个不同角度图像,让梦想进行识别,梦想根据要求把盒子的几个角在两幅图像上标记出来,然后取得这些点在图像上的坐标,通过反算程序把计算出了每个端点的空间坐标值。然后把这些坐标值按DF格式存放起来。
通过专用软件打开这个这文件,这些点赫然就以在第一张图像所对应的位置。这是由于反算程序是首先假定了第一张图像的摄像机位置在原点的缘故。所以计算都是在这个基础的上进行的。通过软件上的标尽测算了误差,还是在允许范围内。规则物体算是成功了。
然后测试一些相对复杂的物体,结果却不太理想。
王石考虑了一下,可能有不少原因,首先,由于摄像头分辨率比较低,这样就对原始数据的采集产生了相当大的误差。本身图像上点的坐标只能是整数,物体在图像化的时候已经取整数了,这当然会产生相当大的误差。其次,当两幅图像拍摄角度接近的话,由于图像本身的误差会被极大的放大。最后就是光学系统的误差和物体的变形,这当然是最次要的因素了。
很显然,当摄像头成像无限真实的时候,得出物体坐标就无限准确。考虑到这些原因,所以解决起来也就是提高摄象头的分辨率和尽量拉开摄像机的视角。为了减少误差,王石通过多取几组端点来反算第二摄像机的位置,然后取平均值来。然后再来计算各个坐标。这个取点的原则就是尽量在图像上均匀分布。通过这样的措施,可以很大程度上减少误差。
这个模块很快完成了,然后它有一个非常大的缺点就是只能对不变形的物体进行建模,这样实用性就差很多,比如人物建模和各种运动的东西就不太好解决了。
经过考虑,王石决定放置两个摄像机进行同时拍摄来解决这个问题,从而巧妙地解决了这个问题。原来大自然早就做出了选择,那就是两个眼睛啊!