Shapes: Formigenkänning med ett penndrag på enheten
Formigenkänning på enheten med ett penndrag som förvandlar ett handritat streck till en ren rektangel, ellips, triangel, stjärna eller linje.
Shapes tar ett handritat streck, en lista med [x, y]-punkter, och returnerar ren geometri: rektangel, ellips, triangel, stjärna eller linje. Modellen anpassar exakta vektorformer, fäster mot axlar, cirklar, kvadrater och 15-graders rotationer, och avvisar klotter som inte är former.
På Apple lägger den till smart formfästning i Notes-stil till PencilKit med ett enda anrop, med live-förhandsvisningen intakt. Apples egen ”Snap to Shape” är ett privat API som appar från tredje part inte kan anropa, så Shapes fyller den luckan. Modellen är liten nog att levereras inuti appen utan någon modellnedladdning, och webbygget använder en lokal WebAssembly-pipeline med LiteRT.js-inferens.
Demo
Prestanda
Under 10 ms per streck, från en modell på 0,2 MB utan någon inferenskörtid på webben.
Interna mätningar. Ren JS-inferens på webben, Core ML på Apple.
Användningsfall
Smarta former i Notes-stil
Lägg till formfästning på en PencilKit-canvas med canvasView.enableShapeSnapping(). Live-förhandsvisning, ångra och gör om bevaras, och fyller luckan som Apples privata Snap to Shape-API lämnar.
Diagram- och whiteboardverktyg
Rensa upp frihandsstreck till exakt geometri. Fungerar med streckdata från tldraw och Excalidraw.
Plattformsoberoende ritande
Samma igenkännare körs på iOS, Android och webben, så en ritfunktion beter sig likadant överallt.
Ingen modellnedladdning
På cirka 0,2 MB levereras den inuti appen. Till skillnad från Google ML Kit Digital Ink finns ingen ~20 MB-modell att hämta vid körning.
Vad den gör
- Känner igen rektangel, ellips, triangel, stjärna och linje, och avvisar det som inte är former.
- Fäster mot axlar, cirklar, kvadrater och 15-graders rotationer.
- Live-fästning i PencilKit via ett anrop:
canvasView.enableShapeSnapping(). - Webbinferens via en lokal WebAssembly-pipeline med LiteRT.js.
Plattformar och 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.
Formigenkänning på enheten med ett penndrag som förvandlar ett handritat streck till en ren rektangel, ellips, triangel, stjärna eller linje.
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.
Specifikationer
- Former
- Rektangel, ellips, triangel, stjärna, linje
- Storlek på enheten
- 0,2 MB (4-bitars Core ML på Apple)
- Latens
- <10 ms
- Webbkörtid
- WebAssembly + LiteRT.js
Vanliga frågor
Vad är Shapes?
Formigenkänning på enheten med ett penndrag som förvandlar ett handritat streck till en ren rektangel, ellips, triangel, stjärna eller linje.
Körs Shapes lokalt på enheten?
Ja. Shapes körs helt lokalt på enheten: inferensen sker lokalt utan något serveranrop, så data lämnar aldrig enheten.
Vilka plattformar stöder Shapes?
Shapes levereras som nativa on-device-SDK:er för Swift, Kotlin, JavaScript / TypeScript.
Vad kostar Shapes?
Varje modell är gratis för upp till 100k månadsaktiva enheter per SDK. Obegränsad inferens per användare. Kontakta oss för anpassade licenser.
Hur träffsäker eller snabb är Shapes?
Under 10 ms per streck, från en modell på 0,2 MB utan någon inferenskörtid på webben.