Gå til innhold

[Python] Rafiki - "IDE" for macroing/automatisering.


Anbefalte innlegg

Jeg startet for en stund siden ett lite prosjekt for å lage en samling av macrofunksjoner, for Python, dette har utviklet seg til ett IDE (programmeringsmiljø), med fokus på automatisering.

 

Kommentarer, og diskusjon skjer her: http://www.diskusjon...owtopic=1414664

 

 

Rafiki...


er et Python basert program for å automatisere enkelte (kompliserte) oppgaver. Oppgavene krever ofte kontroll over musen og tastaturet, samt en mulighet for å "lese skjermen" (computer vision). Skriptene skrives i Python, det gjør det enkelt for nye personer å lære, samt så kan spares det mye tid ved å bruke Python versus Lav-nivå programmeringsspråk til slike oppgaver.

 

Rafiki benytter seg av wxStyledTextCtrl som er en fleksibel løsning for syntax-highlighting fra wxPython - wxStyledTextCtrl er en wrapper rundt Scintilla biblioteket.

 

PS: Jeg er på utkikk etter en (erfaren) Python programmerer som kan hjelpe meg med prosjektet - gratis (da Rafiki er non-profit) - se: http://www.diskusjon...owtopic=1512740

 

 

Tidligere MacPy


Jeg har vel holdt på med dette prosjektet i ett år nå (tidligere under navnet MacPy), tidligere var det kun et bibliotek/modul for automatisering. Nå har jeg laget en litt mer fleksibel, og komplett løsning, følte at et nytt navn også ble passende. Jeg er langt i fra mål, men tror jeg at jeg er på rett spor nå, med en rimelig (enkel) IDE, og litt mer gjennomtenkt løsning enn tidligere.

 

 

Rafiki er


  • Open Source.
  • 100% gratis
  • planlagt cross-platform (testet på Windows og enkelte Linux-distroer).
  • Skrevet i Python 2.7 - småting er akselerert i C.

Rafiki har som mål å kunne

  • Finn, samt les farger på skjermen
  • Beveg og klikk musa, klikk på tastaturet
  • Les tekst på skjermen/bilde (Optical Character Recognition)
  • Finn, samt "analyser" bilder/områder på skjermen.
  • Og mye mer i tankene...

Selvfølgelig så kan Rafiki også gjøre alt det Python kan, og alle moduler installert i Python kan også brukes under Rafiki, ettersom vi bruker Python som script-motor (interpreter).

 

Jeg vurderer å ta i bruk OpenCV, da jeg simpelthen ikke klarer komme i nærheten av hastigheten som oppnås ved å bruke OpenCV. Jeg sparer også mye tid på den måten.

 

 

Krav (nødvendige moduler)

... Samt en CPython-installasjon.

 

 

Screenshot


Rafiki Pre-Alpha under Linux Mint Debian Edition

11uw8x1.jpg

 

 

Kildekode: Link til Rafiki på GitHub

Endret av warpie
  • Liker 1
Lenke til kommentar
Videoannonse
Annonse
  • 11 måneder senere...

Går i fra MacPy, har skrevet om hele prosjektet under navnet Rafiki! Nå har Rafiki en ganske rimelig editor/IDE integrert inn (men uferdig), med fullverdig syntax-highlighting og en god del funksjoner på vei! :)

 

Vel, det du ser har jeg kun brukt et par uker på, så det er mye igjen!

Endret av warpie
Lenke til kommentar
  • 3 måneder senere...

Da har jeg fått lagt inn Windows XP i VirtualBox! Det vil si jeg har fått startet med Windows-APIen, har snart Rafiki fungerende for Windows, vel det fungerer, men en del funksjoner som kommer til å bli brukt er ikke portet enda.

 

Forskjeller mellom PIL, og Pillow:

Har også fikset enkelte feil - pakke strukturen til Pillow er ikke helt lik PIL, oppdaget at jeg ikke kunne gjøre:

>>> import Image

Var nødt til å gjøre:

>>> from PIL import Image

Who knew...

 


Har lagt merke til at det var noen uforklarlige problemer om vi kjører Rafiki under OpenSUSE - Det virket som det enten var feil i Python installasjonen (Python 2.7.3 - 64bit), eller noe annet (som jeg da ikke vet hva er), men jeg satser på at det er 64bit som har skylden (muligens wxPython-inkompatibilitet)..:

rafiki.py importerer os - men, så fort jeg skulle kalde en funksjon fra os-modulen (fra en class), så påstod python at os ikke var definert. Løsningen var da noe innmari rart:

import wx
import os
print os.sep # <--- WORKS

xos = os #alias borfore entering class

class test(wx.Frame):
 def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title)
self.Show(True)
try:
  print os.sep # <--- FAILS!! `os` is not defined
except:
  print xos.sep # <--- Renamed = WORKS... -.-

app = wx.App(False)
frame = test(None, 'os')
app.MainLoop()

MEN, dette er ikke noe jeg kommer til å gjøre noe med, så denne hacken vil aldri se lyest.

 


 

EDIT: GitHub er oppdatert med siste prealpha-versjon. w00p w00p!

- Rafiki Pre-Alpha på Windows XP:

2w3pyx5.jpg

Endret av warpie
Lenke til kommentar

Vel bare for å oppdatere, så kan jeg nevne hva som skjer for tiden!

 

Jeg skriver om deler i C, mer spesifikk, "finder.py" skal konverteres til C, og så skal jeg ta det videre der i fra. Til nå har jeg skrevet "find_color(farge, posisjon, tolerance, etc, etc)" i C, og alle funksjoner den bruker (farge-konvertering, sammenligning av farger etc...).

 

Hastighetsforskjellen fra python "find_color(..)" til "cfind_color(..)" var drastisk, men forventet. for å finne en farge med Python tok det 1sekund med RGB-avstand, i C (med Ctypes) tok samme funksjonen 9ms i dette tilfellet. Enda bedre gikk det da jeg forsøkte med HSB-avstand, da tok det 3 sekunder i python, mens kun 16ms i C! :)

Var nok ikke like stor økning ved LAB-avstand, det gikk fra 3 sekunder til 200ms, bra men, ikke helt supert.

- Området jeg itererte over var 1024x768px.

 

 

Nå som det er gjort vil jeg gi et forsøk på å skrive en funksjon for å finne et lite bilde sin posisjon i et større bilde, dette vil også skje i C, da jeg husker mine tidligere forsøk på å gjøre lignende oppgaver i Python.

 

 

PS: Har ingen tidligere erfaring i C, men får det meste til med litt dikkel.

--

Dette er ikke alt som har blitt gjort, men det er det jeg finner nevneverdig.

Endret av warpie
Lenke til kommentar

Nei.

Det er vel likheter mellom mitt prosjekt og sikuli per nå, men, jeg har andre ønsker av funksjoner, og fokus. Selv om prosjektet ikke gjenspeiler dette per nå, så har jeg har et større fokus på "computer vision"... Ta for eksempel automatisering i spill hvor det kreves aktiv opplysning om det som rendres på skjermen (uten å injisere), menneskelige musebevegelser, etc, etc. Personer vil kunne skrive effektive boter kjapt og enkelt, leke seg med små AI-forsøk, generiske algoritmer, etc. Jeg er ikke like hypa på automatisering av desktop oppgaver, noe som jeg tror sikuli egner seg best til, jeg er heller ikke imponert over IDE-en dems, den var direkte heslig.

 

Men, kanskje jeg tar feil, kanskje de faktisk har et fokus rettet mot computer vision, har en nydelig IDE, og i går feiret vi at verden ikke gikk under i 2012! =)

 

Det er sikkert mulig å bygge noe rundt sikuli, men jeg har en "bad feeling about that"...

 

 

#------------------

Bare for å oppdatere statusen kort, så driver jeg fortsatt å programmerer i C for å løse oppgaver som krever hastighet, og jeg later fortsatt som om at jeg får til noe som helst i C... Det går vel sakte fremover, men ingen nevneverdig fremgang.

 

Samtidig så skriver jeg også småbiter i python, da for å utvide antall funksjoner (vi liker alle mange funksjoner og muligheter!).

 

Jeg skal se på linux (x11)-versjonen av "printscreen"-funksjonen da den er så ufattelig treg, (200ms på kun 2.5millioner piksler, Windows versjonen bruker kun 30ms på det samme)... Jeg skylder på xlibs' XGetPixel, tror jeg kan skrive en funksjon som gjør det samme, som da er raskere...

Endret av warpie
Lenke til kommentar

Sikuli er ganske fiddly, enig.

 

Var bare at din beskrivelse av prosjektet i starten iallefall minnet meg mye om den :) Har brukt den til automatisere små tasks (og facebook spill :D ) nå og da, og er vel fremdeles en av de bedre måtene å "programmere" UI der man må bruke screencaps. IIRC så bruker den OpenCV til å finne ting fra skjermskuddene.

 

Uansett, tenkte det kunne være interessant å ta en titt på :)

Lenke til kommentar

Redigert:

Det er vel uansett greit å ha alternativer! :-) At Sikuli bruker OpenCV åpner opp for en hel masse muligheter, men OpenCV er ikke noe jeg vil først forsøke å unngå å ta i bruk i Rafiki, det er litt drøyt å ta i bruk programvare på 100MB, men kanskje verd det??

 

Har tidligere brukt OpenCV i et lib som jeg hadde for meg selv, det var utrolig hva jeg fikk til, hastigheten er helt ekstrem, og slett ikke mulig å matche! Så jeg har veldig LYST til å ta i bruk openCV, men.. 100MB... Får tenke på det.

 

Finner jeg noe interessant i Sikuli, så skal du slett ikke se bort i fra at jeg legger det til ;)

 

---

Da var screenshot på linux (x11) oppdatert..: Screenshot av mine to skjermer med en total oppløsning på 2800*900 (2.52millioner piksler) brukte før 200ms, nå har jeg presset det ned til 55ms! :D

- GitHub blir ikke oppdatert enda, er mye jeg ønsker gjøre ferdig først.

Endret av warpie
Lenke til kommentar
  • 1 måned senere...

Det går litt sakte, leker meg med en del med forskjellige tester/idèer. Har fått fikset litt opp i strukturen, pyntet en del på funksjoner, jobbet med en (enkel) dokumentasjon.
Har også forsøkt å lage en "code browser"/funksjon- og klasse liste, måten jeg har laget denne på ser ikke ut til å være en smart måte å gå frem på: Jeg bruker "foldingen" fra StyledTextCtrl for å finne funksjoner, indentering og plassering, men ble litt for komplisert for min del. Pygments/eller ligende kan kansje være bedre å bruke, men det blir så massivt...

Endret av warpie
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...