chess_moves / src /app.py
hash-map's picture
Upload 22 files
c871a64 verified
Raw
History Blame Contribute Delete
1.28 kB
import gradio as gr
import chess
import chess.svg
from PIL import Image
import io
import cairosvg
from main import get_moves # your engine wrapper
def predict_from_image(img):
# Save uploaded image
img = img.convert("RGB")
img.save("board.png", format="PNG")
# Your function should return (fen, moves)
fen, moves = get_moves("board.png")
# Convert FEN -> SVG -> PNG for Gradio display
board = chess.Board(fen)
svg_data = chess.svg.board(board=board, size=350)
# convert svg to png (since Gradio Image widget expects raster)
png_bytes = cairosvg.svg2png(bytestring=svg_data)
board_img = Image.open(io.BytesIO(png_bytes))
return fen, str(moves), board_img
with gr.Blocks() as demo:
gr.Markdown("# ♟️ Chess AI from Image")
with gr.Row():
image = gr.Image(type="pil", label="Upload Chessboard Image")
board_display = gr.Image(type="pil", label="Detected Board")
fen_out = gr.Textbox(label="Detected FEN")
moves_out = gr.Textbox(label="Predicted Best Moves")
btn = gr.Button("Analyze Board")
btn.click(
fn=predict_from_image,
inputs=image,
outputs=[fen_out, moves_out, board_display]
)
demo.launch()