Vinnaren i pepparkakshustävlingen!
2023-07-09, 20:46
  #1
Medlem
Hej,

Har en flera år gammalt brädspel som jag och några kompisar skapade i inDesign. Nu vill jag konvertera den grafiska spelplanen till en csv fil utan att förlora någon vital data. När jag försöker skapa ett python-program för detta går dock väldigt mycket data förlorad. Jag lyckas att extrahera koordinaterna för varje spelruta, men inte dess text och annat. Är helt ny på python så gör säkert många misstag. Jag har också använt mig av pytesseract som är en OCR läsare. Vad kan jag göra bättre för att kunna extrahera all data?

Här är min kod:

Kod:
import cv2
import pytesseract
import pandas as pd
import numpy as np
from PIL import Image

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

# Ladda in bilden
image_path = "C:\\Python\\output.jpg"
img = Image.open(image_path)
opencvImage = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)

# Konvertera bilden till grayscale
gray = cv2.cvtColor(opencvImage, cv2.COLOR_BGR2GRAY)

# Använd adaptiv tröskling för att få en binär bild
_, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

# Hitta konturer i tröskelbilden
contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# Filtrera bort små konturer baserat på area
contours = [cnt for cnt in contours if cv2.contourArea(cnt) > 500]

data = []

# Iterera över alla konturer
for contour in contours:
    # Hämta koordinaterna för begränsningsrektangeln
    x, y, w, h = cv2.boundingRect(contour)

    # Extrahera intresseområdet (ROI)
    roi = gray[y:y+h, x:x+w]

    # Utför OCR på ROI
    custom_config = r'--oem 3 --psm 6 outputbase digits'
    text = pytesseract.image_to_string(roi, config=custom_config)

    # Lägg till koordinaterna för begränsningsrektangeln och OCR-texten i datan
    data.append((x, y, w, h, text))

# Konvertera datan till en pandas DataFrame och spara som en CSV-fil
df = pd.DataFrame(data, columns=['x', 'y', 'w', 'h', 'text'])
df.to_csv('output.csv', index=False)
Citera
2023-07-09, 21:09
  #2
Medlem
Enterprises avatar
Kan du klistra in en bild av hur spelplanen ser ut (exempel)?
Citera
2023-07-09, 21:28
  #3
Medlem
Citat:
Ursprungligen postat av Enterprise
Kan du klistra in en bild av hur spelplanen ser ut (exempel)?

Hade gärna gjort det, men vill behålla min anonymitet och spelplanen är känd för en allt för stor skara människor. Det är ett klassiskt spelvärde med rutor bestående av olika ikoner och text. Exempelvis ”ta spelkort…” osv…
Citera
2023-07-09, 21:35
  #4
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av MrGeeky
Hade gärna gjort det, men vill behålla min anonymitet och spelplanen är känd för en allt för stor skara människor. Det är ett klassiskt spelvärde med rutor bestående av olika ikoner och text. Exempelvis ”ta spelkort…” osv…
OK, förstår men svårt att hjälpa till då. Jag har själv (för säkert 15 år sen) skapat ett poker-assist program som använde rudimentär OCR-teknik för att läsa kort som lades ut på pokerklienten. Det var också utan avancerade bibliotek så det var pixel för pixel-jämförelse, men fördelen var att antalet symboler att läsa av var begränsat, nämligen 17 figurer (13 spelkortsvalörer och fyra färger).

På samma sätt skulle t.ex. en schackplan vara väldigt lätt att omvandla till CSV, eftersom 1) det finns ett fast och förutsägbart rutnät till spelplan att läsa av och 2) det finns en liten mängd olika slags spelpjäser (6 svarta + 6 vita om jag inte tänker fel).

Däremot ett spel med riktig 3D-grafik skulle bli i princip omöjligt eller i varje fall oerhört komplicerat att läsa av.

Eller missförstår jag dig helt? Vad är syftet med att du ska göra en CSV-fil av den gamla spelplanen?
__________________
Senast redigerad av Enterprise 2023-07-09 kl. 21:39.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback