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. Den 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. Den är liten nog att levereras inuti appen utan någon modellnedladdning, och webbygget kör ren JS-inferens utan någon ONNX- eller WASM-körtid.
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(). - Ren JS-inferens på webben: ingen ONNX- eller WASM-körtid.
Plattformar och installation
// 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
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
- Ingen; ren JS-inferens
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.