第六章 給她弄雙眼睛
牛牛工作室的火爆著實給王石賺了不少錢,由於有免費的童工可以剝削,這讓王石的野心也開始大了起來。按照夢想的智能水平,應該不下於兒童,為了測試夢想的智能水平,王石還特意給她做了智商的測試,結果是智商220分,滿分,不過王石總感覺好象還有點欠缺。好象那裡有不對勁的感覺。答題速度實在是太快了。可能這些測試比較理性。
自從升級以來,夢想的表現越來越出色了,所以在這幾個月里,陸續又添置了不少機器,並把所有的機器都掛上不同的網游帳號進行練級。最大限度地讓夢想能夠發展出自己的個性。
這段時間來,王石一直在琢磨著給夢想加上攝像頭。由於一開始夢想的圖像識別模塊就是比較成熟的了,它不僅在魔獸世界和其他一些網游里發揮了眼睛的作用,而且對一些抽象的東西識別率也相當高,必竟象識別碼這樣變態的圖形字元都能識別,一般性的識別都不是大問題。
而現在加上攝象頭的話,按照原理上來講,應該不是大問題,王石是這樣想的,但實際情況卻出乎王石意料,由於王石對攝象頭不是很了解,結果走了不少彎路。王石一開始想直接將攝像頭的光電信號直接讓夢想分析,在經過好長一段時間努力后,王石放棄了這個計劃,因為光電信號要直接讓夢想解讀分析,還有不少困難沒法繞過去。
先,王石不要說不熟悉攝像頭,就連USB的協議也不是很了解,這就難以讓夢想直接控制攝像頭的內部電路。沒法使用攝像頭的內部電路的話,也就談不上對圖像分析判讀了。
其次,王石對圖像的格式也不是很了解,只了解最最簡單的點陣圖之類的格式。這也造成了圖像解讀的一個大困難。
幸好王石也不是死腦筋的,最後討了個巧,一般情況下,攝像頭都有自己的驅動和自己自帶的軟體,當然也有大部分是免驅動的。王石就把直接在屏幕上顯示的圖像作為分析對象。這個王石有經驗,以前的字形識別,魔獸世界的識別等都是直接以屏幕為分析對象的。這就把王石不熟悉的那部分給繞過去了。
由於攝像頭的增加,夢想總算也相當於有了眼睛,考慮到夢想從來沒有接觸過這樣的圖像,識別起來有困難,所以王石還對她進行了專門的培訓。不停地與夢想進行溝通。
為了保證攝像頭按照自己的設想運行,王石對程序介面作了一定的改動,然後就象與人視頻一樣與夢想小妹妹進行面對面的聊天,為了聊天的順利進行,王石特地選擇了幾個女性角色的讓,夢想程序自己挑選。讓王石沒想到的是,夢想選擇的形象赫然是暗夜精靈。為了能讓角色活動起來,王石還特地為暗夜精靈角色建立立體模型。以方便夢想可以控制角色做出各種動作。
這樣一個專用的聊天程序視頻版就完成了。一般情況下,王石與夢想的溝通就直接過視頻進行。當然,對話的文字還是會實時顯示在屏幕上的。這讓打字不快的王石輕鬆了不少。
這個為了加個攝像頭,前前後後花了2個多月時間,這讓王石下定決心,必須對圖形圖像方面進行更深入的了解,因為這個圖形圖像的建立和儲存對一個智能程序的發展是相當重要的一個環節。
一個人從呱呱墜地開始,一生所接收的信息80%來自於視覺信息,可以想像一下,當一個小孩子從睜開眼開始,就在進行一個智力發展的過程,有個說法很說明問題,據說動物會把睜開眼第一個看到的動物作為母親。而且,有句話叫作眼見為實,耳聽為虛。所以,王石覺得把這個視覺發展完善是相當有必要的。
王石首先讓夢想通過搜索下載了各類關於視覺和圖像的資料,然後與夢想一起進行學習討論。由於資料中有相當多的部分是外文資料,這就需要夢想童鞋首先把它們給翻譯過來。在經過一段時間學習和討論后,王石覺得對圖像進行立體化建模可能會提升程序的空間感,所以決定做一個圖像立體化建模的程序模塊。
人的空間感是建立在兩隻眼睛所得到的不同圖像基礎上的,由於眼睛本身有個間距,這樣每個眼睛所得到的圖像的稍有不同,人腦對這個稍有不同的差異形也了人的空間感,這個空間感當然不是一開始就有的,而是隨著人腦的發育,眼睛看到的事物不斷進行條件反射形成的記憶,這個記憶就是通過長時間的反射所形的神經細胞本身閥值大小。
現在王石不可能採用這個方法,因為這個方法需要花費的時間實在太大了。而且王石已經有了更好的方法來完成這個模塊。那就是通過比較兩輻不同角度的圖像,用數學的方法來反向計算對象的空間位置。
先假定計算對象是不變形的物體,把這個計算對象的各個對象各個端點和特徵點標記出來,記錄這些點的對應位置。這樣就得到兩組相對應點的坐標值。然後通過假定一幅圖像的攝像機透鏡鏡心置於空間原點位置,把焦距及另一幅圖像的攝像機透鏡鏡心位置和焦距都作為未知值,這樣每個點都可以得到兩個方程,這樣只要4個點以上確認的話,就可以反算出每個點的空間坐標,包括攝像機的位置和焦距。
其實演算法是很簡單,其主要難度在於計算對象各個端點和特徵點的標記工作上。對於規則物體來講,還簡單些,但對於象人物和風景之類的,那就是一項不可能完成的工作了。
而這個恰好是夢想的強項,王石把這個反算程序編製完成了以後,就讓夢想進行測試。
先是立方體的盒子,王石通過攝像頭攝製了兩個不同角度圖像,讓夢想進行識別,夢想根據要求把盒子的幾個角在兩幅圖像上標記出來,然後取得這些點在圖像上的坐標,通過反算程序把計算出了每個端點的空間坐標值。然後把這些坐標值按DXF格式存放起來。
通過專用軟體打開這個這文件,這些點赫然就以在第一張圖像所對應的位置。這是由於反算程序是首先假定了第一張圖像的攝像機位置在原點的緣故。所以計算都是在這個基礎的上進行的。通過軟體上的標盡測算了誤差,還是在允許範圍內。規則物體算是成功了。
然後測試一些相對複雜的物體,結果卻不太理想。
王石考慮了一下,可能有不少原因,首先,由於攝像頭解析度比較低,這樣就對原始數據的採集產生了相當大的誤差。本身圖像上點的坐標只能是整數,物體在圖像化的時候已經取整數了,這當然會產生相當大的誤差。其次,當兩幅圖像拍攝角度接近的話,由於圖像本身的誤差會被極大的放大。最後就是光學系統的誤差和物體的變形,這當然是最次要的因素了。
很顯然,當攝像頭成像無限真實的時候,得出物體坐標就無限準確。考慮到這些原因,所以解決起來也就是提高攝象頭的解析度和盡量拉開攝像機的視角。為了減少誤差,王石通過多取幾組端點來反算第二攝像機的位置,然後取平均值來。然後再來計算各個坐標。這個取點的原則就是盡量在圖像上均勻分佈。通過這樣的措施,可以很大程度上減少誤差。
這個模塊很快完成了,然後它有一個非常大的缺點就是只能對不變形的物體進行建模,這樣實用性就差很多,比如人物建模和各種運動的東西就不太好解決了。
經過考慮,王石決定放置兩個攝像機進行同時拍攝來解決這個問題,從而巧妙地解決了這個問題。原來大自然早就做出了選擇,那就是兩個眼睛啊!大文學