Texterkennung und -analyse

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
pytom1103
User
Beiträge: 1
Registriert: Freitag 4. Juni 2021, 13:54

Hallo Liebe Community,

ich habe mich in den letzten Tagen mal an einem Stückchen Code versucht, leider nur mäßig erfolgreich und hoffe nun das ich hier Hilfe bekomme. :)

Zunächst einmal der Code den ich bisher habe:

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
from PIL import Image
import pytesseract
import pyscreenshot as ImageGrab
import pyautogui


def run(sA, sV):

try:
while True:

ocr_text = ocr_proz('D:\screenshots\screenshot.png')
print("OCR TEXT ", ocr_text, "OCR TEXT END")
found = search(ocr_text, sA, sV)
if found == True:
break
else:
pyautogui.click(218, 366)
finally:
con = input("j to continue with "+ sA +" +"+ sV +" : ")
if con == "j":
run(sA, sV)
else:
main()


def ocr_proz(image):

img_grab(30, 190, 300, 280)
im = Image.open(image)
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' #depends on installation dir
optext = pytesseract.image_to_string(im)
text = optext.replace("%","").replace(" ","").replace(",","").replace(".","").replace("\n\n","\n") #adjust to the characters used ingame (bug : '+5 gets converted too 45)
return text.lower()


def img_grab(X1, Y1, X2, Y2):

im = ImageGrab.grab(bbox=(X1, Y1, X2, Y2))
im.save('D:\screenshots\screenshot.png')


def main():

print("_____________\n\nAttributelist:\n_____________\n\nstr - int - sta - dex\nincreasedcriticaldamage - decreasedcastingtime\nattack - maxfp - maxmp - maxhp\nattackspeed - speed - criticalchance\n")
search_attr = input("Attribute : ") #attribute we are looking for
search_value = input("Min Values : ") #min value for the attribute
run(sA, sV)

def test_print():

im = Image.open('D:\screenshots\screenshot.png')
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' #depends on installation dir
optext = pytesseract.image_to_string(im)
text = optext.replace("%","").replace(" ","").replace(",","").replace(".","").replace("\n\n","\n") #adjust to the characters used ingame (bug : '+5 INT' gets converted too 45int)
print(text)

def test_img():
img_grab(30, 190, 300, 280)

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Folgender Ablauf soll am durch das Script realisiert werden:
1. Am Anfang des Scriptes soll einen bestimmter Attribut ( z.B. STR) und ein dazugehöriger Mindestwert (z.B. 10) festgelegt werden

2. Screenshot von einem definierten Bereich des Bildschirms erstellen ( def img_grab(X1, Y1, X2, Y2) )
3. Text auf dem Bild auslesen ( def ocr_proz(image)
4. Die im 1. Schritt festgelegten Werte suchen (Attribut + Mindestwert oder höher )
5. Wenn 4. Positiv also am Beispiel STR +12 Script stoppen und auf eine Reaktion warten ( def run(sA, sV) )
5.2 Wenn 4. Negativ also z.b. STR+9 oder STA +20 einen Klick an einer definierten Stelle ausführen und dann wieder bei Schritt 2 beginnen

Aktuell bekomme ich immer den folgenden Fehlercode :
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
main()
File "C:\Users\Tom Pförtner\Desktop\hausaufgabe 4.py", line 47, in main
run(sA, sV)
NameError: name 'sA' is not defined
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

Hallo pytom1103,

dein Code ist leider sehr schwer zu lesen, da du keine [code] [\code] tags verwendest.


Man kann daher nur ahnen, was innerhalb der Funktionen, und was außerhalb ist.

Den NameError bekommst du, weil 'sA' verwendet wird, ohne dass ein Wert zugewiesen wurde
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

ganz dezenter Hinweis

Code: Alles auswählen

search_attr = input("Attribute : ") #attribute we are looking for
search_value = input("Min Values : ") #min value for the attribute
run(search_attr , search_value )
weiter habe ich nicht geschaut
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Benutze keine Abkürzungen. Variablennamen schreibt man komplett klein und man versteht, für was die da sind. Bei sA merkst Du ja selbst gerade, dass das nicht so toll ist. search_attribute ist da schon viel besser. Was ist denn ein proz?

Funktionen sind keine Sprungmarken. Funktionen haben eine definierte Aufgabe und kehren danach zum Aufrufer zurück. Bei Dir ruft main aber run auf und run wieder main.
Antworten