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. El modelo 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. El modelo es lo bastante pequeño como para incluirse dentro de la app sin descargar el modelo, y la versión web usa una canalización local de WebAssembly con inferencia de LiteRT.js.
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 mediante una canalización local de WebAssembly con LiteRT.js.
Plataformas e instalación
// Swift Package Manager
.package(url: "https://github.com/Desert-Ant-Labs/shapes", from: "0.5.0")
import Shapes
let shapes = Shapes()
let shape = try await shapes.recognize(points: stroke)
// Shape? -> rectangle, ellipse, triangle, star, line
import PencilKit
import Shapes
// Live smart-shape snapping on a PencilKit canvas, in one line.
// Pause after a stroke to preview the fit, lift to snap. Undo-safe,
// and it uses the same recognizer, bundled by default.
canvasView.enableShapeSnapping()
// build.gradle.kts (Maven Central)
implementation("ai.desertant:shapes:0.5.0")
import ai.desertant.shapes.Shapes
val shapes = Shapes(context)
val shape = shapes.recognize(points)
// Shape? -> rectangle, ellipse, triangle, star, line
npm i @desert-ant-labs/shapes @litertjs/core
import { Shapes } from "@desert-ant-labs/shapes";
const shapes = await Shapes.load();
const shape = await shapes.recognize(points);
// { kind: "ellipse", center: {...}, ... } or null
Add Shapes from Desert Ant Labs to this project.
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.
SDKs (use the one that matches this project's platform):
Swift (iOS, macOS)
Repo: https://github.com/Desert-Ant-Labs/shapes
// Swift Package Manager
.package(url: "https://github.com/Desert-Ant-Labs/shapes", from: "0.5.0")
Kotlin (Android)
Repo: https://github.com/Desert-Ant-Labs/shapes
// build.gradle.kts (Maven Central)
implementation("ai.desertant:shapes:0.5.0")
JavaScript / TypeScript (Web, Node.js)
Repo: https://github.com/Desert-Ant-Labs/shapes
npm i @desert-ant-labs/shapes @litertjs/core
Reference:
- Model page: https://desertant.com/models/shapes/
- Full catalog and other models: https://desertant.com/llms.txt
Add the SDK that matches this project's platform, then follow its README for the exact API and current version. Do not invent API names or method signatures; confirm them against the README.
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
- WebAssembly + LiteRT.js
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.