2010/05/10

Sikuli 搭配 OCR

嘎? Sikuli 不是用圖像去寫程式嗎!?
怎麼這次,變成了要去辨識文字呢!?
這會不會太神奇了!!!


來看一下,官方部落格的這篇文章

Use Clipboard to Extract Text with Sikuli


這張圖,就是他的程式碼

來稍稍解釋一下程式碼吧!

def copy(begin,end):
    dragDrop(begin,end)
    type("c",KEY_CMD)

def 開頭的,表示這是一個方法,名字叫 copy ,有兩個輸入 begin,end
底下的指令,必須要縮排
dragDrop 滑鼠按住 begin 的地方,拖拉到 end ,然後放開
type 模擬鍵盤輸入 CMD + c (註:這是MAC的複製方法,相當於Windows系統的ctrl+c)


switchApp("Firefox")

switchApp 切換到 Firefox 這個程式

with 一張限制區域的圖:
這裡要表示的是,在那塊紅色的區域裡面,實做下面的程式碼。
(並不是很清楚的知道 python裡面,with的用法...)

zips = list(findAll())
zips.sort(lambda a,b:a.y-b.y)

首先要先講 findAll , 這個指令會去找,在這個區域裡面,所有跟那張圖長的差不多的圖。
list ,把 findAll() 找到的所有圖像 (我猜,應該是一堆 (x,y) 座標的數字),轉換成list (清單,串列,#$%@#$)
zips = list(findAll()) 把這個串列,儲存在 zips 裡面
zips.sort 對zips這個串列進行排序,那應該要如何去排序呢?沒錯,就是根據 lambda a,b:a.y-b.y
咦? 這行是什麼意思啊?
首先來解釋一下 lambda吧!
其實 lambda a,b:a.y-b.y 這一條,可以改寫成下面的 def 函式
def sub_y(a,b):
    return a.y-b.y
所以就是縮寫啦!
這樣會根據前後順序排列,才能在影片裡面看到,從上面 copy 到下面

for z in zips:

所有在 zips 這個串列裡面,都要走一次 for 迴圈,當他在跑的時候,會用 z 當他的代號

copy(z,z.getCenter().right(600))

copy() 這個函式,就是之前 def copy(begin,end)
z.getCenter().right(600) 在z的中間,往右邊 600 pix


filename = Env.getClipboard().strip()

將系統裡面的剪貼簿裡面的文字截取下來,存到 filename 裡面
Env 系統環境
getClipboard() 將剪貼簿裡面的資料抓出來

sleep(0.2)

系統暫停 0.2 秒

if filename.startswith("Sikuli-IDE-osx"):
    click(z.getCenter().right(50))
    wait(save file,10)
    click(ok)
    waitVanish(save file)

如果 filename 的開頭是 "Sikuli-IDE-osx"
點 z 右邊 50 pix 的點
wait(save file,10) 等待 save file 這個圖像出來,如果等超過十秒,執行下一條指令
click(ok) 點擊 ok 這個按鈕
waitVanish(save file) 等待 save file 這個圖像消失




幫大家翻譯這個程式
主要是因為,原來還有這種,結合OCR的技術
(其實不算啦,算是巧妙的利用這種特性,去做文字辨識的功能)

然後為了方便大家
有些程式碼有做聯結
會聯結到官方網站的技術手冊
就當他是一個簡單的教學這樣

另外介紹一篇文章,這篇文章是Sikuli作者vgod所發表的文章
Do the right thing and do the thing right
裡面有一句話我超喜歡的 不重要的事做到200%也不會變重要
這真的是非常重要的觀念啊!!!

3 則留言:

  1. 拜讀到了
    此篇文章對我有所幫助
    感恩^^

    回覆刪除
  2. 大大不好意思 圖片壞掉了 很想學習QQ

    回覆刪除
  3. Lucky Club Casino Site - luckyclub.live
    LuckyClub Casino is a UK Gambling website offering luckyclub online slots, live casino, blackjack, roulette, poker, and online sportsbook. Play games at LuckyClub now!

    回覆刪除