Skip to content

VisionDemo: live object detection from a SKaiNET cartridge - #52

Merged
michalharakal merged 3 commits into
developfrom
feature/visiondemo
Oct 24, 2026
Merged

michalharakal merged 3 commits into
developfrom
feature/visiondemo

Conversation

@michalharakal

Copy link
Copy Markdown
Contributor

The first vision example, and the first consumer of the published cartridge artifacts.

What it is

Live camera object detection (YOLOv8n, COCO, IREE/Vulkan) in the lovable-prototype design: glass HUD with FPS readout and sparkline, CPU/VULKAN/VK·320 backend pills, capture gallery, detections viewer, image-picker path. All UI is commonMain against the yolo/v1 contract; Android (CameraX + the IREE module runner) is the first wired platform — desktop/iOS need only their own actuals.

How it follows the house rules

  • Self-contained Gradle project (own wrapper + catalog), includeBuild("../skainet-ui"), banner is PoweredBySKaiNET with versions generated from the catalog (generateBuildInfo).
  • Two modules: composeApp (KMP library) + androidApp (code-free shell — AGP 9 forbids a KMP application module). No shared module: there is exactly one consumer, and the non-UI surface is the published cartridge library itself.
  • Dependencies from Central only: sk.ainet.cartridge:detection-yolov8-iree:0.2.2 (brings the yolo/v1 profile, the IREE runner 0.63.1 and engine 0.62.1 transitively). Kotlin 2.4.21 / CMP 1.12.2 / compileSdk 37 to match; AGP pinned 9.3.1 to match skainet-ui (one AGP per build).
  • Licensing: no weights, no packs, no test images in the repo or CI. bundlePacks copies locally materialized packs into the APK (-PpacksDir=, default: sibling blueprints checkout); a fresh clone builds and runs pack-less and shows the materialization steps in-app. README spells out the AGPL-3.0 stance; Orbitron ships with its OFL-1.1 text.
  • CI: visiondemo-ci.yml, path-filtered, assembleDebug on a bare checkout (proves Central resolution + JNI packaging, no weights involved).

Verified

  • Pixel 8a, pack-bundled install: live detection on vulkan-arm64 at ~186 ms/frame, boxes 1:1 on the analyzed frames; the 320 speed-variant pack runs ~57 ms (≈17 fps).
  • -PpacksDir=/nonexistent build: APK assembles, app shows the pack-less screen.

Gallery screenshot to follow (the one taken today caught a non-publishable scene and was discarded).

🤖 Generated with Claude Code

michalharakal and others added 3 commits October 24, 2026 20:28
Live camera YOLOv8n detection on Android, consumed entirely through the
published cartridge artifacts (sk.ainet.cartridge:detection-yolov8-iree:0.2.2,
yolo/v1 contract transitively) — the example owns no model code and no weights.

- composeApp: Compose Multiplatform library; all UI in commonMain against the
  yolo/v1 API (glass HUD, FPS sparkline, backend pills, capture gallery,
  detections viewer, image-picker path). Five expect seams (camera, packs,
  engine, picker, font); Android actuals wired (CameraX + IREE module runner).
- androidApp: code-free APK shell; bundlePacks copies locally materialized
  packs (-PpacksDir=, default: sibling blueprints checkout). No packs is a
  first-class state: fresh clone builds, installs and shows the materialize
  steps instead of the feed — the AGPL-3.0 weights never ship (README).
- PoweredBySKaiNET from skainet-ui, versions generated from the catalog.
- Per-example CI (assembleDebug on a bare checkout), root README gallery entry.

Verified on a Pixel 8a: vulkan-arm64 pack live at ~186 ms/frame, detections
rendered 1:1; pack-less APK verified with -PpacksDir=/nonexistent.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The bolt gives way to the lens mark: dark gradient ground, silver lens barrel,
red glowing trigger, red detection brackets (skainet-lens-icons v6, master 512).

- Adaptive icon: per-density ic_launcher_foreground.png with the art at 72/108dp
  and the art's own vertical gradient extended to the full canvas, so round and
  squircle masks keep all four brackets inside the safe zone (verified against
  simulated masks); background color = mid-gradient #222325.
- Legacy + round launchers at all five densities (round ones alpha-masked).
- Themed-icon (monochrome) layer redrawn as a vector of the same mark:
  brackets + lens ring + trigger dot.
- docs/icons/: the 512 Play Store listing master and an iOS
  AppIcon.appiconset (single-size 1024, Contents.json) ready for a future
  iosApp target.
- Old bolt vectors removed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@michalharakal
michalharakal merged commit efa20d2 into develop Oct 24, 2026
1 check passed
@michalharakal
michalharakal deleted the feature/visiondemo branch October 24, 2026 19:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant