Shapes: reconocimiento de formas de un solo trazo en el dispositivo
Reconocimiento de formas de un solo trazo en el dispositivo que convierte un gesto dibujado a mano en un rectángulo, elipse, triángulo, estrella o línea limpios.
Shapes toma un trazo dibujado a mano, una lista de puntos [x, y], y devuelve geometría limpia: rectángulo, elipse, triángulo, estrella o línea. Genera formas vectoriales precisas, se ajusta a ejes, círculos, cuadrados y rotaciones de 15 grados, y rechaza los garabatos que no son formas.
En Apple añade a PencilKit el ajuste inteligente de formas al estilo de Notas con una sola llamada, sin perder la vista previa en vivo. El propio «Snap to Shape» de Apple es una API privada que las apps de terceros no pueden invocar, así que Shapes cubre ese hueco. Es lo bastante pequeño como para incluirse dentro de la app sin descargar el modelo, y la versión web ejecuta inferencia en JS puro sin entorno de ejecución ONNX ni WASM.
Demo
Rendimiento
Menos de 10 ms por trazo, desde un modelo de 0,2 MB sin entorno de ejecución de inferencia en la web.
Mediciones internas. Inferencia en JS puro en la web, Core ML en Apple.
Casos de uso
Formas inteligentes al estilo de Notas
Añade el ajuste a formas a un lienzo de PencilKit con canvasView.enableShapeSnapping(). Se conservan la vista previa en vivo, deshacer y rehacer, y se cubre el hueco que deja la API privada Snap to Shape de Apple.
Herramientas de diagramas y pizarras
Convierte trazos a mano alzada en geometría precisa. Funciona con los datos de trazo de tldraw y Excalidraw.
Dibujo multiplataforma
El mismo reconocedor se ejecuta en iOS, Android y la web, así que una función de dibujo se comporta igual en todas partes.
Sin descarga de modelo
Con unos 0,2 MB, se incluye dentro de la app. A diferencia de Google ML Kit Digital Ink, no hay un modelo de ~20 MB que descargar en tiempo de ejecución.
Qué hace
- Reconoce rectángulo, elipse, triángulo, estrella y línea, y rechaza lo que no es una forma.
- Se ajusta a ejes, círculos, cuadrados y rotaciones de 15 grados.
- Ajuste en vivo en PencilKit con una sola llamada:
canvasView.enableShapeSnapping(). - Inferencia web en JS puro: sin entorno de ejecución ONNX ni WASM.
Plataformas e instalación
// Swift Package Manager .package(url: "https://github.com/Desert-Ant-Labs/shapes-swift", from: "0.1.0")
import Shapes let shape = try ShapeRecognizer().recognize(points: stroke) // Shape? -> rectangle, ellipse, triangle, star, line
// build.gradle.kts (via JitPack)
implementation("com.github.Desert-Ant-Labs:shapes-kotlin:0.1.0")
import ai.desertant.shapes.Shapes val shape = Shapes.recognize(points) // Shape? -> rectangle, ellipse, triangle, star, line
npm i @desert-ant-labs/shapes
import { recognize } from "@desert-ant-labs/shapes";
const shape = await recognize(points);
// { type: "ellipse", center: [120, 90], ... } or null
Especificaciones
- Formas
- Rectángulo, elipse, triángulo, estrella, línea
- Tamaño en el dispositivo
- 0,2 MB (Core ML de 4 bits en Apple)
- Latencia
- <10 ms
- Entorno de ejecución web
- Ninguno; inferencia en JS puro
Preguntas frecuentes
¿Qué es Shapes?
Reconocimiento de formas de un solo trazo en el dispositivo que convierte un gesto dibujado a mano en un rectángulo, elipse, triángulo, estrella o línea limpios.
¿Shapes se ejecuta en el dispositivo?
Sí. Shapes se ejecuta por completo en el dispositivo: la inferencia ocurre localmente sin ninguna llamada a servidor, así que los datos nunca salen del dispositivo.
¿Qué plataformas admite Shapes?
Shapes se distribuye como SDK nativos en el dispositivo para Swift, Kotlin, JavaScript / TypeScript.
¿Cuánto cuesta Shapes?
Todos los modelos son gratis hasta 100 000 dispositivos activos mensuales por SDK. Inferencia ilimitada por usuario. Contáctanos para licencias personalizadas.
¿Qué precisión o velocidad tiene Shapes?
Menos de 10 ms por trazo, desde un modelo de 0,2 MB sin entorno de ejecución de inferencia en la web.