Shapes : reconnaissance de formes à trait unique sur l'appareil
Reconnaissance de formes à trait unique sur l'appareil, qui transforme un geste dessiné à la main en un rectangle, une ellipse, un triangle, une étoile ou une ligne nets.
Shapes prend un seul trait dessiné à la main, une liste de points [x, y], et renvoie une géométrie nette : rectangle, ellipse, triangle, étoile ou ligne. Le modèle ajuste des formes vectorielles précises, s'aligne sur les axes, les cercles, les carrés et les rotations de 15 degrés, et rejette les gribouillis qui ne sont pas des formes.
Sur Apple, il ajoute à PencilKit un alignement intelligent des formes façon Notes en un seul appel, aperçu en direct préservé. Le « Snap to Shape » d'Apple est une API privée que les applications tierces ne peuvent pas appeler : Shapes comble donc ce manque. Le modèle est assez petit pour être livré dans l'application sans téléchargement de modèle, et la version web utilise un pipeline WebAssembly local avec l'inférence LiteRT.js.
Démo
Performances
Moins de 10 ms par trait, depuis un modèle de 0,2 MB, sans runtime d'inférence sur le web.
Mesures internes. Inférence en pur JS sur le web, Core ML sur Apple.
Cas d'usage
Formes intelligentes façon Notes
Ajoutez l'alignement des formes à un canevas PencilKit avec canvasView.enableShapeSnapping(). Aperçu en direct, annulation et rétablissement préservés, comblant le manque laissé par l'API privée Snap to Shape d'Apple.
Outils de diagramme et de tableau blanc
Transformez des tracés à main levée en géométrie précise. Compatible avec les données de tracé de tldraw et Excalidraw.
Dessin multiplateforme
Le même moteur de reconnaissance s'exécute sur iOS, Android et le web, pour qu'une fonctionnalité de dessin se comporte à l'identique partout.
Aucun téléchargement de modèle
À environ 0,2 MB, il est livré dans l'application. Contrairement à Google ML Kit Digital Ink, aucun modèle de ~20 MB à récupérer à l'exécution.
Ce que ça fait
- Reconnaît le rectangle, l'ellipse, le triangle, l'étoile et la ligne, et rejette ce qui n'est pas une forme.
- S'aligne sur les axes, les cercles, les carrés et les rotations de 15 degrés.
- Alignement en direct dans PencilKit via un seul appel :
canvasView.enableShapeSnapping(). - Inférence web via un pipeline WebAssembly local avec LiteRT.js.
Plateformes et installation
// 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.
Reconnaissance de formes à trait unique sur l'appareil, qui transforme un geste dessiné à la main en un rectangle, une ellipse, un triangle, une étoile ou une ligne nets.
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.
Spécifications
- Formes
- Rectangle, ellipse, triangle, étoile, ligne
- Taille sur l'appareil
- 0,2 MB (Core ML 4 bits sur Apple)
- Latence
- <10 ms
- Runtime web
- WebAssembly + LiteRT.js
FAQ
Qu'est-ce que Shapes ?
Reconnaissance de formes à trait unique sur l'appareil, qui transforme un geste dessiné à la main en un rectangle, une ellipse, un triangle, une étoile ou une ligne nets.
Shapes fonctionne-t-il sur l'appareil ?
Oui. Shapes s'exécute entièrement sur l'appareil : l'inférence a lieu en local, sans appel serveur, de sorte que les données ne quittent jamais l'appareil.
Quelles plateformes Shapes prend-il en charge ?
Shapes est fourni sous forme de SDK natifs sur l'appareil pour Swift, Kotlin, JavaScript / TypeScript.
Combien coûte Shapes ?
Chaque modèle est gratuit jusqu'à 100k appareils actifs mensuels par SDK. Inférence illimitée par utilisateur. Contactez-nous pour des licences sur mesure.
Quelle est la précision ou la vitesse de Shapes ?
Moins de 10 ms par trait, depuis un modèle de 0,2 MB, sans runtime d'inférence sur le web.