import streamlit as st from PIL import Image import numpy as np import cv2 import svgwrite import io st.title("Image to Embroidery Converter") st.write("Upload an image and get a stitch-style SVG preview.") uploaded_file = st.file_uploader("Choose an image", type=["jpg", "jpeg", "png"]) def process_image(uploaded_image): img = Image.open(uploaded_image).convert("L") img = img.resize((300, 300)) img_np = np.array(img) edges = cv2.Canny(img_np, threshold1=100, threshold2=200) svg = svgwrite.Drawing(size=(img.width, img.height)) for y in range(1, edges.shape[0] - 1): for x in range(1, edges.shape[1] - 1): if edges[y, x] == 255: svg.add(svg.circle(center=(x, y), r=0.4, fill='black')) svg_buffer = io.StringIO() svg.write(svg_buffer) return svg_buffer.getvalue() if uploaded_file: st.image(uploaded_file, caption="Uploaded Image", use_column_width=True) svg_data = process_image(uploaded_file) st.download_button("Download SVG", data=svg_data, file_name="embroidery_preview.svg", mime="image/svg+xml") st.markdown("### Embroidery Stitch Preview (SVG)") st.code(svg_data, language="xml")