Marko Bera
ENSR
Javi se

← Svi radovi · 03 / 06

AI pravila za obične nadzorne kamere

Vision Guard

Običnim rečima napišeš šta kamera treba da prati, na primer „javi mi ako neko uđe u sobu noću“. Kad se to desi, za oko dve sekunde dobiješ sliku na Telegramu. Sve radi na običnom računaru, bez skupe opreme.

Uloga
Proizvod, arhitektura i izrada, uz Claude Code
Status
Radni prototip
Period
Septembar 2026
Tehnologija
Python, YOLO11, OpenCV, Next.js, Supabase, Claude, Telegram
~2 s
od detekcije do fotografije na Telegramu
1
AI poziv po događaju, ne za svaki kadar
8 fps
detekcija na procesoru laptopa, bez grafičke
0
otvorenih portova u mreži klijenta

Video i ekrani

Sajt proizvoda, od vrha do dna.
Pravilo, zona, alarm, dashboard. Pravi ekrani iz testa na besplatnom snimku magacina (Pexels).

Ideja

Većina firmi već ima kamere. Niko ih ne gleda. Snimak se otvara tek kad se nešto loše desi. Hteo sam da kamere jave istog trenutka, i to baš ono što je klijentu bitno, a da se to podesi jednom rečenicom umesto klikanja kroz podešavanja.

Očigledna verzija je skupa: svaki kadar poslati vision modelu. Na 20 kadrova u sekundi sa par kamera to su milioni poziva dnevno. Zato ceo dizajn prati jedno pravilo: jeftin lokalni model odlučuje kada, a veliki model samo objašnjava šta. Prvo tržište su firme (magacini i gradilišta: ljudi u zoni viljuškara, blokiran izlaz), ne kuće.

Vremenska linija

  1. Pravila običnim rečima, prvo firme, tri sloja da veliki model nikad ne bude u petlji videa.

  2. YOLO uživo na laptopu: oko 50 ms po kadru na Ryzen procesoru, bez interneta.

  3. iPhone kao kamera preko WiFi-ja. Zona nacrtana preko žive slike i alarm prema tome gde su stopala.

  4. Od lokalne skripte do veb proizvoda: registracija, agent za preuzimanje, pravila kao prompt.

  5. Agent ↔ sajt: kod za uparivanje, javljanje da je živ, spisak kamera, slike u privatnom skladištu.

  6. Prompt → pravilo preko Claude-a i stroge šeme. Klijent potvrđuje pre nego što išta radi.

  7. Agent izvršava pravila: zone, raspored, minimalno trajanje, pauza između alarma. Događaji idu na sajt i na Telegram.

  8. Ceo lanac radi uživo: iPhone → detektor → sajt → Telegram za oko 2 sekunde, pa Claude-ov opis.

Sve funkcije

01

Pravila kao rečenice

„Javi mi ako ima više od 3 osobe ispred kase radnim danima 9–17“ postaje: traži osobu, u označenoj zoni, 4 ili više odjednom, ponedeljak–petak, 09:00–17:00, alarm posle 1 sekunde, najviše jednom u minuti. Klijent vidi baš to i potvrđuje.

02

Pošteno odbijanje

„Javi kad dođe komšija Petar“ se odbija, uz razlog: sistem ne prepoznaje ko je ko. Pravilo koje tiho nikad ne okine gore je od jasnog „ne“. Isto važi za lica, tablice, padove, vatru i kacige, dok ti detektori ne postoje.

03

Zone na pravoj slici

Klijent sa par klikova obeleži deo slike sa same kamere. Za ljude sistem gleda tačku na dnu okvira (stopala), pa prolazak pored vrata ne računa kao ulazak kroz njih.

04

Fotografija, pa opis

Fotografija sa nacrtanom zonom i okvirom oko objekta ide odmah. Par sekundi kasnije Claude pogleda tu jednu sliku i dopiše rečenicu ispod. Ako liči na lažnu uzbunu (poster, odraz), to i kaže.

05

Uživo na zahtev

Dok je stranica kamere otvorena, agent šalje oko jedan kadar u sekundi sa okvirima koje AI vidi. Kad se stranica zatvori, prestaje. Podrazumevano ništa ne ide u oblak.

06

Stanje koje se razume

Dashboard razlikuje dva kvara: „Agent offline“ (računar je ugašen) i „Camera offline“ (agent radi, ali ova kamera ne daje sliku). Prvi pravi test je uhvatio baš to: telefon se zaključao, a kartica je pokazala NO SIGNAL.

07

Telegram jednim dodirom

Pritisneš Start u botu i stranica se sama poveže za par sekundi. Bez webhook-a i javne adrese, pa radi i lokalno.

AI arhitektura

  1. Lokalni detektor, svaki kadar. YOLO11n na računaru klijenta, 8 kadrova u sekundi po kameri, besplatno i bez interneta.
  2. Pravila u kodu. Zona, broj, raspored, minimalno trajanje i pauza su običan kod u agentu. To odlučuje o alarmu, za par milisekundi.
  3. Veliki model, jednom po događaju. Claude vidi jednu sliku i pravilo koje je okinulo. Radi tek pošto je alarm već poslat, pa fotografija nikad ne čeka model.

Isti model se koristi i kad se pravilo pravi: ulazi prompt, a izlazi strukturisano pravilo koje mora da odgovara šemi. Može da bira samo objekte koje detektor stvarno vidi.

Privatnost od početka

  • Video ostaje u objektu. Van objekta ide samo trenutak događaja, jedna slika.
  • Nema otvorenih vrata. Agent samo šalje odlazne HTTPS zahteve, pa se na ruteru klijenta ništa ne otvara.
  • Lozinke kamera nikad ne stižu na server. Adrese kamera ostaju u fajlu na računaru klijenta; server zna samo imena kamera.
  • Token agenta se prikaže jednom i čuva samo kao SHA-256 otisak, u tabeli koju pregledač nikad ne može da pročita. Svaka druga tabela je zaključana za vlasnika preko row-level security.

Šta su testovi uhvatili

Greška u šemi mog prvog dizajna. U prvom testu Claude je u sopstvenom opisu pravila napisao da brojanje ljudi ne može zajedno sa zonom. Promenio sam šemu u use_zone + min_count, i „4 ili više osoba ispred kase“ sad radi tačno.

Kamera okrenuta bočno. Prvi pravi alarm je stigao sa opisom „…the camera image is rotated sideways“. Telefon je stajao uspravno, a slao položenu sliku. Dodao sam rotaciju po kameri. Ista osoba je pre popravke prepoznata sa 74%, a posle sa 91%.

Korak koji niko ne radi. Pritisnuo sam Start u Telegram botu i ništa se nije desilo, jer je sajt čekao da se vratim i kliknem „I pressed Start“. Sad stranica proverava na 3 sekunde i poveže se sama.

Sledeće

Objava veb aplikacije, pravi agent za preuzimanje (.exe, bez instaliranja Python-a), video klip posle fotografije i paket za magacine: kaciga i prsluk, viljuškar u zoni za pešake, blokiran izlaz.

Šta sam ja odlučio

  • Prvo firme; prvi paket su magacini i gradilišta.
  • Klijent preuzima agenta na svoj računar. Ne šaljemo kutiju.
  • Cena i brzina dolaze iz dizajna: veliki model nikad ne gleda video.
  • Kvalitet pre brzine: pravi veb proizvod, ne lokalni demo.

Šta je uradio AI

  • Predložio tri sloja i podelu lokalno + oblak.
  • Napravio agenta, Next.js aplikaciju, bazu sa row-level security i Telegram tok.
  • Napisao prevodilac prompta u pravilo sa strogom šemom.

Gde sam ga ispravio

  • Izbacio „pad u domu za stare“ zbog privatnosti. Pojasnio sam da se misli na hodnik, ne sobe, i vraćeno je na listu.
  • Terao me da kliknem „I pressed Start“ posle Telegrama. Tražio sam da se poveže samo.
  • Napravio prvu početnu stranu koju sam nazvao mrtvom. Tražio sam crni izgled kontrolne sobe.

Sledeća studija

FitMess