Eski güvenlik kamerasını yapay zekâ ev asistanına nasıl çevirirsin?
Bu sistem şu an evimde çalışıyor. Kameraya hiç dokunmadım: mikrofonu kulak, hoparlörü ağız, görüntüsü göz oldu. Beyin aynı Wi-Fi'daki bir bilgisayarda (bende Mac) çalışan bir Python programı. Beklerken ses bilgisayarda işleniyor: “Hey Irgat”ı bilgisayar kendisi dinliyor, yalnız emin olamadığı birkaç saniyeyi doğrulama için yazıya döktürüyor. Konuşma ancak uyanınca OpenAI'nin canlı ses modeline gidiyor. Ev cihazlarını Mi Home'un kendi komutlarıyla yönetiyor. İleri seviye bir rehber; sonunda aynısını sıfırdan kurdurmak için hazır bir Claude Code promptu var. Not: kamera evin ortak alanını görüyor ve duyuyor; ev halkının haberi ve rızası olmadan kurma.
Neye ihtiyacın var?
- Mikrofonu ve hoparlörü olan, Mi Home'a bağlı bir Xiaomi kamera (bende eski bir Mijia 360° kamera; modelinin go2rtc'de desteklenip desteklenmediğine önce bak)
- Aynı Wi-Fi'da sürekli açık duran bir bilgisayar (Mac, Windows ya da Raspberry Pi 5)
- Bir OpenAI API hesabı (canlı ses modeli, küçük bir dil modeli, yazıya dökme ve seslendirme)
- İsteğe bağlı: Mi Home'a bağlı akıllı ampul, robot süpürge, hava temizleyici
- Terminal kullanmaya alışık olmak (kurulumu ben kendi evime yaptım)
Adım adım
1. Parçaları kafanda kur
Dört parça var. Kamera: mikrofon, hoparlör ve görüntü; olduğu yerde duruyor. go2rtc: bilgisayarda çalışan açık kaynak bir yayın sunucusu; kameranın görüntüsünü ve sesini yerel ağda açıyor, hoparlöre de ses yolluyor. Irgat programı: “Hey Irgat”ı dinliyor, uyanınca canlı ses modeliyle konuşuyor, bir iş gerekince araçları çağırıyor. Ev cihazları: ışık, süpürge ve hava temizleyici Mi Home'un bulut komutlarıyla yönetiliyor. Kamerayı internete açmadım; her şey ev ağında, dışarı yalnız konuşma ve cihaz komutları çıkıyor.

2. Kamerayı bilgisayara bağla: go2rtc
go2rtc'nin Xiaomi desteğiyle kamerayı bir kez Xiaomi hesabımla eşleştirdim; bulut yalnız şifreleme anahtarı için kullanılıyor, görüntü ve ses yerel ağdan akıyor. Görüntü ve mikrofon ilk denemede çalıştı. Mikrofon sesinin 16 kHz geldiğini ölçtüm; 8 kHz sanıp işlersen ses boğuk çıkıyor. Kameranın ağdaki adresi modem yeniden başlayınca değişebiliyor; modemden kameraya sabit adres vermek ya da adresi her açılışta Mi Home'dan sorgulamak işi kolaylaştırıyor.
3. Hoparlör tuzağı: cızırtı
En çok vakit kaybettiğim yer. Kameraya ses gönderdiğimde Türkçe konuşma yerine sadece cızırtı duydum; farklı ses biçimleriyle 10'dan fazla deneme yaptım, hepsi bozuk çıktı. Sorun benim ayarlarımda değil, go2rtc'nin kendisindeydi: Xiaomi hoparlör paketini yazan kodda ses verisi yerine başlık iki kez kopyalanıyordu, yani kameraya hiç ses gitmiyordu. Tek satırlık düzeltmeyle kendi derlememi kullanıyorum. Bu modelde paket başlığını da kameranın kendi mikrofon paketleriyle aynı biçimde yazmak gerekti (16 kHz, 40 ms'lik parçalar). İkinci tuzak: sesi toplu yazınca yine bozuluyor; gerçek zamanlı, 20 ms'lik düzenli adımlarla akıtınca temiz çıkıyor.
Hoparlörden cızırtı geliyorsa önce ses verisinin gerçekten gidip gitmediğine bak; format denemek saatlerini yiyebilir.
4. Uyanma kelimesi: “Hey Irgat”
Bilgisayar kameranın mikrofonunu sürekli ama yerelde dinliyor: Vosk'un küçük Türkçe modeli internetsiz ve ücretsiz çalışıyor. Tuzak: “ırgat” bu modelin sözlüğünde yok. Model beni “hey evlat”, “hırvat”, “yozgat” diye duyuyordu; bu benzer duyuşları da kabul ettim. Kamera televizyonun altında olduğu için yanlış alarmlar oldu, uzaktan seslenince de kaçırıyordu. Çözüm iki aşamalı doğrulama: yerel model emin olamazsa son 5 saniyeyi bir yazıya dökme modeline gönderiyorum (~0,7 sn) ve dökümde gerçekten “ırgat” geçiyorsa uyanıyor. Uyanınca önceden üretilmiş “Buyur ağam?” selamı anında çalıyor; canlı oturum açılana kadar sessizlik olmuyor.
5. Beyin: canlı ses modeli
Uyanınca OpenAI'nin canlı ses modeliyle (GPT-Live) bir oturum açılıyor: kameranın mikrofon sesi akarken modelin cevap sesi de akıyor ve doğrudan kameranın hoparlörüne yazılıyor. Karakteri talimatla kurdum: söylenen ama işini yapan bir ırgat. Bana “ağam” diyor, mesaiden ve zamdan yakınıyor ama espri hep patrona; işçiyle ya da başka biriyle asla alay etmiyor. Evde 5 yaşında oğlum olduğu için bir de çocuk modu var: çocuk konuşunca iğneleme yok, kısa ve sıcak cümleler, oyun gibi İngilizce, tehlikeli bir istekte “babana soralım”. Oturum 15 saniye sessizlikte kapanıyor; televizyon oturumu açık tutmasın diye Irgat 45 saniye hiç konuşmazsa da kapanıyor.
6. İki tuzak: donan cevap, duyulmayan ikinci komut
İlk sürümde Irgat konuşurken, kendi sesini duymasın diye mikrofonu modele göndermeyi tamamen kesiyordum. Sonuç: haberi okurken cümlenin ortasında donuyor, cevaptan sonra da ikinci komutu hiç duymuyordu. Sebep, canlı modelin girişin kesintisiz akmasını beklemesi; giriş durunca çıkış da duruyor. Çözüm: Irgat konuşurken mikrofon yerine sessizlik (sıfır) gönderiyorum; kendi sesini duymuyor ama akış hiç kesilmiyor. Bir de kamera hoparlörden ses çalarken mikrofonu kendiliğinden susturuyor, yani Irgat konuşurken sözünü kesemiyorsun. Bu düzeltmelerden sonra tek oturumda haber, fotoğraf, ışık ve İngilizce dersini arka arkaya yaptı.
7. Eller: araçlar
Canlı model bir iş gerektiğinde işi “devrediyor” ve beklerken “Hemen ağam” diyor. Arka planda küçük bir dil modeli son konuşmaya bakıp doğru aracı seçiyor: ışık (aç, kapat, renk, parlaklık), robot süpürge (başlat, durdur, şarja dön, durum), hava temizleyici (aç, kapat, mod, hava kalitesi), fotoğraf (kameradan bir kare alıp bilgisayarda klasöre kaydediyor ve ekranda açıyor), “ne görüyorsun” (kareyi görsel modele soruyor), gündem (web aramasıyla haber, hava, döviz) ve hatırlatıcı (vakti gelince oturum açık olmasa da söylüyor). Sonuç canlı modele dönüyor, o da kendi tarzında söylüyor: “Çalıştırdım ağam, yine ben koşturuyorum.” Tuzak: “Süpürgenin şarjı ne durumda?” sorusunu model “şarja dön” komutu sandı. Her cihaza ayrı, yalnız okuyan bir “durum” seçeneği ekleyince sorular hiçbir şeyi çalıştırmıyor.

8. Yüz tanıma: tamamen bilgisayarda
İsteğe bağlı bir ekleme: tanıdığı birini görünce selam vermesi (“Hoş geldin ağam”). OpenCV'nin açık kaynak yüz modelleri (yüzü bulmak için YuNet, tanımak için SFace) bilgisayarda kare başına ~15 ms'de çalışıyor. Bir kişiyi 3 fotoğrafla kaydediyorum; ne kayıt fotoğrafları ne kameranın kareleri dışarı çıkıyor. Kişi 15 dakika görünmedikten sonra art arda iki karede tanınırsa selam veriyor. Dürüst olayım: bu kısım hâlâ ayar aşamasında. İlk sürümde ilk karede “son görülme” zamanını güncellediğim için selam hiç çalmıyordu; görüntüyü küçülttüğüm için de 3 metreden uzaktaki yüzleri kaçırıyordu. Evdeki herkesin rızası olmadan kimseyi kaydetme.
9. Sürekli açık tut
Bilgisayar uyursa Irgat da susuyor. Pilde ekran kapanınca Mac 1 dakikada uyuyordu; artık Irgat çalıştığı sürece sistem uykusunu engelliyorum (ekran yine kapanıyor). Bir kez, oturum kapanırken ses tanıyıcıyı iki yerden aynı anda sıfırladığım için dinleme tamamen çöktü; artık tek yerden sıfırlanıyor ve tek bir hata dinlemeyi asla durdurmuyor. Kamera kapanıp açılınca ya da bağlantı kopunca her şey birkaç saniyede kendiliğinden yeniden bağlanıyor. Kalıcı çözüm, evde kalan küçük bir bilgisayar: Raspberry Pi 5 yaklaşık 5 watt çekiyor. Dizüstünü dışarı götürdüğün an Irgat da seninle gidiyor.
10. Gizlilik ve maliyet
Beklerken ses bilgisayarda işleniyor; yalnız yerel model “hey ırgat”tan emin olamadığında son 5 saniye doğrulama için yazıya dökülmeye gidiyor ve bunun maliyeti kuruşun altında. Asıl ücret konuşurken işliyor: telefon arama rehberinde ölçtüğüm gibi canlı ses modelinin dakikası 5 sent civarı ve bir Irgat konuşması genelde 30-60 saniye sürüyor; araç seçimi ve fotoğraf yorumu için giden küçük istekler bunun yanında çok küçük kalıyor. Kamerayı internete açmadım; yüzler ve fotoğraflar bilgisayarda kalıyor. Kamera ev halkını görüyor ve duyuyor: kurmadan önce evdekilere söyle; istemeyen olursa kamerayı Mi Home'dan kapatmak Irgat'ı da susturuyor. Çocuklarla konuşacaksa çocuk modunu açık tut.
11. Aynısını kurdur
Build me a voice assistant that lives in my own Xiaomi Wi-Fi camera (it has a mic and a speaker). Work step by step, show me every file before you apply it, keep everything on my home network, and never expose the camera to the internet. 1. Camera bridge - Run go2rtc on an always-on computer on the same Wi-Fi and add the camera with its Xiaomi source (pair once with my Xiaomi account; the cloud is only used for the encryption key). - Read the mic as 16 kHz mono PCM. Send speech to the camera's speaker (backchannel) as a real-time stream in steady 20 ms frames; never write audio in bursts. - If the speaker only produces static, inspect the Xiaomi backchannel packet writer: make sure the audio payload (not the header) is copied into the packet, and match the header layout of the camera's own mic packets. 2. Wake word - Listen locally with Vosk's small model for my language. Accept "Hey [NAME]" and its common mis-hearings. - When the local model is unsure, send only the last ~5 seconds to a speech-to-text model and wake only if the transcript really contains the name. Rate-limit this check and cap it per day. - On wake, play a pre-generated greeting instantly while the live session connects. 3. Live conversation - Open a realtime speech-to-speech session (OpenAI GPT-Live or the Realtime API) and stream the mic continuously. While the assistant is speaking, send silence instead of the mic so it can't hear itself, but never stop the input stream. - Close the session after 15 seconds of silence, or if the assistant hasn't spoken for 45 seconds. - Only one thread may touch the speech recogniser, and a single bad audio chunk must never kill the listener. 4. Tools (function calling) - lights (on / off / colour / brightness), robot vacuum (start / stop / dock / status), air purifier (on / off / mode / status), take_photo (grab a frame from go2rtc, save it to a folder, open it on screen), describe_view (send the frame to a vision model), news_search (web search, answer in 3 short spoken sentences), reminders (spoken at the set time even with no session open). - Control Mi Home devices through their MIoT cloud property/action calls. Every device gets a read-only "status" action so questions never trigger actions. 5. Optional local face recognition - OpenCV YuNet + SFace, enrolment photos in a local folder, greet a known person when they appear in two consecutive frames after 15 minutes away. Nothing leaves the computer. 6. Reliability - Prevent system sleep while it runs, auto-reconnect the mic and the speaker, restart cleanly, and look up the camera's address again if the router changes it. Personality: a farmhand who grumbles about overtime and wants a raise but always gets the job done; he calls me "boss". The jokes are always on the boss, never on workers or anyone else. Child mode for a 5-year-old: short, warm, no teasing, English as a game, "let's ask your dad" for anything risky, and it never turns the camera off. My language is [LANGUAGE], my name is [MY NAME], the assistant's name is [NAME].
İpuçları
- Hoparlörden cızırtı geliyorsa önce sesin gerçekten gönderilip gönderilmediğine bak; format denemek saatlerini yiyebilir.
- Canlı ses modeline girişi hiç kesme; asistan konuşurken bile sessizlik gönder.
- Uyanma kelimesini televizyondan uzak, az duyulan bir kelime seç ve yerel model emin olamazsa ikinci bir doğrulama ekle.
- Her cihaza yalnız okuyan bir “durum” seçeneği koy; sorular hiçbir şeyi çalıştırmasın.
- Kamerayı asla internete açma; her şey ev ağında kalsın.
Sık sorulanlar
Her Xiaomi kamerayla çalışır mı?
Garanti değil. go2rtc'nin Xiaomi desteği modele göre değişiyor; benim kamerada görüntü ve mikrofon hemen çalıştı, hoparlör için go2rtc'de düzeltme gerekti. Önce kendi modelinde görüntü, mikrofon ve hoparlör desteği olup olmadığına bak.
İnternet kesilince çalışır mı?
Uyanma kelimesi ve yüz tanıma bilgisayarda çalışıyor ama konuşma ve cihaz komutları için internet gerekiyor.
Ne kadar tutuyor?
Beklerken neredeyse sıfır. Canlı ses modelinin dakikası 5 sent civarı ve bir konuşma genelde 30-60 saniye; buna küçük model istekleri ekleniyor. Sürekli açık küçük bir bilgisayar (Raspberry Pi 5) yaklaşık 5 watt çekiyor.
Konuşmalarım kaydediliyor mu?
Ben kaydetmiyorum. Beklerken ses bilgisayarda işleniyor; yalnız emin olunamayan birkaç saniye doğrulamaya gidiyor. Uyanınca konuşma OpenAI'nin canlı ses modeline gidiyor. Fotoğraflar yalnız “fotoğraf çek” dediğinde bilgisayara kaydediliyor.
Neden adı Irgat?
Söylenen ama işini yapan bir karakter istedim; ırgat, senin yerine çalışan demek. Espri hep patrona, yani bana: zam istiyor, mesaiden yakınıyor, sonunda işi yapıyor.
Yasal mı?
Kendi evinde, kendi kameranla ve evdekilerin bilgisiyle kullanmak kişisel bir kullanım. Misafirlerini ya da evde çalışan birini bilgilendir; başkasının evine ya da ortak alanlara izinsiz kamera ve mikrofon kurmak suç olabilir. Bu rehber hukuki tavsiye değil.