This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| timi [2026/04/26 10:37] – moved from tamiwiki:projects:timi timi | timi [2026/04/27 15:49] (current) – Update main page: top changelog, v1.5 sidecars, inline gopro timi | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== TIMI ====== | ====== TIMI ====== | ||
| - | TAMI Inventory | + | //TAMI Inventory |
| - | inventory bot and more | + | //" |
| - | [[https:// | + | TIMI is the combined weekend-hackathon brainchild of TAMI folks building an **audio-visual inventory dataset** for the space — and eventually a **space-aware inventory tagging, logging and querying system**. It is critical infrastructure. It is also complete and utter bullshit. This is a hackerspace. |
| + | ===== Recent Changes ===== | ||
| - | ===== TODO ===== | + | * **2026-04-27** — Rerun-based **dataset viewer** for browsing local and remote captures; agent tmux workflow for dashboard, viewer, and GoPro services. |
| - | datasets of inventory | + | * **2026-04-27** — **gopro-scicam merged inline** from submodule to simplify builds and eliminate sync friction. |
| + | * **2026-04-26** — **Unified sidecar schema v1.5** across Android and GoPro: '' | ||
| + | * **2026-04-26** — **Dashboard enhancements**: | ||
| + | * **2026-04-25** — **GoPro station mode**: split-screen live preview + last capture; QR debounce (2× consecutive); | ||
| - | using cameras, setup a table for inventory | + | Full history: [[timi: |
| + | |||
| + | ===== What is TIMI? ===== | ||
| + | |||
| + | At its core TIMI is four things: | ||
| + | |||
| + | * **SciCam** — an Android camera app that snaps photos (and videos), writes JSON sidecars with EXIF + metadata, exposes | ||
| + | * **GoPro Bridge** — a Flask server that talks to a GoPro over USB WiFi, pulls captures, runs a live preview stream, and does **motion-based auto-capture** with an ROI editor. Writes the same SciCam-compatible sidecars. | ||
| + | * **Dashboard** — a Rust TUI that discovers devices via UDP multicast, monitors them, and one-way mirrors captures to a local archive. | ||
| + | * **Dataset** — a growing folder of '' | ||
| + | |||
| + | The long-term dream: walk into a room, point a camera at an object (or let a fixed camera see it), and have the system know what it is, where it lives, and how many we have. | ||
| + | |||
| + | ===== Architecture ===== | ||
| + | |||
| + | {{timi: | ||
| + | |||
| + | All capture sources broadcast **UDP multicast beacons** every 5 s to **239.255.0.1: | ||
| + | |||
| + | The current focus is **capturing and collecting the dataset**. More processing stages will follow: | ||
| + | |||
| + | * **Segmentation** — isolating objects from backgrounds | ||
| + | * **Labeling** — assigning metadata and categories | ||
| + | * **Localization** — determining where an object lives in the space | ||
| + | |||
| + | These ML workloads will likely run on the **Fedora workstation** with its **NVIDIA P40 GPU**. | ||
| + | |||
| + | ==== Components ==== | ||
| + | |||
| + | === SciCam Android App === | ||
| + | |||
| + | * **REST API** on port 8080 — see the [[timi: | ||
| + | * **Photo capture** with CameraX, saved to '' | ||
| + | * **Video recording** — toggle with '' | ||
| + | * **JSON sidecars v1.5** — every capture gets a '' | ||
| + | * **QR auto-capture** — point the camera at a QR code, the app snaps automatically. Great for rapid inventory | ||
| + | * **SSE stream** — live events at ''/ | ||
| + | |||
| + | === GoPro Bridge (gopro-scicam) === | ||
| + | |||
| + | * **Flask server** connecting to GoPro HERO12 (and compatible) via the **Open GoPro USB WiFi API**. | ||
| + | * **Full web UI** — capture button, live MJPEG preview, gallery, sidecar viewer, and a **table-boundary ROI editor**. | ||
| + | * **Motion-based auto-capture** — monitors the live preview stream for structural change inside a masked region. Only fires when something actually stays on the table (ignores hands passing through). Adjustable motion and structural thresholds. | ||
| + | * **Background sync** — on startup, pulls every photo/video from the GoPro SD card that hasn't been downloaded yet. Persists sync history so clearing local files doesn' | ||
| + | * **SciCam-compatible sidecars** — writes the same '' | ||
| + | * **Live QR detection** — scans preview frames and downloaded images; updates '' | ||
| + | * **Multicast beacons** — broadcasts UDP presence just like SciCam, so the Rust dashboard can discover it. | ||
| + | |||
| + | === Dashboard / Sync Server === | ||
| + | |||
| + | * Rust terminal UI. | ||
| + | * **Auto-discovers** devices every 5 s via UDP multicast beacons. | ||
| + | * **Syncs** '' | ||
| + | * Hotkeys: '' | ||
| + | * Config lives in repo-root '' | ||
| + | |||
| + | === API Clients === | ||
| + | |||
| + | * **Go CLI** ('' | ||
| + | * **Web client** ('' | ||
| + | |||
| + | ===== Capture Sources ===== | ||
| + | |||
| + | Not just one camera — the idea is everything that can see should feed TIMI. | ||
| + | |||
| + | ^ Source ^ Status ^ Notes ^ | ||
| + | | Mobile (SciCam app) | Working | Primary capture device. CameraX + NanoHTTPD. | | ||
| + | | GoPro (gopro-scicam) | Working | Flask bridge over USB WiFi. Preview, auto-capture, | ||
| + | | Canon 70D | In space | Uses [[https:// | ||
| + | | Lixel 2 Pro | TBD | 3D scanner with cameras. Needs research. | | ||
| + | |||
| + | ===== Weekend Hackathon Results ===== | ||
| + | |||
| + | The first TIMI sprint produced a working end-to-end pipeline in about 48 hours: | ||
| + | |||
| + | * Android app rewritten as API-first: fullscreen preview with IP overlay. | ||
| + | * QR detection switched from ZXing to BoofCV — runs on preview frames, no Activity hop. | ||
| + | * REST API with OpenAPI 3 spec. | ||
| + | * Dashboard built in Rust with auto-discovery and sync. | ||
| + | * Go and web clients consuming the API. | ||
| + | * Full test suite in '' | ||
| + | * **GoPro bridge** added later — brings a rugged wide-angle camera into the TIMI pipeline with motion auto-capture and the same sidecar format. | ||
| + | |||
| + | ===== API Quick Reference ===== | ||
| + | |||
| + | The SciCam API lives at '' | ||
| + | |||
| + | | Method | Endpoint | Purpose | | ||
| + | | POST | /capture | Trigger photo | | ||
| + | | POST | /record | Toggle video recording | | ||
| + | | POST | /settings | Set qr_item_id, tags, lock, debug, capture_alert | | ||
| + | | POST | / | ||
| + | | GET | /status | Current state (qr_item_id, | ||
| + | | GET | /captures | List all images/ | ||
| + | | GET | /photo/last | Download latest JPEG | | ||
| + | | GET | / | ||
| + | | GET | /video/last | Download latest MP4 | | ||
| + | | GET | / | ||
| + | | GET | / | ||
| + | | GET | /events | SSE stream | | ||
| + | |||
| + | Full spec: [[https:// | ||
| + | |||
| + | ===== Git Repository ===== | ||
| + | |||
| + | * **Origin:** [[https:// | ||
| + | * **Local dev desk:** '' | ||
| + | |||
| + | The repo is a multi-component monorepo: | ||
| + | |||
| + | < | ||
| + | timi/ | ||
| + | ├── scicam/ | ||
| + | ├── dashboard/ | ||
| + | ├── clients/ | ||
| + | │ | ||
| + | │ | ||
| + | │ | ||
| + | ├── api_spec.yaml | ||
| + | ├── timi.conf | ||
| + | └── capture/ | ||
| + | </ | ||
| + | |||
| + | ===== Roadmap / Dreams ===== | ||
| + | |||
| + | * [ ] Prototype '' | ||
| + | * [ ] Camera calibration data in sidecars (lens distortion via BoofCV). | ||
| + | * [ ] Database sync — non-destructive to existing images/ | ||
| + | * [ ] Canon 70D scripted capture producing TIMI-compatible sidecars. | ||
| + | * [ ] Lixel 2 Pro research and integration. | ||
| + | * [ ] Space-aware querying: " | ||
| + | |||
| + | ===== Philosophy ===== | ||
| + | |||
| + | * **Treat captures as immutable** — this is an archive and dataset. Don't mess with existing files. | ||
| + | * **API-first UI** — the app is primarily a remote-controlled camera. The dashboard and CLI are the main interfaces. | ||
| + | * **Bullshit acceptable** — it is a hackerspace. It should work well enough to be useful and broken enough to be fun. | ||
| + | |||
| + | ===== Contact / Hacking ===== | ||
| + | |||
| + | Ping the usual suspects on Matrix/ | ||
| + | |||
| + | < | ||
| + | # Quick start on the dev desk | ||
| + | cd ~/timi | ||
| + | |||
| + | # Build and install the Android app | ||
| + | cd scicam && ./gradlew assembleDebug && adb install app/ | ||
| + | |||
| + | # Start the GoPro bridge (needs GoPro in USB Connect mode) | ||
| + | cd clients/ | ||
| + | |||
| + | # Start the dashboard | ||
| + | cd ~/ | ||
| + | |||
| + | # Test against a device on the network | ||
| + | cd ~/timi && ./ | ||
| + | </ | ||
| - | cameras | ||
| - | * mobile - working on [[https:// | ||
| - | * gopro - TBD | ||
| - | * canon 70d - in space, software [[https:// | ||
| - | * Lixel 2 pro - TBD | ||