Avatar billede Weedfald Juniormester
23. december 2017 - 14:10 Der er 1 kommentar

At få sit Pyscript til at søge efter billeder på skærmen?

Mit spørgsmål går på hvorledes at man kan oprette en "billededatabase med en masse forskellige .png billeder" og så få sit program til at søge efter disse billeder på skærmen? eksempel:

Python søger efter alle billederne i databasen på skærmen
Når billedet dukker op på skærmen printer programmet koordinaterne.

Jeg er ikke bleg for selv at læse op på det, men jeg syntes ikke umiddelbart at jeg kan finde nogle tråde hvori det er beskrevet, så man kan forstå det.
Pft.
Avatar billede S. Enevoldsen Juniormester
25. december 2017 - 16:52 #1
En umiddelbart tanke er dele problemet op i disse 2 dele.

1. Skaffe et screenshot

Det kan muligvis gøres med https://pypi.python.org/pypi/pyscreenshot eller et andet Python bibliotek. Ellers skal du nok ud i noget C/C++ og noget integration med dit OS eller Direct3D/OpenGL, f.eks.:

https://www.codeproject.com/Articles/5051/Various-methods-for-capturing-the-screen
https://stackoverflow.com/questions/5069104/fastest-method-of-screen-capturing

eller koden til hvordan OBS gør det på Windows f.eks:

https://github.com/jp9000/obs-studio/blob/master/plugins/win-capture/dc-capture.c

2. Finde ud af om der et match i databasen.

Her mangler der detaljer. F.eks. er det altid PNG? Skal det matche samme størrelse? Skal pixelfarverne matche præcist? For hvert af spørgsmålene svaret er nej til bliver løsningen væsentlig mere kompliceret.

Der er også spørgsmålet hvor ofte det skal ske, f.eks. er det nok ikke realistisk at tjekke hele skærmen 60 gange i sekundet for et match. Også, kan billederne være hvor som helst på skærmen. Ændrer billededatabasen sig regelmæssigt?

Hvis vi antager du skal søge hele skærmen for et match, så er det nok sjældent er et match; det er undtagelsen ikke reglen. Så et princip for denne løsning kunne være at afvise at et billede er et bestemt sted på skærmen så hurtigt som muligt. Derfor kunne det måske bære brugbart med et "indeks" over billederne i databasen. Det vil sige udvælge nogle bestemte positioner i billederne, f.eks. det øverste venstre hjørne 4x4 pixels. Måske de andre hjørne, et par pixels i midten. Så kan du for hver eneste position i skærmbilledet starte med at tjekke om f.eks. det øverste venstre hjørne matcher, og derefter om resten af "indekset". Hvis pixel ikke matcher noget "indeks" så fortsæt til næste position i skærmbilledet. Hvis indekset matcher, kan du begynde at se om et potentialt match er der ved så at tjekke for hele billedet i databasen op med dit screenshot.

Hvis du bruger pyscreenshot ovenover, står der det kan give det dit skærmskud til PIL/Pillow, som er velegnet til at bearbejde billeder.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester