{"adoption": {"forks": 383, "observed_at": "2026-08-28T04:04:09.882107+00:00", "stars": 1259}, "canonical_url": "https://ross.abutalabs.com/products/home_surveillance", "card": {"archived": false, "artifact_type": "application", "description": "Home surveillance system with facial recognition ", "domain": ["computer-vision", "security", "iot", "self-hosted"], "enriched": true, "function": ["computer-vision", "image-processing", "video-processing", "machine-learning", "web-framework", "alerting", "security"], "health_score": 20, "homepage": null, "language": "HTML", "license": null, "license_family": "other", "maturity": "maintenance", "member_repos": ["BrandonJoffe/home_surveillance"], "name": "BrandonJoffe/home_surveillance", "platform": ["python", "self-hosted"], "pushed_at": "2022-11-22T01:11:36+00:00", "repo": "BrandonJoffe/home_surveillance", "stars": 1259, "tags": ["facial-recognition", "surveillance", "ip-cameras", "motion-detection", "raspberry-pi", "openface", "home-security", "alarm-system", "home-automation", "linux", "web-server"], "topics": [], "urls": [], "use_cases": ["identify known family members vs intruders on home cameras", "send alerts when an unrecognized face appears on an IP camera", "integrate facial recognition with an existing wired alarm system", "stream and monitor multiple IP cameras from a web dashboard", "build a low-cost DIY smart security system with a Raspberry Pi"], "what_it_is": "A self-hosted home surveillance application that processes streams from multiple IP cameras, performs motion detection and facial recognition (via Openface and an SVM classifier), and alerts users to potential intruders. It includes a web dashboard built with Flask/SocketIO and a Raspberry Pi GPIO interface for integrating with existing wired alarm panels.", "when_to_avoid": ["you need a actively maintained project with recent updates and support", "you need a license permitting commercial use (the repo has no license)", "you need production-grade, scalable video analytics rather than a hobbyist system"], "when_to_choose": ["you want a self-hosted, low-cost surveillance system with face recognition", "you have IP cameras and want to distinguish known people from strangers", "you want to hook camera-based alerts into an existing alarm panel via Raspberry Pi GPIO"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/home_surveillance", "repo": "BrandonJoffe/home_surveillance", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:09.882107+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T05:05:27.783219+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67cc3ec3d20e2219f3d73e68d1d618a062e6404e1d1abaa152fdf0d4617e1272", "fetched_at": "2026-08-28T04:04:09.882107+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BrandonJoffe/home_surveillance"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:09.882107+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T05:05:27.783219+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67cc3ec3d20e2219f3d73e68d1d618a062e6404e1d1abaa152fdf0d4617e1272", "fetched_at": "2026-08-28T04:04:09.882107+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BrandonJoffe/home_surveillance"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T05:05:27.783219+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67cc3ec3d20e2219f3d73e68d1d618a062e6404e1d1abaa152fdf0d4617e1272", "fetched_at": "2026-08-28T04:04:09.882107+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BrandonJoffe/home_surveillance"}], "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:04:09.882107+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:09.882107+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:09.882107+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T05:05:27.783219+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67cc3ec3d20e2219f3d73e68d1d618a062e6404e1d1abaa152fdf0d4617e1272", "fetched_at": "2026-08-28T04:04:09.882107+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BrandonJoffe/home_surveillance"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:09.882107+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:09.882107+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T05:05:27.783219+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67cc3ec3d20e2219f3d73e68d1d618a062e6404e1d1abaa152fdf0d4617e1272", "fetched_at": "2026-08-28T04:04:09.882107+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BrandonJoffe/home_surveillance"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:09.882107+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:09.882107+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:09.882107+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T05:05:27.783219+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67cc3ec3d20e2219f3d73e68d1d618a062e6404e1d1abaa152fdf0d4617e1272", "fetched_at": "2026-08-28T04:04:09.882107+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BrandonJoffe/home_surveillance"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:09.882107+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:09.882107+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T05:05:27.783219+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67cc3ec3d20e2219f3d73e68d1d618a062e6404e1d1abaa152fdf0d4617e1272", "fetched_at": "2026-08-28T04:04:09.882107+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BrandonJoffe/home_surveillance"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T05:05:27.783219+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67cc3ec3d20e2219f3d73e68d1d618a062e6404e1d1abaa152fdf0d4617e1272", "fetched_at": "2026-08-28T04:04:09.882107+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BrandonJoffe/home_surveillance"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T05:05:27.783219+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67cc3ec3d20e2219f3d73e68d1d618a062e6404e1d1abaa152fdf0d4617e1272", "fetched_at": "2026-08-28T04:04:09.882107+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BrandonJoffe/home_surveillance"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T05:05:27.783219+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "67cc3ec3d20e2219f3d73e68d1d618a062e6404e1d1abaa152fdf0d4617e1272", "fetched_at": "2026-08-28T04:04:09.882107+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BrandonJoffe/home_surveillance"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3684, "days_push": 1381, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}