{"adoption": {"forks": 899, "observed_at": "2026-08-28T04:10:23.891857+00:00", "stars": 8624}, "canonical_url": "https://ross.abutalabs.com/products/ai-on-the-edge-device", "card": {"archived": false, "artifact_type": "application", "description": "Easy to use device for connecting \"old\" measuring units (water, power, gas, ...) to the digital world", "domain": ["iot", "computer-vision", "machine-learning", "self-hosted"], "enriched": true, "function": ["machine-learning", "computer-vision", "image-processing", "iot", "http-server", "monitoring"], "health_score": 91, "homepage": "https://jomjol.github.io/AI-on-the-edge-device-docs/", "language": "C++", "license": "NOASSERTION", "license_family": "other", "maturity": "active", "member_repos": ["jomjol/AI-on-the-edge-device"], "name": "jomjol/AI-on-the-edge-device", "platform": ["embedded", "iot", "self-hosted"], "pushed_at": "2026-07-03T21:50:32+00:00", "repo": "jomjol/AI-on-the-edge-device", "stars": 8624, "tags": ["esp32-cam", "meter-reading", "tensorflow-lite", "edge-ai", "home-assistant", "mqtt", "analog-meters", "water-meter", "power-meter", "gas-meter"], "topics": [], "urls": [], "use_cases": ["read analog water meter readings automatically", "digitize old electricity meter with ESP32 camera", "send gas meter values to Home Assistant", "on-device OCR of utility meter digits", "monitor water consumption with MQTT", "convert non-smart meters to smart meters"], "what_it_is": "A firmware application for ESP32-CAM boards that uses TensorFlow Lite CNNs on-device to digitize analog utility meters (water, gas, electricity). It captures camera images, aligns and extracts ROIs, recognizes digits, and exposes results via MQTT, REST API, InfluxDB, and Home Assistant.", "when_to_avoid": ["your meter is already digital/smart with a data interface", "you need high-accuracy recognition on meters with unusual dials not covered by trained models", "you cannot physically mount a camera near the meter"], "when_to_choose": ["you have an analog meter and want cheap, fully local digitization without cloud", "you want Home Assistant/MQTT/InfluxDB integration out of the box", "you prefer edge inference on a sub-10-EUR device"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/ai-on-the-edge-device", "repo": "jomjol/AI-on-the-edge-device", "role": "main", "score": 72}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:10:23.891857+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:25:52.422043+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c66fa015dbf0e39bd00ff21d54a3145148dbe39866b14d448504ff08c2d730a", "fetched_at": "2026-08-28T04:10:23.891857+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jomjol/AI-on-the-edge-device"}, {"content_hash": "d5cc63b8574df369eedd0e4adb3e56f8eb45af350f4b40e7f7280986e4aca25a", "fetched_at": "2026-08-29T08:26:09.848536+00:00", "kind": "homepage", "missing": false, "url": "https://jomjol.github.io/AI-on-the-edge-device-docs/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:10:23.891857+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:25:52.422043+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c66fa015dbf0e39bd00ff21d54a3145148dbe39866b14d448504ff08c2d730a", "fetched_at": "2026-08-28T04:10:23.891857+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jomjol/AI-on-the-edge-device"}, {"content_hash": "d5cc63b8574df369eedd0e4adb3e56f8eb45af350f4b40e7f7280986e4aca25a", "fetched_at": "2026-08-29T08:26:09.848536+00:00", "kind": "homepage", "missing": false, "url": "https://jomjol.github.io/AI-on-the-edge-device-docs/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:25:52.422043+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c66fa015dbf0e39bd00ff21d54a3145148dbe39866b14d448504ff08c2d730a", "fetched_at": "2026-08-28T04:10:23.891857+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jomjol/AI-on-the-edge-device"}, {"content_hash": "d5cc63b8574df369eedd0e4adb3e56f8eb45af350f4b40e7f7280986e4aca25a", "fetched_at": "2026-08-29T08:26:09.848536+00:00", "kind": "homepage", "missing": false, "url": "https://jomjol.github.io/AI-on-the-edge-device-docs/"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:10:23.891857+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:10:23.891857+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:10:23.891857+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:25:52.422043+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c66fa015dbf0e39bd00ff21d54a3145148dbe39866b14d448504ff08c2d730a", "fetched_at": "2026-08-28T04:10:23.891857+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jomjol/AI-on-the-edge-device"}, {"content_hash": "d5cc63b8574df369eedd0e4adb3e56f8eb45af350f4b40e7f7280986e4aca25a", "fetched_at": "2026-08-29T08:26:09.848536+00:00", "kind": "homepage", "missing": false, "url": "https://jomjol.github.io/AI-on-the-edge-device-docs/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:10:23.891857+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:10:23.891857+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:25:52.422043+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c66fa015dbf0e39bd00ff21d54a3145148dbe39866b14d448504ff08c2d730a", "fetched_at": "2026-08-28T04:10:23.891857+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jomjol/AI-on-the-edge-device"}, {"content_hash": "d5cc63b8574df369eedd0e4adb3e56f8eb45af350f4b40e7f7280986e4aca25a", "fetched_at": "2026-08-29T08:26:09.848536+00:00", "kind": "homepage", "missing": false, "url": "https://jomjol.github.io/AI-on-the-edge-device-docs/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:10:23.891857+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:10:23.891857+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:10:23.891857+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:25:52.422043+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c66fa015dbf0e39bd00ff21d54a3145148dbe39866b14d448504ff08c2d730a", "fetched_at": "2026-08-28T04:10:23.891857+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jomjol/AI-on-the-edge-device"}, {"content_hash": "d5cc63b8574df369eedd0e4adb3e56f8eb45af350f4b40e7f7280986e4aca25a", "fetched_at": "2026-08-29T08:26:09.848536+00:00", "kind": "homepage", "missing": false, "url": "https://jomjol.github.io/AI-on-the-edge-device-docs/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:10:23.891857+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:10:23.891857+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:25:52.422043+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c66fa015dbf0e39bd00ff21d54a3145148dbe39866b14d448504ff08c2d730a", "fetched_at": "2026-08-28T04:10:23.891857+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jomjol/AI-on-the-edge-device"}, {"content_hash": "d5cc63b8574df369eedd0e4adb3e56f8eb45af350f4b40e7f7280986e4aca25a", "fetched_at": "2026-08-29T08:26:09.848536+00:00", "kind": "homepage", "missing": false, "url": "https://jomjol.github.io/AI-on-the-edge-device-docs/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:25:52.422043+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c66fa015dbf0e39bd00ff21d54a3145148dbe39866b14d448504ff08c2d730a", "fetched_at": "2026-08-28T04:10:23.891857+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jomjol/AI-on-the-edge-device"}, {"content_hash": "d5cc63b8574df369eedd0e4adb3e56f8eb45af350f4b40e7f7280986e4aca25a", "fetched_at": "2026-08-29T08:26:09.848536+00:00", "kind": "homepage", "missing": false, "url": "https://jomjol.github.io/AI-on-the-edge-device-docs/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:25:52.422043+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c66fa015dbf0e39bd00ff21d54a3145148dbe39866b14d448504ff08c2d730a", "fetched_at": "2026-08-28T04:10:23.891857+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jomjol/AI-on-the-edge-device"}, {"content_hash": "d5cc63b8574df369eedd0e4adb3e56f8eb45af350f4b40e7f7280986e4aca25a", "fetched_at": "2026-08-29T08:26:09.848536+00:00", "kind": "homepage", "missing": false, "url": "https://jomjol.github.io/AI-on-the-edge-device-docs/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:25:52.422043+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5c66fa015dbf0e39bd00ff21d54a3145148dbe39866b14d448504ff08c2d730a", "fetched_at": "2026-08-28T04:10:23.891857+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jomjol/AI-on-the-edge-device"}, {"content_hash": "d5cc63b8574df369eedd0e4adb3e56f8eb45af350f4b40e7f7280986e4aca25a", "fetched_at": "2026-08-29T08:26:09.848536+00:00", "kind": "homepage", "missing": false, "url": "https://jomjol.github.io/AI-on-the-edge-device-docs/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 90, "longevity": 100, "rhythm": 33}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2227, "days_push": 61, "days_rel": 234, "gap_med": 302, "n_releases_24m": 2}, "score": 72, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}