Excel狂魔?單元格做計算機視覺:人臉檢測、OCR都不在話下

機器之心報道

參與:一鳴、張倩、杜偉

計算機視覺是什麼?過於專業,一步勸退?在普通人看來,計算機視覺是軟件開發者才能涉足的領域,需要用到很多專業的框架,普通人只能圍觀。但 GitHub 上的一個項目似乎顛覆了我們的認知。

Excel 基本操作會吧?上網搜索公式會吧?基本的數學理解能力有吧?OK,如果以上你都能做到,你也能上手計算機視覺項目了。

Excel狂魔?單元格做計算機視覺:人臉檢測、OCR都不在話下

圖 1:將一張圖像轉換為 Excel 單元格表示的灰度圖像。可以看到,只要單元格細粒度足夠高,就可以存儲足夠的圖像信息。

具體來說,在這個項目中,作者嘗試用 Excel 實現的樣本算法來幫助我們學習計算機視覺的基礎知識。為此,他用到了很多隻有一行的 Excel 公式。作者表示,在這個項目中,用 Excel 做人臉檢測、霍夫變換都不在話下,而且不依賴任何腳本或第三方插件。

以下是使用 Excel 進行的一些計算機視覺任務。首先,我們有一個示例圖像。這是一個護照。如圖所示,Excel 的算法可以實現對照片人像的檢測(使用傳統手工算法)。

Excel狂魔?單元格做計算機視覺:人臉檢測、OCR都不在話下

同樣,這幅圖像也可以被 Excel 轉換,然後找到邊和線的特徵。

Excel狂魔?單元格做計算機視覺:人臉檢測、OCR都不在話下

最後,Excel 還可以進行 OCR 操作。首先對圖像進行手工分割,找到相關的圖像文本,然後進行 OCR 即可。

Excel狂魔?單元格做計算機視覺:人臉檢測、OCR都不在話下

這個項目不要求你提前掌握計算機視覺背景知識,但需要了解 Microsoft Excel 基礎操作,會閱讀 Excel 文檔或上網搜索需要用到的公式的相關解釋。對於後者,推薦使用 Exceljet。

此外,你還需要具備一些數學理解能力:如果理解不了加權平均數,可能很難繼續學下去。掌握偏微分很有幫助,但不是硬性要求。項目中用到的複雜數學概念大多數是特徵值。

Excel 怎麼計算圖像數據?

使用 Excel 做計算機視覺,乍一聽顯得有點魔幻。但其實原理很簡單:這個教程利用了 Excel 強大的單元格計算能力,只要將圖像的像素數據轉換為單元格(如下圖所示),然後計算即可。我們知道每個單元格都可以表示一個值,那麼很多個單元格是不是就可以表示成矩陣了?

Excel狂魔?單元格做計算機視覺:人臉檢測、OCR都不在話下

對示例文件的截圖(樣本圖片局部),可以看到 Excel 單元格表示了圖像的灰度。

而另一方面,我們可以很方便地利用 Excel 計算單元格的數據。那麼整合起來,是不是和矩陣計算很相似了?這樣,不同圖像位置表示的特徵也就很容易被計算出來。自然也就方便完成下游計算機視覺的任務了,不管是傳統算法也好,還是機器學習也好。

可是,圖像怎樣輸入到 Excel 中呢?作者提供了一個方法:用 CSV 呀。

你可以用很多種方式轉換 RGB 圖像到像素點數據,如使用一個程序等:

https://alvinalexander.com/blog/post/java/getting-rgb-values-for-each-pixel-in-image-using-java-bufferedi

當圖像的像素轉換為 CSV 後,使用 Excel 讀取即可。

項目指南

項目需要的關鍵材料都可以在「Downloads」部分找到。這些材料都帶有註釋,通俗易懂,可以按部就班,一步一步學。

Excel狂魔?單元格做計算機視覺:人臉檢測、OCR都不在話下

軟件要求

這個項目是在 Excel 2016 上創建的,在其他版本上應該也能打開(目前已經在 Excel 2007 和 Mac 的 Excel 上進行了測試)。

此外,雖然這些文件能在 LibreOffice 上打開(測試版本是 6.4.0.3 (x64)),但速度極慢,可以說沒辦法用。目前還沒有在 Apache OpenOffice 上進行測試。

相關 Excel 公式選項

在打開項目中的 Excel 文件之前,請先把 Excel 的「公式」→「計算選項」調為「手動」,因為有些計算(尤其是霍夫變換)非常耗時。然後根據需要手動觸發重算。

Excel狂魔?單元格做計算機視覺:人臉檢測、OCR都不在話下


此外,不要勾選「保存工作簿前重新計算」,否則 Excel 將在每次保存文件時重新計算所有公式。

Excel狂魔?單元格做計算機視覺:人臉檢測、OCR都不在話下

注意:這個項目做完後,記得把設置改回來。

熟悉 Excel 中 R1C1 公式引用樣式的人或者喜歡冒險的人,應該嘗試通過查看 Excel 選項來切換到 R1C1 引用樣式。

參考下面的屏幕截圖,勾選 R1C1 引用樣式對應的複選框來啟用這個選項。如此一來,我們可以把公式從「D5」類型的格式更改為「R[-1]C[2]」這樣的相對樣式,使其更接近編程語言並有助於理解。

Excel狂魔?單元格做計算機視覺:人臉檢測、OCR都不在話下

教程目錄和代碼文件

下圖所示為本項目的相關教程目錄和項目文件,總共 50MB,大家可以前往 GitHub 下載。

Excel狂魔?單元格做計算機視覺:人臉檢測、OCR都不在話下

這一項目分為五個部分:

1. 計算機視覺 Excel 基礎

2. 邊和線

3. 關鍵點和描述算子

4. 人臉檢測

5. 文本識別(OCR)

這些項目都有相關說明和代碼,非常詳細。

常見問題和解答

作者在留下教程之餘,也對相關的一些問題提供瞭解答。

問題 1:這些技術是否可被深度學習替代?

這些技術依然是相關的。儘管神經網絡已經替代了所有複雜的計算機視覺問題,特別是那些傳統技術沒有解決的問題。但是在簡單的計算上,傳統方法更快,而且計算效率更高。另外,傳統方法依然是邊緣設備(智能手機、網絡客戶端)等的首選,雖然已有很多硬件加速的方法。

問題 2:為什麼使用圖像的綠通道,而不是紅或藍?如果想在 Excel 中用這種方式展示彩色圖像要怎麼做?

作者表示,三種基本的顏色通道中,綠通道對亮度的影響最大。理論上,圖像會首先被轉換為灰度圖,即計算其亮度,在教程中為了簡便被省略了。關於彩色圖像的表示,可以看一下第 6 個問題。

問題 3:護照中帶有水印的人臉為什麼沒被檢測到?

作者使用的是一個流行的人臉檢測算法,僅使用三個類 Haar 特徵和兩個步驟。這一算法是針對蒙娜麗莎(示例)中的圖像手工設計的。而在實際應用中,機器學習可以學習數千個這樣的特徵,因此才能準確檢測到人臉。

問題 4:在 OCR 示例中如何選擇 mask 以及方向?

對於文檔 OCR(與場景文本識別相反)來說,在識別文檔中的字符之前,文檔通常先被拉直。所以,字符一般為直立的。

在示例中,作者使用單神經元來識別大寫字母「E」。神經網絡利用多層神經元來識別所有感興趣的字符。然後神經網絡輸出輸入端出現的字符。需要注意的是,組合神經元將在識別每個字符的過程中共享一些神經元。

問題 5:OCR 方法在不同字體上的效果如何?

作為示例,作者使用單卷積神經元來識別大寫字母「E」。實際系統通常會使用到神經網絡(並不僅是單神經元),並且在不同字體和語言上都表現良好。

具體是如何實現的呢?作者使用單神經元來同時掃描圖像和識別字母。通常情況下,掃描不同篇幅的文本需要通過不同的方法單獨完成。一旦文本的每個字符被隔離,則字符重新縮放至一個固定大小,然後使用神經網絡來識別字母。

手寫識別更加困難。當筆畫數據為時間函數(如在觸摸屏上識別是寫輸入)時,能夠實現最佳效果。此外,在示例中,即使單個神經元的權重是手工的,實際上也不使用訓練算法來學習。在實際訓練時,單個神經元的效果也比 demo 展示中的要好。

問題 6:作者是如何想到用 Excel 做計算機視覺的呢?

起初,作者要給亞馬遜內部員工講授計算機視覺教程,但他們對該主題不熟悉。所以,作者通過展示圖像本質上是數字的 2D 陣列來講述計算機視覺的基礎知識,並想要使用 Excel 來展示。作者大約花費 7 個小時來創建了第一個功能完善的版本,但不涵蓋人臉檢測和文本識別。之後的版本又做了進一步完善。

自那時起,作者已經創建了以下在 Excel 中展示圖像的視頻作品或教程(附鏈接):

  • Excel 電子表格中的圖像(包括顏色):https://www.youtube.com/watch?v=UBX2QQHlQ_I
  • Excel 光線跟蹤:https://www.youtube.com/watch?v=m28jJ7CMp8A&feature=emb_logo
  • Excel 3D 引擎:https://www.youtube.com/watch?v=bFOL9kantXA
  • Excel 3D 圖形:https://www.gamasutra.com/view/feature/131968/microsoft_excel_revolutionary_3d_.php

問題 7:是否有計算機視覺的交互式開發者環境?

由於 Matlab 具有內置或在工具箱中具有很多計算機視覺功能,所以它通常用於計算機視覺任務。其中,「imshow」功能可直接將陣列數據以圖像的形式顯示出來。此外,基於 Python 和 Notebooks 的工具也很流行。

項目作者

項目作者有兩位,分別為 Alok Govil 和合作者 Venkataramanan Subramanian,他們都是亞馬遜的首席工程師。

其中,Alok Govil 是一位全棧技術架構師,本科和碩士分別畢業於德里技術大學(Delhi Technological University)和美國南加利福尼亞大學。他畢業後曾先後就職于飛利浦美國研究院、高通等公司,現為亞馬遜首席工程師。

Excel狂魔?單元格做計算機視覺:人臉檢測、OCR都不在話下

Alok Govil。

合作者 Venkataramanan Subramanian 本科畢業於印度馬德拉斯大學,之後攻讀班加羅爾國際信息技術學院的在職碩士。他畢業後先後就職於 Hexaware Technologies 和甲骨文公司,並於 2011 年入職亞馬遜擔任首席工程師至今。

參考鏈接:

https://news.ycombinator.com/item?id=22357374
https://github.com/amzn/computer-vision-basics-in-microsoft-excel


分享到:


相關文章: