Wilson Mar bio photo

Wilson Mar

Hello. Hire me!

Email me Calendar Skype call 310 320-7878

LinkedIn Twitter Gitter Google+ Youtube

Github Stackoverflow Pinterest

A robot sees what’s on your screen and clicks on it

Gitter

Overview

opencv-sikulix-v01-192x133.png

This is a deep dive from the innnards up:

OpenCV (Open Computer Vision) is a utility used by many Artificial Intelligence packages such as self-driving cars to understand images. It is used to take pictures, recognize objects in the pictures, and the coordinates of objects it recognizes in pictures.

SikuliX uses OpenCV to find the location of a picture provided to OpenCV. SikuliX uses the location returned from OpenCV to mouse click on the screen, or type as if a user is using a physical keyboard.

SikuliX does that and other methods based on a script in its own IDE or in response to an API called by a JavaScript scripting engine managed by Java, as organized by Selenium. Alternately, calls from Python code organized within the Robot Framework.

Optionally, Tesseract provides OCR (Optical Character Recognition) to extract text from pictures.

All this to make you more “productive” at playing games. ;)

The benefit of repeating some action repeatedly (and not get bored or distracted) extends to:

  • Videographers making screencast videos in multiple takes
  • Salespeople use it to power their live demos.
  • Developers and testers going through a sequence of actions to reach a particular point in the UI needing debugging.

Here’s how it works: A picture is taken of your screen(s). and the text and location of objects recognized in the picture is fed to your program to click or type. Your program then takes another round of picture taking and visual object recognition to ensure the results are what are intended.

This uses a different, more generalized, approach than packages such as HP UFT which depended on finding identifiers in the DOM (Document Object Model) behind each internet browser web page.

Versions

There are three versions:

Websites

http://sikulix.com is the new web page.

Detailed docs are at
http://sikulix-2014.readthedocs.io/en/latest/basicinfo.html#sikulix-system-specifics</a (with source at https://github.com/RaiMan/SikuliX-2014-Docs)

(Ignore abandoned sites:
http://sikulix.weebly.com/quickstart.html and
https://sikulix.wordpress.com)

http://sikulix-2014.readthedocs.io/en/latest/
has the most detail, which are repeated several places:

Installer bits are obtained from Ubuntu
https://launchpad.net/sikuli

https://github.com/wilsonmar/sikuli-scripts

Sikuli was started somewhen in 2009 as an open-source research project at the User Interface Design Group at MIT by Tsung-Hsiang Chang and Tom Yeh.

Social

Gitter channel at
https://gitter.im/RaiMan/SikuliX-2014

https://answers.launchpad.net/sikuli

Installation

Automated installers

https://github.com/wernight/docker-sikulix

https://github.com/dhoer/chef-sikulix

Download and compile it locally*

exec java -Xmx512M -Dfile.encoding=UTF-8 -Dsikuli.FromCommandLine -jar /usr/share/sikulix/sikulix.jar “$@”

Manual install

Pre-requisites:

  1. Install JRE
  2. Install the Java language IDE you want to use (Eclipse or IntelliJ)
  3. Optionally, Install Robot Framework (which uses Python)
  4. Download SikuliX

The installer installs its own version of Python.

Instructions below are based on run on Mac 10.12 (Sierra) referencing http://sikulix.com/quickstart/

Install-1.1.1 Dev build

  1. Create a version-specific installer folder:

    On a Mac:

    cd ~
    mkdir sikulix-1.1.1-install
    cd ~/sikulix-1.1.1-install
    
  2. Download from http://nightly.sikuli.de right-click and select Save link As … the link that says:

    sikulixsetup….jar

    At the time of writing, the URL is:

    https://oss.sonatype.org/content/groups/public/com/sikulix/sikulixsetup/1.1.1-SNAPSHOT/sikulixsetup-1.1.1-20170316.001623-90-forsetup.jar

    By the time you read this, the date in the link will change because the code is actively worked on.

  3. Click the “md5” for the MD5 hash (a33616bac6d4f44785b89a02b110a0f8) to verify download integrity using whatever tool you use.

  4. Expand the installer (in Downloads):

    java -jar sikulixsetup-1.1.1.jar</pre> This creates file:
    SikuliX-1.1.1-SetupLog. (which reflects what goes to the Terminal) and an empty SetupStuff folder.
  5. Open the txt file and refresh it to see progress.

  6. Click checkboxes for Jython and for Tesseract in the UI pop-up, then Setup Now.

    sikulix 1 1 mac setup1 1974x1028.png
    (Click to open in full new screen)

  7. Click Setup Now for:

    sikulix-1-1-setup2 976x816
    (Click to open in full new screen)

  8. Click Yes for:

    sikulix-1 1-setup3 1424x294
    (Click to open in full new screen)

  9. Click No to pop-ups about Mac native libs (jar’s) previously installed into /Users/___/Library/Application Support/Sikulix/SikulixDownload_201610061722/…

  10. Click Yes to download a stand-alone version of Python (No to get Jython 2.5 due to 2.7 UTF-8 warning):

    sikulix-1 1 jython 856x368
    (Click to open in full new screen)

    Success!

  11. Click 3 the boxs OK to the pop-up:

    sikulix-hello-working-269x156

  12. Click “OK” to the “Hallo” pop-up.

    Clean up installers

  13. In Finder, Move to Trash the installer file sikulixsetup-1.1.0.jar

    After Install

    QUESTION: How to verify a good install and use the program?

  14. In Finder, move sikulix.app to your user’s Applications folder.

  15. In case you’re curious, view the folders (not necessary unless you run into problems)

    • Extensions folder
    • Lib folder contains the supporting stuff for Jython and JRuby
    • SikulixDownloads
    • SikulixDownloads_versionstamp contains
    • SikulixLibs_versionstamp contains native libraries
    • SikulixStore
    • SikulixTesseract

    Note different files are downloaded for Windows vs. Mac:

    • sikulixjython.jar
    • sikulixlibsmac.jar
    • sikulix.jar
    • sikulixapi.jar

Sample scripts

  1. PROTIP: Search for Sikulix scripts within GitHub:

    Here’s one:

    https://github.com/lowkorn/SikuliX

  2. Click the Example folder, JavaCompile.sikuli, then JavaCompile.py.

  3. If you intend on updating this repository and contributing changes back to the author, sign-in to your own account and fork the repository under your own account.

  4. PROTIP: Use Git to store Sikuli scripts. Install a Git client.

  5. PROTIP: Create a Git folder to hold files associated with GitHub.

    On a Mac:

    cd ~
    mkdir gits
    cd gits
    
  6. Create a folder to hold sikuli repositories created when cloning from others:

    cd ~/gits
    mkdir sikulix
    cd sikulix
    

    You are now in the folder where you clone scripts from other repositories on GitHub.

  7. Create a folder to hold repositories from lowkorn:

    
    mkdir lowkorn
    cd lowkorn
    
  8. Clone one I’ve found:

    
    git clone https://github.com/lowkorn/SikuliX
    

    Response:

    Cloning into 'SikuliX'...
    remote: Counting objects: 34, done.
    remote: Total 34 (delta 0), reused 0 (delta 0), pack-reused 34
    Unpacking objects: 100% (34/34), done.
    

    Repositories cloned locally you can later update with changes made, using commands such as:

    
    git remote add upstream https://github.com/lowkorn/SikuliX
    git remote -v
    git pull upstream master
    

    Response:

    remote: Counting objects: 34, done.
    remote: Total 34 (delta 0), reused 0 (delta 0), pack-reused 34
    Unpacking objects: 100% (34/34), done.
    From https://github.com/lowkorn/SikuliX
            * branch            master     -> FETCH_HEAD
            * [new branch]      master     -> upstream/master
    

    Alternately, to do a two-stage sync per https://help.github.com/articles/syncing-a-fork/

    git fetch upstream
    git checkout master
    git merge upstream/master
    
  9. On GitHub.com, sign-in to your own account and create a repository (named sikulix-scripts in this example) with a READM.md file.

  10. Clone your own sikulix-scripts repo to your laptop (in this example, substitute “wilsonmar” with your own account name):

    On a Mac:

    cd ~/gits/sikulix
    mkdir wilsonmar
    cd wilsonmar
    git clone https://github.com/wilsonmar/sikulix-scripts
    cd ~/sikulix-scripts
    

    Into this folder the SikuliX IDE should read and save scripts.

SikuliX Commands

SikuliX can be called by batch scripts from a Terminal/Run command line.

SikuliX recognize both one-character flags and longer options:

sikulix –args -i

-t or –test sikuli-file

-r or –run sikuli-file

-s or –stderr

Use IDE for SikuliX Scripting

  1. In your Mac’s Finder, get to Applications folder by pressing shift+command+A.

  2. Type S and double-click the SikuliX IDE app to open it.

    sikulix starting popup 198x154

    The IDE should appear:

    sikulix-1 1 1-ide-landing-1022x699
    (Click to open image in full new screen)

Next, let’s get some sample files the program can work with.

SikulixAppData folder

  1. Press # to insert a comment.

  2. Press Ctrl+S to save the file as a “.sikuli” file.

    PROTIP: A keyboard press is quicker than moving the mouse.

    Take a picture

  3. Create a small picture where you want Sikuli to click or type.

    This can be done by clicking the “Take screenshot” icon, positioning the mouse to the top-left corner, drag to the lower-right corner, then release the mouse.

    Or press a hot-key (Command + Shift + 2).

    QUESTION: If a dialog disappears with mouse motions, press the keystroke to take a picture of the screen, then use a photo editing program to cut out an area, and paste the little picture into the IDE.

    SikuliX Actions and Methods

  4. Open an app:

    PathFirefox = r"C:\Program Files (x86)\Mozilla Firefox\firefox.exe"
    App.open(PathFirefox)
    

    PROTIP: Instead of the hassle of using double slashes to specify special characters, put an 4 in front of calls to take the backslash and quotes as part of the word/sentence.

  5. Define variables:

    imageExpected1=3;
    
  6. Define action:

    click(SearchImageButton)
    wait(imageExpected1)
    type("hello")
    
  7. Type the verification actions.

  8. Save a sample script with comments after # character:

    On a Mac:

    http://doc.sikuli.org/tutorials/helloworld/helloworld-mac.html

    On Windows:

    http://doc.sikuli.org/tutorials/helloworld/helloworld-win.html

  9. Run the file.

    More actions

    http://doc.sikuli.org/genindex.html is an alphabetical index of all methods and command options.

    JavaDocs of classes are at
    http://nightly.sikuli.de/docs/index.html

    https://github.com/RaiMan/SikuliX-2014/tree/master/StuffContainer/testScripts
    has several sikulix scripts.

Videos

jobiaj

  1. Intro and setup 13 Nov 2015

https://www.youtube.com/watch?v=3LRm3fJQ6AU

  1. The Basics shows how to (in Windows) open the Calculator and click a calculation.

  2. Conditional Automation

  3. Conditional Looping

  4. Game Example

Others:

https://www.youtube.com/watch?v=8y41vKeGM9U 5 Apr 2016

https://www.youtube.com/watch?v=I-UYoezac4Q

https://www.youtube.com/watch?v=3LRm3fJQ6AU 24 Jul 2016

https://www.youtube.com/watch?v=H2cK85z_8bs Keywords and Misc Stuff</a> 17 Nov 2016

Playlist of Sikuli scripting (no sound)

Sample scripts

  1. Navigate to where you can open a .sikulix file

    sikulix open sample

  2. Switch to an internet browser:

    woodplastic has a Windows cmd file to invoke a jar file

    wait(Pattern("1437608642600.png").similar(0.90),15)
    click(Pattern("1437608666644.png").similar(0.90).targetOffset(82,125))
    



  3. Let me know if you find others.

  4. PROTIP: Additional Sikuli scripts from the internet:

  5. Let me know if you find others.

Alternatives

Java

https://github.com/lowrin/sikulix-test/blob/master/src/main/java/Main.java

How to use Sikuli Java API - Part 2

Jython

https://github.com/saint1729/SikuliX-Jython

Robot framework

https://github.com/jaredfin/SikuliXRobotLibrary

Scala

https://github.com/haradakazuy02/SikulixScript

Cucumber: https://github.com/dilcom/sikulix_formatter

Fitnesse: https://github.com/sergebug/SikuliX-fixture

Ruby

https://github.com/rssdev10/sikulix-ide-templates

Resources

http://www.praqma.com/stories/automating-gui-tasks-with-sikuli-and-jenkins/

More on IoT

This is one of a series on IoT:

  1. IoT Acronymns and Abbreviations

  2. IoT Apprentice school curriculum
  3. IoT use cases
  4. IoT reminders prevent dead mobile battery
  5. IoT ceiling dumper

  6. IoT text to speech synthesis
  7. IoT AWS button
  8. Intel IoT
  9. IoT Raspberry hardware
  10. IoT Raspberry installation

  11. IoT Clouds
  12. Samsung IoT Cloud

  13. Predix basics
  14. Predix installation
  15. Predix services
  16. Predix programming