Sikuli帶來的意義與無限的潛力

這禮拜真是我人生中最瘋狂的一天了..。

自從Sikuli發表後,我本來還打算一封封回覆所有的問題,後來發現排山倒海而來的郵件和留言速度遠大過我能閱讀和回覆的量。前幾天我優先把Sikuli比較大的bug和一些平台問題修掉,昨天釋出了0.9.7讓各平台都提升到同樣的版本(只剩Linux還是沒有抓圖的快捷鍵了),整體運行的速度也提昇了不少,並且新增了一個.skl格式讓人能透過command line或double-click直接執行script。如果之前下載過舊版的朋友強烈建議升級到0.9.7。

修完緊急的bug後,我們會再陸續補上一些文件和教學,說明一些常見的問題要怎麼解決。例如說,畫面上有多個一樣的元件(像check box, radio button)要怎麼處理如果按特殊鍵或是在不同的鍵盤排列上使用(用dvorak的人還真不少,一堆人跟我說type()在dvorak上會有問題)..。

但這篇文章中我想談的不是被上萬人盯著的壓力,而是關於Sikuli能帶來的改變,以及未來的潛力。

有些人說Sikuli看起來只是另一個按鍵精靈或是AutoHotkey,但其實Sikuli還有許多在這個直觀意義之上的潛力我們沒直接說出來。

第一,Sikuli最重要的革命是程式碼的可讀性(readability)和易用性(usability)。把螢幕截圖直接放在程式碼裡面,讓人能直接「看到」他想控制的東西,這是從來沒人想過的事情。以往的方法,不管是透過應用程式自己的程式介面(API)或是透過XPath拿到網頁裡的某個元件,都是只有程式設計師才能寫、才能讀懂的神秘外星語言。機器喜歡精確的語言,人類花越多力氣把事情描述的越清楚,機器就越容易讀懂。

可是,有沒有人想過,人類發明這麼多程式語言來操控電腦,究竟是便利了人類還是便利了電腦?現在我們每天用的程式語言,不管是C++、Java、C#、Python、Javascript..都是只有程式設計師才能寫才能讀的語言。更諷刺的是,這些「現代」語言跟五十年前就有的LISP、Fortran本質上並沒有什麼不同,一樣都是純文字,一樣要求精確嚴謹的語法,一樣是架在百層高塔的系統架構上。即使是訓練有素的程式設計師,要寫程式做些有用的事情也都得先翻翻充滿黑話的說明文件,看看需要的功能對應到什麼函式,運氣不好可能還得學個COM+之類的鬼東西才能使用。

如同我在追求神乎其技的程式設計之道(十):程式設計師的生產力之謎中提過的一樣,即使同為程式設計師,運用電腦的效率依然會有數十倍甚至百倍的差距。如果每天都要按一百個按鈕,程式設計師可以找到適合的命令列工具使用,或是自己寫程式呼叫應用程式提供的函式,就可以用一個按鍵取代這一百個按鈕。那完全不懂程式的一般使用者呢?恐怕只能兩手一攤任由別人寫好的軟體擺佈。也就是說,即使一個人掌控了鍵盤和滑鼠,但實際上卻是被別人的軟體限制住,如此使用電腦其實完全沒有自由可言。

Sikuli的革命把寫程式的門檻降低了,人們和系統或應用程式溝通不再需要讀用黑話寫的文件,也不用搞懂底層的架構是怎麼做的,只要把平常使用鍵盤滑鼠的方式,再加上想控制目標的螢幕截圖,就可以輕易寫成能自動執行的程式。

Sikuli Script範例

除了好寫外,任何人看程式和圖都能很容易讀懂程式到底做了什麼事,於是Sikuli很自然就能成為一種寫教學文件的最佳媒介。以往的教學文件常常step by step列出使用者要做的事,加上使用者應該要看到的畫面,很巧的是這兩者Sikuli script都有。但比傳統的文字描述更好的是,只要把Sikuli的指令混用在文件中,或是透過簡單的對應把文字描述轉成script,這樣一份文件不只人能看懂,連電腦都能執行這些步驟並且一步步告訴你要按的按鈕在哪裡。

第二,除了直觀上的GUI自動化外,其實Sikuli更重要的意義是提供了一種把使用者操作UI的互動過程記錄下來的新方法。以程式設計師的黑話來說,這可以說是GUI操作過程的serialization,如果用一般人的方法說,這就是把人機互動過程「數位化」的一種方法。

電腦發展的過程中,一條必經之路就是把人類周遭的一切資訊全部數位化。一旦資訊被數位化,就可以輕易儲存在電腦裡,或是透過網路分享給別人,電腦科學家也才能發展更多方法來處理、分析、運用這些資料。在21世紀的今天,人們把聲音、影像、文字全都數位化了,所以我們可以輕易的複製、傳播、使用這些資訊。但在人們如此依賴電腦的今天,人和電腦的互動過程其實一直沒有一個好方法可以記錄,所以更別提要複製或是分享這種互動過程。

而Sikuli在這個人機互動領域開了一條全新的道路,這也是為什麼Sikuli的論文是出現在「User Interface Software and Technology」的會議上,而不是在討論程式語言的會議上。

人機互動的過程一旦能被一個標準的方法記錄下來,接著就能複製,就能分享,就能讓電腦自動執行或是演算這些過程。未來的應用方式有千百種,唯一的限制只是看我們的想像力而已。

第三,Sikuli把電腦視覺的研究領域,從真實世界延伸到電腦的桌面上。這點說起來真是很有趣,電腦視覺的研究人員數十年來嘗試想讓電腦能像人一樣「看」這個「真實世界」,可以像人一樣認得別人的臉,或是認得馬路長什麼樣才能讓電腦自動開車,但卻沒什麼人想到讓電腦「看」電腦自己輸出的畫面。在技術上來說,電腦螢幕上的資訊全都是電腦自己產生出來的,沒有光影問題,沒有角度問題,辨識上的難度遠低於真實世界所需的難度。以現在的電腦視覺技術來說,辨識螢幕上的東西簡直可以說是殺雞用牛刀。

Sikuli把電腦視覺和人機介面兩個研究領域打通了,有很多古老的問題(例如OCR,文字辨識)在真實世界很難解決,但在電腦桌面上卻可能可以發展出又快又準確的方法。Sikuli也可能激發更多人把電腦視覺應用到軟體介面上的創意,讓使用者介面不只是簡單使用,也能讓每個人能真正隨心所欲的操控電腦。

第四,建立在Java平台上並且open source的Sikuli,很有潛力能讓每個人都能打造給自己的專屬程式。

Sikuli不只是提供了一堆自動按滑鼠和按鍵的指令集而已,每一個Sikuli script都是一個和Python語法相容的程式。這意味著你可以使用任何的Python語法,不管是迴圈、if、定義function、或是定義class,每一個Sikuli script都是一個真正的Python程式(嚴格來說,應該是Jython,但這中間的差別並不太重要)。除此之外,Sikuli核心是跑在Java平台上,所以可以輕易的使用任何Java的函式庫。例如說,你可以用swing建立一個新的視窗包含了兩個按鈕,按下第一個就用Sikuli執行每天上班前的例行工作,而按下第二個紐則執行下班前的例行工作。會寫程式的人可以輕易混用Sikuli和現有的函式庫,把Sikuli當成和系統或其他應用程式溝通的媒介,並在上層建立自己的新介面。也就是說,這就是桌面環境的mashup,可能的應用是無限大。

雖然不懂程式設計的人,難以撰寫複雜的GUI程式或是資料處理。但Sikuli結合了現有的平台並且open source,這樣的好處是會有來自世界各地有閒有能力的人幫忙讓Sikuli變得更簡單更好用,並結合其他的程式語言或是函式庫讓寫程式的整體門檻大大降低。

雖說Sikuli現在還不是那麼完美,但我相信open source會加快Sikuli的發展,讓更多有興趣的人進來幫忙。很多技術上的問題其實都好解決,例如有人問到是不是桌面換個skin後script就廢了,或是能不能在背景執行script。這些問題其實都有好幾種可能的答案可以解決,只是有沒有必要現在就做而已。技術問題向來都不是能阻擋我的絆腳石,真正困難的只有突破自身創意和想像力的界線而已。

每個人使用電腦的方法都不同,軟體公司設計的軟體也只能按照大部分使用者的需求和習慣所設計。但不論有多少功能,總是不可能涵蓋到每個人的大大小小需求。讓每個人都能寫程式(不論他們是不是知道他們正在寫程式)是我一心嚮往的目標之一,或者說是我希望每個人都能100%按照自己的意願花最少力氣完成最多工作。但在今天的電腦環境上,不會寫程式就有太多事都無法做到,即使會寫程式的人,也不見得願意花那麼多力氣去研究讓自己未來更省力的方法。

這個問題的癥結不在於使用的人太懶惰或是不夠聰明,而是電腦太難用。一個人得經歷幾年的訓練才能熟悉這種用程式「掌控」電腦的感覺,實在太不合理。或許沒有人想研究讓寫程式變得更簡單是因為怕丟了自己的飯碗,但我偏偏就覺得每個人應該要有聰明使用自己工具的自由,而不是反過來被工具限制了自己。所以,我希望Sikuli能讓更多人把使用電腦的自由搶回自己手中,而不是被軟體工程師們掐住脖子動彈不得。

寫到最後,能參與Sikuli這個project其實最需要感謝的人是和我合作的Tom Yeh,在我進MIT前他就在跟我老闆Rob Miller討論用螢幕截圖來搜尋文件的可能性,所以其實在我還在當兵時我們就已經搭上線開始合作了。後來我到了MIT後,一連串的討論就激發出許許多多混合螢幕截圖和電腦視覺所產生的點子,其中第一個成果就是現在的Sikuli。

Sikuli Script只是這一串研究的開端和基石,在這之上其實我們還做了很多東西。例如說我們已經有一個能錄製螢幕和使用者動作的程式,可以把使用者的動作自動轉換成Sikuli Script,也就是說使用者一行程式都不用寫,只要把想做的步驟做一次,程式碼和螢幕截圖就會自動產生出來讓你修改或直接使用。用這個錄製程式,我們可以輕易的在現有的GUI系統上觀看全系統的操作歷史,甚至是自動redo某一部分操作。有這些系統做基礎,我們能做的事情實在太多了,我只怕自己時間和能力有限,沒辦法把所有的點子都做出來。所以,這也是我們把Sikuli公開的目的,希望開放這塊寶石後,能有更多人發揮想像力發明出更有趣更有用的東西來,並徹底打破現今使用電腦的方法,一起來改變世界吧!

50 thoughts on “Sikuli帶來的意義與無限的潛力

  1. vgod:

    Great Job!!!

    可是我還是有疑問,這個程式的『寫法』的確是新的,但是應用層面上呢?以目前 Sikuli 來看,的確很適合應用在流程自動化上,所以大家才會說他像 autohotkey,因為做的是『一樣的事』,你們有想過他適用於其他的什麼領域嗎?

    例如 screen shots 變成了照片??跨到現實生活應用中??

    Mark

  2. 大大妳真厲害
    我剛在T客邦的網站上看到這個新程式語言還不懂怎麼抓圖寫程式
    稍微研究一下以後就只有一個字:神人XD
    而且超有創意的
    還有可以給我您的即時什麼的嗎??
    有問題時想問您~
    我今年國三

  3. 想要說的話太多了, 自從看到 Sikuli, 基本上腦內大爆炸, 第一次得要嘗試用 mindmap 先打草圖才能夠發文談 Sikuli 了

    如果以 Client / Server 的角度思考, 傳統上, 能夠自己寫 Server 的人, 在 Client 端擁有最大的掌控權(這是有一次我聽 Jeremy Allison比較 Novell NCP 跟 SAMBA 團隊要使用微軟的 SMB 通訊協定的差別時, 他做的比較)

    但是現實生活裡, 就算你是擁有十八般武藝的程式設計師, 同時掌控 Server / Client 也是可遇不可求的機緣. 以我個人以前做網管收告警(Fault Management)的經驗, 基本上我們是很賤(誤)的, 伺服器吐出來什麼樣格式的告警, 我們都得想辦法吃下來 XD

    在”只能從 Client 端努力”的前提下, expect 這個基於 Tcl 的 script 處理的是文字介面, 你之前介紹過的 Chickenfoot 處理的是網頁, 現在 Sikuli 把更多可能性交給了更多人 😀

    ==
    不過這樣 clicking monkey 就要失業啦 :p

  4. 以前逛逛也就完了,现在才知道是在看大牛的博客。
    看过了视频教学录像,太震撼了。
    amazing,进来瞻仰下。
    我也是搞软体的,水平真是天壤之别啊。

  5. sikuli从研究角度来说,的确有非常多的创新点,也的确是革命性的讲图形引入了程序语言从而一定程度简化和直观了程序设计。不过我也有一楼朋友的问题,就是这个sikuli的图形驱动的程序语言究竟能有怎样的可用性? 我在读了论文和看了演示视频后,依然很难在脑海中描绘出一个场景来突显sikuli优越的地方,以及可用的地方。不知道是否能说明下?

    对于你文中提到的程序语言一直以来以文字形式存在,我觉得主要原因还是文字才能描述并且让计算机理解逻辑吧。当然我不清楚是否可能有一天计算机可以根据流程图直接理解从而简化程序设计?不过至少目前而言,sikuli还是无法来应付逻辑而只能基于我们看到的GUI来完成自动化GUI操作的程序编写。

    另外,我关心的一个问题就是您文中也提到的,用户操作的序列化,我这里关心的是,是否有可能进一步的,从图形转而向这种序列化(或者更直观的可以称作影像?)来进一步简化程序设计?

    说了那么多,最后再赞下!真的很棒!本人不才,也是搞HCI的,以后有机会希望能多交流,呵呵

  6. 我想把屏幕最右边的滚动条拖到接近最下面,大概95%的地方,如何实现啊,
    我尝试drapDrop(“开始的图片”,”最下面的图片加上左边的一些特征标志”)
    但是失败了

  7. Pingback: 使用 Sikuli 实现同时登录两个 Dropbox 帐户 | Solrex Shuffling

  8. Pingback: Tweets that mention Sikuli帶來的意義與無限的潛力 | vgod’s blog -- Topsy.com

  9. Sikuli是個很有趣的工具,背後應該也有一些更深刻的想法!
    從截圖+simple script的角度來看,這個工具很方便。
    從heavy programming角度來看,程式是composition+combination+概念的抽象化,
    而且有大部分是透過code generation來完成。
    以截圖辨識的方法,要如何做到code generation或是描述無法用圖形表達的抽象概念呢?

    另一個疑問是如果有一套各個domain的圖庫,不知道Sikuli能否利用這個圖庫來完成更複雜的programming?

  10. ‘萤幕截图来搜寻文件’,这个比一般的文字搜索有什么优势呢?比如更加便利?

  11. 自己這一兩年也慢慢醞釀與你相同的想法, 一方面愈從Design pattern 研究,才發現那不是一般人可以在短期內運用自如的東西, 另外,目前依舊領先的VS 20xx開發環境,在我看來也是落後到不行, 從程式碼角度, 有太多門檻讓學習者,設計者甚至老闆困惑它如何快速,有彈性,有效率的產出,以及明白它的價值, 所以我覺得軟體的年齡也許太短,包括作業系統,依舊太複雜,一般人用到的功能不到10%, 卻要付費買所有的功能, 這也許是另一個經濟層面的問題, 不過站在使用者立場, 其實非常不合理…
    感謝您與您團隊的努力, 希望未來的軟體可以慢慢協助大家發揮想像力,讓工作更輕鬆, 發揮更大價值~
    Charles

  12. 你做的正是我想做的
    只是你真的很厲害
    非常地感謝你,讓我有現成的可以用。

    請問有計畫讓screen shot從web cam來嗎?
    這是我想要的第二步,不知道你會不會加這個功能?

  13. 真是太厲害了….只能說神乎奇技,把寫程式的方式簡化,也讓office的錄製巨集完全敗下陣了

  14. 我遇到一个问题:
    除了你描述的:如“
    有多个一样的元件(像check box, radio button)要怎么处理、如果按特殊键或是在不同的键盘排列上使用(用dvorak的人还真不少,一堆人跟我说type()在dvorak上会有问题”

    我的画面元件里有目录文件夹及文件夹名称的文字,只有点击文件夹才可以打开,而用简单的
    click(图片),它只能自动点击文字内容,那么我该怎么控制它,让他在图片的文件夹图片和文字内容间选择文件夹而不是文字,如果没有文字,就无法图像匹配。

    总而言之,向你请教:是否有脚本语言,先寻找锁定图片的范围,再在此图片的范围内进一步锁定操作的具体图片位置。

    另外:还有一个问题,如何实现拖拉屏幕的进度条? 谢谢,期待回音

    • 請問mngogo:
      是否有腳本語言,先尋找鎖定圖片的範圍,再在此圖片的範圍內進一步鎖定操作的具體圖片位置,
      這個問題是否有解,
      煩請解惑,感謝。

  15. Hi,

    Sikuli! What a wonderful idea and job! Thanks for your efforts!
    By the way, I’m wondering if Sikuli support Chinese character so far? or in the future?
    I did some tests, it seems Sikuli cannot figure out Chinese yet, right?

  16. Sikuli的DEMO才看一半, 我已經被這個創意徹底的震撼,搞了幾年的軟體,從來都是用code的角度思考程式邏輯,壓根想都沒想過這個圖形化控制的概念. 這真是一個革命,如果把Sikuli整合到unit test 的領域, 這將是web developer夢幻的測試平台; 還有對企業來說,這是簡化流程的殺手產品,只要把CRM或ERP操作流程錄製下來,依據不同狀況來執行,可以節省大量的人力與$$(現在很多亢員就是每天跑跑 ERP,抓一些data 分析).總而言之,非常期待Sikuli的成長!!

  17. 您好

    其實今天之所以會看到Sikuli,其實是從「追求神乎其技的程式設計之道(十):程式設計師的生產力之謎」這篇文章,再慢慢看過來的。看了Demo之後,Sikuli可以用以撰寫一系列操作的腳本(script),就如同command line中的script一樣,只是傳統的AutoHotKey往往只能預先定義好的路徑,而今天則可以如同人類一樣,用眼睛去認出畫面的按鈕。也許當這些操作行為,可以轉換成數位化的描述後,未來可以透過人工智慧,在特定的情況下來選擇與操作不同的腳本,不再像過去一樣只能打打怪、喝藥水之類的。

    不過這算是腳本的撰寫,不知道對於程式撰寫而言,還是否可以用圖形來描述,例如:排序等等演算法?

  18. 看了您的軟體,
    不知道是否可歸類為軟體工程裡面的軟體測試(或自動化)?
    QTP(quick test professional),xxx runner都是這類軟體測試(或自動化)的軟體,
    不知道您的軟體, 與高級的軟體測試相比, 是否有比較突出的地方呢?

  19. Pingback: MFA | study » Blog Archive » [MIT] Massachusetts Institute of Technology麻省理工學院

  20. 請問roland hd-1有支援dtxmania裡面的雙踏遊戲嗎?因為最近想買一台,但不知道實際上在遊戲中的支援度如何?您玩起來感覺如何?目前網路上只有您的文章有,所以想再跟您確定一下,感激不盡,還有您的demo影片好像刪掉了,不能看說。

  21. Pingback: 米迦勒:几个有意思的编程语言 « 米迦勒的博客

  22. Hi 我是MIT design and computation group的學生

    不好意思打擾你
    我跟我group的人 想拜訪你
    由於我們有興趣的 是如何讓designer 方便的用程式作設計
    我們也都在MIT
    所以希望能有機會見你一面

  23. 敢問 貴軟體與市面上的巨集程式有何差異性? 我以前用Marco Express, 連程式都不用寫, 直接錄就好; 後來接觸輕薄短小的AutoIt, 基本控制的程式碼也不算難啊XD

  24. 看了文章使用過Sikuli後,深覺版主好像是希臘神話從天上偷了火種的人!若Sikuli概念以後能成熟完備,必為劃時代的產物!有下列感想看Sikuli是否有可參考之處:

    一.是否可用一”問卷方式的工具列”,讓使用者解決替代迴圈.陣列.運算子.資料庫…等等程式語言上的功能!

    舉例:如按下一”執行次數按鈕”,出現一個視窗上面有好幾個選項,第1個選項是上面圖型執行幾次停,第2個是選項是上面圖型若有出現則執行下面圖型動作,若沒有停止執行!第3選項….等等用此替代迴圈!

    再舉例:如按下”資料按鈕”,則出現一個視窗上面有好幾個選項,第1個選項是:你有什麼資料想讓Sikuli機器人處理執行下面圖型動作!第2個選項是:若執行下面圖型有任何資料請貼上剪貼簿!第3個選項…..等等!用此替代陣列!以此類推!

    二加入”時間按鈕”按一下跳出一視窗詢問,你要讓Sikuli機器人各幾點幾分執行程式,此功能用途很多!如:下班後開啟監視器運作,開啟微波爐.電鍋,關閉電腦等!

  25. hi,最近在尝试在ubuntu上使用sikuli,但run的时候总不成功,能否给出详细的ubuntu上的sikuli安装过程,非常感谢了:)

  26. Pingback: 高級版按鍵精靈,同時也是UI自動化測試的好幫手 – SIKULI - Inside

  27. 如果國軍保修單位使用Sikuli…會爽死一堆XXX管制士
    因為他們每天的工作就是操作保修系統,日復一日都一樣的動作…

  28. Pingback: SIKULI… | mario's view

  29. Pingback: Fred Kuo :: Blog » Archive » JDF走不出來,Sikuli概念式達成?!

  30. 例如說我們已經有一個能錄製螢幕和使用者動作的程式,可以把使用者的動作自動轉換成Sikuli Script… 請問能告知如何得到此一程式呢? 謝謝您

  31. vgod 你好 !

    我剛開始認識 Sikuli,
    現在在嘗試做一些簡單的程式,
    有些題想請教你,
    Sikuli 可否連接到 Microsoft Office Access 呢 ?
    還是要用 MySQL/MS SQL/PostgreSQL (如它說明) ?
    謝謝你 !

    SAM

  32. Hello vgod:
    有點sikuli的問題想請教,
    我的想法是書櫃有很多格子,
    每個格子各有不同的用意,
    每個格子都一樣大,
    例如
    A這個格子裡面的書都是要給A先生,
    B這個格子裡面的書都是要給B先生,
    有沒有辦法利用Sikuli的圖像辨識,
    把整個書櫃拍一張照片,
    然後利用Sikuli告訴我,
    A這個格子裡面有什麼書,有幾本?
    B這個格子裡面有什麼書,有幾本?
    目前都是用人工去清點數量,
    煩請解惑!謝謝。

  33. Pingback: [軟體]sikuli很好用… | JustFLY::JustBlog::

  34. 資訊人vgod能有此突破性眼光與想法,並付諸實行,實在難得。真乃造福人群,功德無量。早上試了一下Sikuli,真是簡捷好用。一直想搞自動化測試,今日方能如願。真是高興。上回公司出錢讓我去上TESTING之課程,小的舉手發問Equinox IT講師關於自動化測試,講師則說不在今日的課程內。小的認為系統測試不談自動化測試,無異紙上談兵。

  35. Pingback: 無·名稱 | Sikuli的入門使用

  36. Pingback: sikuli使用实例,使用 Sikuli 实现同时登录两个 Dropbox 帐户 – 测试之道

  37. 請問一下sikuli可以做到這個功能嗎?
    例如一張圖片中有3個數字,sikuli能打開圖片並讀取圖片中的數字之後把這三個數字打在記事本中嗎?

Leave a Reply

Your email address will not be published. Required fields are marked *

*