窗體監聽006:利用OCR影象識別技術來獲取資料

經過前幾章的學習,我們瞭解一些簡單的窗體文字資訊如何獲取。但是在實際應用中並不是所有的窗體都能被Microsoft Spy++所識別,比如我們常見的WinRAR解壓軟體內容視窗就是一個整體,我們無法透過視窗節點來獲取其中壓縮的內容。就如下圖中的Celerys我們透過Microsoft Spy++只能獲取到其父級的視窗控制代碼資訊,像這種情況我們就無法透過前面的知識來提取你想要的內容了。

窗體監聽006:利用OCR影象識別技術來獲取資料
資料採集原理

遇到這種情況我們就需要更強大的功能來幫助我們實現資料的採集,那就是影象識別技術它可以幫助我們解析提取圖片中的內容。首先我們還是需要透過控制代碼來獲取到你資料所在的視窗,然後對該窗體進行截圖。由於影象識別是一個複雜的識別過程,為了能讓圖片識別效率更高我們需要對圖片進行擷取來剔除掉無用的部分以提高識別的效率。現在已經有很多開源的影象識別工具,我們只要利用這些現成的影象識別技術將圖片中的資料提取出來即可。

窗體監聽006:利用OCR影象識別技術來獲取資料
視窗控制代碼獲取

首先我們還是來獲取指定視窗的控制代碼,利用Microsoft Spy++檢視視窗對應的類名及標題名稱先獲取到程式的窗體。再透過窗體控制代碼來獲取視窗控制代碼,在SysListView32類下面還有個SysHeader32視窗,這個視窗指向的是列表的表頭我們不需要獲取。

獲取視窗大小

在獲取視窗圖片之前我們需要先來獲取視窗的大小,這裡我們透過GetClientRect方法來實現。這個也是“user32.dll”中提供的函式,我們添加個函式宣告就可以直接使用了。先宣告一個struct結構體來存放視窗的座標值,利用座標值來計算視窗的大小。

窗體監聽006:利用OCR影象識別技術來獲取資料
獲取視窗圖片

這裡我們需要透過獲得hWnd指定視窗的客戶區域的裝置環境來建立Bitmap影象,建立影象需要利用到gdi32.dll中的CreateCompatibleBitmap和CreateCompatibleDC來實現。這裡需要注意的是需要需要轉成ARGB模式,也就是在RGB色彩模式上附加Alpha(透明度)通道。這樣可以給圖片加亮,提高圖片的識別率。

窗體監聽006:利用OCR影象識別技術來獲取資料
擷取圖片

圖片越大識別起來就越花時間,所以我們在擷取到視窗的圖片之後需要對圖片進行二次處理。這裡可以利用Bitmap中的Clone方法來實現圖片的擷取,提供擷取的開始座標和圖片的長寬即可拿到想要的內容。

窗體監聽006:利用OCR影象識別技術來獲取資料
影象識別

最後就是影象識別了,我們可以利用像Tesseract等光學字元識別庫來實現對影象的內容識別處理。在NuGet包管理器中搜索Tesseract並安裝,Tesseract支援很多種語言,根據你的需要下載對應的語言包放到專案的tessdata資料夾裡面,例項化Tesseract的時候引入tessdata及使用的語言即可。透過Process方法返回一個Page物件,該物件可以獲得識別的文字,也可以獲得識別文字所在位置。PageSegMode引數設定識別模式,SingleLine表示單行識別。

這裡需要注意的是被採集視窗不能最小化,否則無法獲取到視窗的座標值,這樣獲取圖片的時候就會報“記憶體不足”的錯誤。

窗體監聽006:利用OCR影象識別技術來獲取資料
影象識別結果

這裡我們發現識別的結果不是很理想(Celerys識別成了Ce‘elys)而且也彈出了警告資訊(Parameter not found),引數設定可以在初始化Tesseract元件的時候透過SetVariable屬性進行設定。影象識別準確率低可能是圖片沒做好處理,前面對影象進行ARGB轉換和切圖就是為了提高Tesseract的識別效率,看來需要去深入研究Tesseract來訓練自己的識別庫了。

窗體監聽006:利用OCR影象識別技術來獲取資料
​總結:

是一個開源的OCR(Optical Character Recognition,光學字元識別)引擎,可以識別各種格式的影象並將它們轉化成超過60種語言的文字(不能識別手寫內容),同時還可以不斷訓練自己的庫使影象轉換文字的能力不斷增強。tessdata目錄存放的是語言字型檔及配置檔案,用來實現轉換不同的語言文字。以上內容是小編給大家分享的【窗體監聽006:利用OCR影象識別技術來獲取資料】,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。

窗體監聽006:利用OCR影象識別技術來獲取資料
專欄
資料採集實戰
作者:程式設計手札
9.9幣
3人已購
檢視
窗體監聽006:利用OCR影象識別技術來獲取資料

【來源:程式設計手札】

宣告:轉載此文是出於傳遞更多資訊之目的。若有來源標註錯誤或侵犯了您的合法權益,請作者持權屬證明與本網聯絡,我們將及時更正、刪除,謝謝。 郵箱地址:[email protected]

版權宣告:本文源自 網路, 於,由 楠木軒 整理釋出,共 1888 字。

轉載請註明: 窗體監聽006:利用OCR影象識別技術來獲取資料 - 楠木軒