MagicMirror Projesi: kamera akışı, yerel algılama ve kapanış

MagicMirror Projesi: kamera akışı, yerel algılama ve kapanış kapsamında kaynakta uygulanan bileşenler, doğrulama sınırları ve geri dönüş.
MagicMirror Projesi’nde kamerayı yerel algılama, anlık önizleme ve talep üzerine görsel değerlendirme için ayrı tüketim yollarıyla ele aldık. Kamera yöneticisinde akışın durdurulması ve bekleyen işlemlerin yaşam döngüsü için düzenlemeler yaptık. Bu yazıda gerçek yüz, kimlik özniteliği, ev görüntüsü veya cihaz tanımlayıcısı gösterilmiyor.
Projede yaptığımız düzenleme
Kaynakta kamera yöneticisinin durdurma yolunda açık akışın track nesnelerini kapatan adımlar bulunuyor. Kamera yanıtlarında da istek kimliği ve iptal sinyali kullanılıyor; uykuya geçildikten veya yeni soru geldikten sonra eski görsel yanıtın konuşmaya dönüşmesini önleyen düzenlemeler kararlılık kaydında anlatılıyor. Bu, tarayıcının ve bütün diğer tüketicilerin kamerayı bıraktığını fiziksel olarak yeniden doğruladığımız anlamına gelmiyor.
Yerel önizlemeyi ve algılama özetini bellek üzerinden sunan yol, RuView panelindeki sensör bağlamından ayrı tutuldu. Radyo verisi yüz kimliği veya mimik kaynağı sayılmıyor. Yerel kimlik hattının eşleşme üretmesi de her sonuçta güvenilir kimlik doğrulaması olarak kabul edilmiyor. Aşağıdaki yaşam döngüsü kontrolleri, uygulanmış kodla sınırlı gözlemleri ayırarak bu tasarımın nasıl kabul edileceğini açıklıyor.
İzin, kullanım amacı ve aktarımı ayrı düşünün
MDN'ye göre getUserMedia güvenli bağlam ve kullanıcı izni gibi koşullara bağlıdır. Kurulu tarayıcının izin modeli ve kiosk ayarları ayrıca değerlendirilmelidir. Tarayıcının verdiği cihaz izni uygulamanın saklama ve dış aktarım politikasını kullanıcıya kendiliğinden anlatmaz. Kamera etkinliği görünür bir durumla belirtilmeli; görüntü talebinin ne işe yaradığı anlaşılmalıdır. HTTPS kullanılması gereksiz görüntü toplamayı haklı çıkarmaz.
Kabul tasarımında yerel analiz, dış değerlendirme ve kalıcı saklama için üç ayrı satır açın. Her satırın tetikleyicisi ve durdurma koşulu belli olsun. Tek kare gönderimi, sürekli video gönderimine göre farklı bir kapsamdır; fakat kare yine kişisel ayrıntı içerebilir. Görüş alanındaki başka kişiler, ekranlar ve belgeler de değerlendirilmelidir. Gerçek görüntü yerine sentetik bir test kartıyla aktarım yolunu doğrulamak başlangıç için daha uygundur.
- İzin ve amacı göster
- Gerekli akışı edin
- Kare aktarımını ayrıca seç
- Bütün sahipleri kapat
- Yeniden açılışı doğrula
Akışın birden fazla sahibi olabilir
Arayüz önizlemesi, yerel algılama ve fotoğraf isteği aynı kamera kaynağından yararlanabilir. Her tüketicinin ayrı akış açması kaynak kullanımını ve kapanış davranışını karmaşıklaştırabilir. Paylaşılan akış tercih edilecekse hangi bileşenin sahibi olduğu ve son tüketici ayrıldığında ne olacağı açıkça tanımlanmalıdır. Bu bir tasarım önerisidir; bütün tarayıcı ve kamera sürücülerinin aynı davranacağı varsayılmamalıdır.
Bir bileşenin kendi track nesnesini durdurması başka bir track aynı kaynağı kullanıyorsa donanımı hemen kapatmayabilir. MDN stop belgesi bu ayrımı özellikle açıklar. Bu nedenle yalnızca bir nesnenin readyState değerini görmek bütün uygulamanın kamerayı bıraktığını kanıtlamaz. Açık tüketicileri, başka sekmeleri ve yeniden bağlanma işlemlerini de hesaba katın. Görünür arayüz durumu kaynak sahipliğiyle tutarlı olmalıdır.
Kapanışı bütün olay yollarında tasarlayın
Normal çıkış, uykuya geçiş, izin iptali, kamera bağlantısının kaybı ve sayfanın yeniden kurulması için ayrı kapanış yolları belirleyin. İşlev devre dışı bırakıldığında bekleyen tek kare isteği daha sonra kendiliğinden çalışmamalıdır. Geç gelen izin sonucuyla yeni bir akış açılması da değerlendirilmelidir. İstek başladıktan sonra kullanıcı vazgeçerse edinilen kaynağı serbest bırakacak bir sahiplik denetimi gerekir.
Stop çağrısından sonra ilgili track durumunun ended olması beklenir; ancak aynı çağrının ended olayını otomatik üreteceğini varsaymayın. Temizlik mantığını yalnız bu olaya bağlamak eksik bırakabilir. Video öğesinin kaynak bağlantısını ayırmak, zamanlayıcıları ve işleme döngülerini sonlandırmak da ele alınmalıdır. Yalnız CSS ile gizlemek veya kare hızını azaltmak, kamerayı bırakmakla aynı teknik işlem değildir.
Test kanıtı ve geri dönüş
Laboratuvarda gerçek insan görüntüsü kullanmadan izin reddi, yeniden izin, modül açma kapama ve iki tüketicili kullanım senaryolarını sınayın. Her senaryoda açık track sayısı, uygulama durumu ve beklenen aktarım birlikte kontrol edilsin. Gösterge ışığı yararlı bir gözlemdir; donanım ve tarayıcı davranışıyla birlikte yorumlanmalıdır. Tek bir göstergeye dayanarak kayıt veya ağ aktarımı olmadığı sonucunu çıkarmayın.
Geri dönüşte önceki kamera yönetim sürümünü geri alın ve eski oturumdan kalan bütün tüketicileri kontrollü kapatın. Temiz oturumda izin, yerel işleme ve kapanış kabulünü yeniden yürütün. Önceden kaydedilmiş veya gönderilmiş görüntülerin silinmesi ayrı bir iş akışıdır; akışı durdurmak bunu gerçekleştirmez. Bu yazı performans veya yüz tanıma doğruluğu raporu değildir; kamera kaynağının ve veri sınırının açık biçimde yönetilmesine odaklanır.
Serinin bütün çalışmaları: MagicMirror Projesi.
Nasıl yapılır: ayrıntılı uygulama
Ortam ve ön koşullar: Tarayıcı kamera yaşam döngüsü örneği — HTTPS/güvenli bağlam ve kullanıcı kamera izni gerekir; örnek yerel test içindir.
- Güvenli bağlam ve izinli test sayfasını hazırlayın
- Video ve düğmeleri oluşturun
- Geç gelen izin sonucunu da kapatan yöneticiyi yazın
- Normal ve yarış durumunu test edin
- Algılama ve geri dönüş sınırını koruyun
1. Güvenli bağlam ve izinli test sayfasını hazırlayın
Tarayıcı camera API’si HTTPS veya desteklenen localhost güvenli bağlamı ve kullanıcı izni ister. Bu örnek yalnız yerel video yaşam döngüsüdür; gerçek yüz/ev görüntüsü sunucuya gönderilmez.
2. Video ve düğmeleri oluşturun
Yeni kamera-test.html dosyasına HTML parçasını ekleyin; aşağıdaki JS aynı dosyada script içine veya camera.js olarak bağlanır. Gizli otomatik kamera başlatılmaz.
<button id="kamera-ac" type="button">Kamerayı aç</button>
<button id="kamera-kapat" type="button">Kapat</button>
<p id="kamera-durum" role="status"></p>
<video id="kamera" autoplay muted playsinline></video>
<script src="camera.js"></script>
3. Geç gelen izin sonucunu da kapatan yöneticiyi yazın
camera.js dosyası aşağıdadır. close çağrısı pending getUserMedia sonucunu iptal etmese bile generation kontrolü sonradan gelen stream’in bütün track’lerini durdurur. HTML’ye içeriği textContent ile yazılır.
const video = document.getElementById("kamera");
const status = document.getElementById("kamera-durum");
let stream = null, generation = 0;
function closeCamera() {
generation++;
stream?.getTracks().forEach(track => track.stop());
stream = null;
video.srcObject = null;
status.textContent = "Kapalı";
}
async function openCamera() {
closeCamera();
const mine = generation;
status.textContent = "İzin bekleniyor";
try {
const next = await navigator.mediaDevices.getUserMedia({video:true,audio:false});
if (mine !== generation) { next.getTracks().forEach(t => t.stop()); return; }
stream = next;
video.srcObject = next;
status.textContent = "Yerel önizleme açık";
} catch (error) {
if (mine === generation) status.textContent = "Kamera açılamadı: " + error.name;
}
}
document.getElementById("kamera-ac").addEventListener("click", openCamera);
document.getElementById("kamera-kapat").addEventListener("click", closeCamera);
window.addEventListener("pagehide", closeCamera);
4. Normal ve yarış durumunu test edin
İzin ver, izin reddet, aygıt yok, açmayı beklerken kapat, art arda aç/kapat ve sayfadan çıkma durumlarını deneyin. Kapatma sonrası kamera göstergesi/track readyState sona ermeli; yalnız video elementini gizlemek kamera kapatma değildir.
5. Algılama ve geri dönüş sınırını koruyun
Projede frame örnekleme/algılama tüketicileri ayrı iptal sözleşmesine bağlanır; bu preview kodu onları kurmaz veya kimlik çıkarımı yapmaz. Test sayfasını kapatıp önceki modül sürümüne dönün; snapshot veya biyometrik çıktı yayımlamayın.
Beklenen sonuç: Kullanıcı izniyle açılan akış kapatmada veya geç sonuçta bütün track’leriyle durur.
Sonuç farklıysa: Fonksiyon hata verirse kullanıcı izni ve güvenli bağlamı kontrol edin; sessizce kayıt başlatmayın.
Geri dönüş: Yeni kamera tüketicisini durdurup önceki sahiplik/yeniden bağlanma davranışına dönün.
Kaynaklar
Uygulama örnekleri teknik, kaynak ve mahremiyet incelemesinden geçti. Temsili haritalar üretici ekran görüntüsü veya canlı sistem testi olarak sunulmaz. Kullanılan ürün sürümü ve kapsam uygulama öncesinde doğrulanmalıdır.
Okumaya devam edin

MagicMirror Projesi: YouTube Shorts listesi ve kesintiye dayanıklı oynatıcı
YouTube liste üreticisi, sürüm bildiren modül yardımcısı ve hata durumunda ilerleyen oynatıcı için yaptığımız çalışmaları anlatan proje notu.

MagicMirror Projesi
Pi-hole, RuView, YouTube, Spotify, ses, kamera, hafıza ve kiosk çalışmalarını bir araya getiren teknik proje dizini.
