<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://program.sonsuz.us/feed.xml" rel="self" type="application/atom+xml" /><link href="https://program.sonsuz.us/" rel="alternate" type="text/html" /><updated>2026-10-26T06:05:38+00:00</updated><id>https://program.sonsuz.us/feed.xml</id><title type="html">SonsuzUs</title><subtitle>Programlama ve Yazılım</subtitle><author><name>Sonsuz Us</name></author><entry><title type="html">C Dilinde Yapılar ve Birlikler: struct ile union Arasındaki Farklar</title><link href="https://program.sonsuz.us/posts/c-dilinde-yapilar-ve-birlikler-struct-ile-union-arasindaki-farklar/" rel="alternate" type="text/html" title="C Dilinde Yapılar ve Birlikler: struct ile union Arasındaki Farklar" /><published>2026-10-26T00:00:00+00:00</published><updated>2026-10-26T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/c-dilinde-yapilar-ve-birlikler-struct-ile-union-arasindaki-farklar</id><content type="html" xml:base="https://program.sonsuz.us/posts/c-dilinde-yapilar-ve-birlikler-struct-ile-union-arasindaki-farklar/"><![CDATA[<p>C dilinde bir öğrencinin adı, numarası ve notu gibi birbiriyle ilişkili fakat farklı türlerdeki verileri yönetmek istediğimizi düşünelim. Ayrı ayrı değişkenler kullanabiliriz; ancak veri sayısı arttıkça kodumuz kısa sürede dağınık bir çekmeceye dönüşür. <code class="language-plaintext highlighter-rouge">struct</code> ve <code class="language-plaintext highlighter-rouge">union</code>, farklı veri türlerini tek bir isim altında toplayarak bu karmaşayı düzenleyen iki güçlü C aracıdır.</p>

<p>``</p>

<h2 id="yapı-struct-nedir">Yapı (<code class="language-plaintext highlighter-rouge">struct</code>) nedir?</h2>

<p>Bir yapı, birbiriyle ilişkili değişkenleri tek bir veri modeli içinde saklar. Yapının her üyesi bellekte kendisine ait bir alana sahiptir. Dolayısıyla bütün üyeler aynı anda geçerli değerler taşıyabilir.</p>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;stdio.h&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;string.h&gt;</span><span class="cp">
</span>
<span class="k">struct</span> <span class="n">Ogrenci</span> <span class="p">{</span>
    <span class="kt">char</span> <span class="n">ad</span><span class="p">[</span><span class="mi">30</span><span class="p">];</span>
    <span class="kt">int</span> <span class="n">numara</span><span class="p">;</span>
    <span class="kt">float</span> <span class="n">notOrtalamasi</span><span class="p">;</span>
<span class="p">};</span>

<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">struct</span> <span class="n">Ogrenci</span> <span class="n">ogrenci</span><span class="p">;</span>

    <span class="n">strcpy</span><span class="p">(</span><span class="n">ogrenci</span><span class="p">.</span><span class="n">ad</span><span class="p">,</span> <span class="s">"Ada"</span><span class="p">);</span>
    <span class="n">ogrenci</span><span class="p">.</span><span class="n">numara</span> <span class="o">=</span> <span class="mi">1024</span><span class="p">;</span>
    <span class="n">ogrenci</span><span class="p">.</span><span class="n">notOrtalamasi</span> <span class="o">=</span> <span class="mi">91</span><span class="p">.</span><span class="mi">5</span><span class="n">f</span><span class="p">;</span>

    <span class="n">printf</span><span class="p">(</span><span class="s">"%s - %d - %.1f</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span>
           <span class="n">ogrenci</span><span class="p">.</span><span class="n">ad</span><span class="p">,</span>
           <span class="n">ogrenci</span><span class="p">.</span><span class="n">numara</span><span class="p">,</span>
           <span class="n">ogrenci</span><span class="p">.</span><span class="n">notOrtalamasi</span><span class="p">);</span>

    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Burada <code class="language-plaintext highlighter-rouge">ogrenci</code> tek bir değişkendir; fakat <code class="language-plaintext highlighter-rouge">.</code> operatörüyle erişilen üç farklı üyeyi taşır. Bir yapı işaretçisi kullanıldığında ise üyelere <code class="language-plaintext highlighter-rouge">-&gt;</code> operatörüyle erişilir: <code class="language-plaintext highlighter-rouge">ogrenciPtr-&gt;numara</code>.</p>

<h2 id="birlik-union-nedir">Birlik (<code class="language-plaintext highlighter-rouge">union</code>) nedir?</h2>

<p>Birlik de farklı türleri aynı referans altında toplar, ancak üyelerin tamamı <strong>aynı bellek alanını paylaşır</strong>. Bir üyeye yeni değer yazıldığında diğer üyenin eski değeri güvenilirliğini kaybeder. Yani birlik, “hepsini aynı anda sakla” değil, “bunlardan birini sakla” yaklaşımıdır.</p>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;stdio.h&gt;</span><span class="cp">
</span>
<span class="k">union</span> <span class="n">Deger</span> <span class="p">{</span>
    <span class="kt">int</span> <span class="n">tamSayi</span><span class="p">;</span>
    <span class="kt">float</span> <span class="n">ondalik</span><span class="p">;</span>
    <span class="kt">char</span> <span class="n">karakter</span><span class="p">;</span>
<span class="p">};</span>

<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">union</span> <span class="n">Deger</span> <span class="n">veri</span><span class="p">;</span>

    <span class="n">veri</span><span class="p">.</span><span class="n">tamSayi</span> <span class="o">=</span> <span class="mi">42</span><span class="p">;</span>
    <span class="n">printf</span><span class="p">(</span><span class="s">"Tam sayı: %d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">veri</span><span class="p">.</span><span class="n">tamSayi</span><span class="p">);</span>

    <span class="n">veri</span><span class="p">.</span><span class="n">ondalik</span> <span class="o">=</span> <span class="mi">3</span><span class="p">.</span><span class="mi">14</span><span class="n">f</span><span class="p">;</span>
    <span class="n">printf</span><span class="p">(</span><span class="s">"Ondalık: %.2f</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">veri</span><span class="p">.</span><span class="n">ondalik</span><span class="p">);</span>

    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<p>İkinci atamadan sonra <code class="language-plaintext highlighter-rouge">tamSayi</code> üyesini okumak anlamlı değildir; çünkü aynı bitler artık <code class="language-plaintext highlighter-rouge">float</code> biçiminde yorumlanmaktadır.</p>

<h2 id="bellek-hesabı">Bellek hesabı</h2>

<p>Bir yapının teorik boyutu üyelerin boyutları toplamına yakındır:</p>

\[S_{struct} \geq \sum_{i=1}^{n} S_i\]

<p>Eşitsizliğin nedeni <strong>padding</strong> adı verilen hizalama boşluklarıdır. Derleyici, işlemcinin verilere daha verimli erişebilmesi için üyeler arasına kullanılmayan baytlar ekleyebilir.</p>

<p>Bir birlik için temel ilişki şöyledir:</p>

\[S_{union} \geq \max(S_1, S_2, \ldots, S_n)\]

<p>Birliğin boyutu genellikle en büyük üyenin boyutudur; hizalama gereksinimleri sonucu küçük farklılıklar görülebilir. Kesin sonucu öğrenmenin doğru yolu <code class="language-plaintext highlighter-rouge">sizeof</code> kullanmaktır.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th><code class="language-plaintext highlighter-rouge">struct</code></th>
      <th><code class="language-plaintext highlighter-rouge">union</code></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Bellek kullanımı</td>
      <td>Üyelerin toplamına yakındır</td>
      <td>En büyük üyeye yakındır</td>
    </tr>
    <tr>
      <td>Aynı anda geçerli üye</td>
      <td>Tüm üyeler</td>
      <td>Genellikle yalnızca biri</td>
    </tr>
    <tr>
      <td>Veri koruma</td>
      <td>Bir üyeyi değiştirmek diğerlerini bozmaz</td>
      <td>Yeni yazma eski üyeyi ezer</td>
    </tr>
    <tr>
      <td>Tipik kullanım</td>
      <td>Kayıt ve nesne modelleme</td>
      <td>Değişken türde veri, donanım ve protokoller</td>
    </tr>
  </tbody>
</table>

<h2 id="güvenli-birlik-kullanımı-etiketli-birlik">Güvenli birlik kullanımı: etiketli birlik</h2>

<p>Birliğin hangi üyesinin geçerli olduğunu kendiliğinden bilmesi mümkün değildir. Bu nedenle bir <code class="language-plaintext highlighter-rouge">enum</code> etiketiyle birlik kullanımını güvenli hâle getirebiliriz:</p>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">enum</span> <span class="n">DegerTuru</span> <span class="p">{</span>
    <span class="n">TAM_SAYI</span><span class="p">,</span>
    <span class="n">ONDALIK</span>
<span class="p">};</span>

<span class="k">struct</span> <span class="n">EtiketliDeger</span> <span class="p">{</span>
    <span class="k">enum</span> <span class="n">DegerTuru</span> <span class="n">tur</span><span class="p">;</span>
    <span class="k">union</span> <span class="p">{</span>
        <span class="kt">int</span> <span class="n">tamSayi</span><span class="p">;</span>
        <span class="kt">float</span> <span class="n">ondalik</span><span class="p">;</span>
    <span class="p">}</span> <span class="n">veri</span><span class="p">;</span>
<span class="p">};</span>

<span class="kt">void</span> <span class="nf">yazdir</span><span class="p">(</span><span class="k">struct</span> <span class="n">EtiketliDeger</span> <span class="n">deger</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">if</span> <span class="p">(</span><span class="n">deger</span><span class="p">.</span><span class="n">tur</span> <span class="o">==</span> <span class="n">TAM_SAYI</span><span class="p">)</span> <span class="p">{</span>
        <span class="n">printf</span><span class="p">(</span><span class="s">"%d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">deger</span><span class="p">.</span><span class="n">veri</span><span class="p">.</span><span class="n">tamSayi</span><span class="p">);</span>
    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
        <span class="n">printf</span><span class="p">(</span><span class="s">"%.2f</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">deger</span><span class="p">.</span><span class="n">veri</span><span class="p">.</span><span class="n">ondalik</span><span class="p">);</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Bu desen, modern dillerdeki variant veya sum type yapılarına benzer. <code class="language-plaintext highlighter-rouge">tur</code> alanı hangi üyenin okunacağını söyler; <code class="language-plaintext highlighter-rouge">union</code> ise gereksiz bellek tüketimini azaltır.</p>

<p>Kısacası, bir varlığın bütün özelliklerine aynı anda ihtiyacınız varsa <code class="language-plaintext highlighter-rouge">struct</code>; seçeneklerden yalnızca biri tutulacaksa <code class="language-plaintext highlighter-rouge">union</code> uygundur. İkisini birlikte kullanmak ise hem düzenli hem de bellek açısından ekonomik veri modelleri kurmanın etkili bir yoludur.</p>

<p><img src="/img/c-dilinde-yapilar-86.svg" alt="c-dilinde-yapilar-86" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="c" /><category term="struct" /><category term="union" /><category term="veri yapıları" /><category term="bellek yönetimi" /><category term="programlama" /><summary type="html"><![CDATA[C dilinde bir öğrencinin adı, numarası ve notu gibi birbiriyle ilişkili fakat farklı türlerdeki verileri yönetmek istediğimizi düşünelim. Ayrı ayrı değişkenler kullanabiliriz; ancak veri sayısı arttıkça kodumuz kısa sürede dağınık bir çekmeceye dönüşür. struct ve union, farklı veri türlerini tek bir isim altında toplayarak bu karmaşayı düzenleyen iki güçlü C aracıdır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/c-dilinde-yapilar-86.png" /><media:content medium="image" url="https://program.sonsuz.us/img/c-dilinde-yapilar-86.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Robotik Hasat Sistemlerinde Nesne Tanıma ve Meyve Olgunluğu Analizi</title><link href="https://program.sonsuz.us/posts/robotik-hasat-sistemlerinde-nesne-tanima-ve-meyve-olgunlugu-analizi/" rel="alternate" type="text/html" title="Robotik Hasat Sistemlerinde Nesne Tanıma ve Meyve Olgunluğu Analizi" /><published>2026-10-26T00:00:00+00:00</published><updated>2026-10-26T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/robotik-hasat-sistemlerinde-nesne-tanima-ve-meyve-olgunlugu-analizi</id><content type="html" xml:base="https://program.sonsuz.us/posts/robotik-hasat-sistemlerinde-nesne-tanima-ve-meyve-olgunlugu-analizi/"><![CDATA[<p>Bir meyve toplama robotu için ağaca bakmak, insanın manav tezgâhına bakmasından çok daha karmaşıktır. Robot; yaprakların arkasındaki meyveleri bulmalı, hangilerinin olgun olduğunu anlamalı ve ezmeden toplayabileceği bir hareket planlamalıdır. Bu süreçte kameralar robotun gözü, görüntü işleme algoritmaları ise deneyimli bir çiftçinin sezgileri gibi çalışır.</p>

<p><img src="/img/robotik-hasat-sistemlerinde-46.svg" alt="robotik-hasat-sistemlerinde-46" /></p>

<p>``</p>

<h2 id="robot-meyveyi-nasıl-görür">Robot meyveyi nasıl görür?</h2>

<p>Sistem genellikle RGB, derinlik veya multispektral kamera kullanır. RGB kamera renk ve doku bilgisi sağlarken derinlik kamerası meyvenin robota uzaklığını ölçer. Multispektral kameralar ise insan gözünün göremediği yakın kızılötesi bantları inceleyerek meyvenin kimyasal yapısı hakkında ipuçları yakalayabilir.</p>

<p>İlk aşama <strong>nesne tespiti</strong>dir. Görüntü içindeki elma, domates veya çilek gibi hedefler sınırlayıcı kutu ya da piksel maskesiyle belirlenir. YOLO gibi tek aşamalı modeller hızlı çalıştıkları için hareketli robotlarda sık kullanılır. Mask R-CNN gibi bölütleme modelleri ise meyvenin sınırlarını daha hassas çıkarır; ancak daha fazla hesaplama gücü ister.</p>

<table>
  <thead>
    <tr>
      <th>Yöntem</th>
      <th>Avantajı</th>
      <th>Dezavantajı</th>
      <th>Uygun kullanım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Renk eşikleme</td>
      <td>Hızlı ve ucuzdur</td>
      <td>Işıktan kolay etkilenir</td>
      <td>Kontrollü seralar</td>
    </tr>
    <tr>
      <td>YOLO</td>
      <td>Gerçek zamanlı tespit yapar</td>
      <td>Eğitim verisi gerektirir</td>
      <td>Hareketli hasat robotları</td>
    </tr>
    <tr>
      <td>Mask R-CNN</td>
      <td>Hassas meyve maskesi üretir</td>
      <td>Hesaplama maliyeti yüksektir</td>
      <td>Karmaşık ve örtüşen sahneler</td>
    </tr>
    <tr>
      <td>Multispektral analiz</td>
      <td>İç kaliteyi tahmin edebilir</td>
      <td>Kamera maliyeti yüksektir</td>
      <td>Hassas olgunluk ölçümü</td>
    </tr>
  </tbody>
</table>

<h2 id="olgunluk-yalnızca-renk-değildir">Olgunluk yalnızca renk değildir</h2>

<p>Kırmızı bir elmanın olgun olduğu düşünülebilir; fakat güneş ışığı, kamera pozlaması ve meyvenin çeşidi bu varsayımı bozabilir. Bu nedenle sistemler renk, doku, boyut ve spektral yansıma gibi birden fazla özelliği birlikte değerlendirir.</p>

<p>RGB yerine HSV renk uzayı kullanıldığında renk tonu, parlaklıktan kısmen ayrılır. Burada <strong>H</strong> renk tonunu, <strong>S</strong> doygunluğu, <strong>V</strong> ise parlaklığı temsil eder. Basit bir olgunluk skoru şöyle tanımlanabilir:</p>

\[M = w_h H + w_s S + w_t T + w_d D\]

<p>Bu denklemde $T$ doku özelliğini, $D$ tahmin edilen çapı, $w$ değerleri ise her özelliğin önem katsayısını gösterir. Makine öğrenmesi kullanıldığında bu ağırlıklar elle seçilmek yerine veriden öğrenilir. İkili sınıflandırmada modelin olgunluk olasılığı lojistik fonksiyonla hesaplanabilir:</p>

\[P(olgun) = \frac{1}{1 + e^{-z}}\]

<p>Olasılık belirlenen eşiği, örneğin $0.80$ değerini aşarsa robot toplama kararı verir.</p>

<h2 id="basit-bir-renk-analizi">Basit bir renk analizi</h2>

<p>Aşağıdaki Python kodu, görüntüdeki kırmızı bölgeleri HSV eşikleme ile ayırır. Bu yaklaşım tek başına endüstriyel çözüm değildir; ancak olgun domates adaylarını hızlıca belirleyen faydalı bir ön işleme adımıdır.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">cv2</span>
<span class="kn">import</span> <span class="n">numpy</span> <span class="k">as</span> <span class="n">np</span>

<span class="n">image</span> <span class="o">=</span> <span class="n">cv2</span><span class="p">.</span><span class="nf">imread</span><span class="p">(</span><span class="sh">'</span><span class="s">domatesler.jpg</span><span class="sh">'</span><span class="p">)</span>
<span class="n">hsv</span> <span class="o">=</span> <span class="n">cv2</span><span class="p">.</span><span class="nf">cvtColor</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="n">cv2</span><span class="p">.</span><span class="n">COLOR_BGR2HSV</span><span class="p">)</span>

<span class="c1"># Kırmızı, HSV çemberinin iki ucunda bulunduğu için iki aralık kullanılır.
</span><span class="n">mask1</span> <span class="o">=</span> <span class="n">cv2</span><span class="p">.</span><span class="nf">inRange</span><span class="p">(</span><span class="n">hsv</span><span class="p">,</span> <span class="n">np</span><span class="p">.</span><span class="nf">array</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="mi">90</span><span class="p">,</span> <span class="mi">70</span><span class="p">]),</span> <span class="n">np</span><span class="p">.</span><span class="nf">array</span><span class="p">([</span><span class="mi">10</span><span class="p">,</span> <span class="mi">255</span><span class="p">,</span> <span class="mi">255</span><span class="p">]))</span>
<span class="n">mask2</span> <span class="o">=</span> <span class="n">cv2</span><span class="p">.</span><span class="nf">inRange</span><span class="p">(</span><span class="n">hsv</span><span class="p">,</span> <span class="n">np</span><span class="p">.</span><span class="nf">array</span><span class="p">([</span><span class="mi">170</span><span class="p">,</span> <span class="mi">90</span><span class="p">,</span> <span class="mi">70</span><span class="p">]),</span> <span class="n">np</span><span class="p">.</span><span class="nf">array</span><span class="p">([</span><span class="mi">180</span><span class="p">,</span> <span class="mi">255</span><span class="p">,</span> <span class="mi">255</span><span class="p">]))</span>
<span class="n">mask</span> <span class="o">=</span> <span class="n">cv2</span><span class="p">.</span><span class="nf">bitwise_or</span><span class="p">(</span><span class="n">mask1</span><span class="p">,</span> <span class="n">mask2</span><span class="p">)</span>

<span class="c1"># Küçük gürültüleri temizleyerek daha kararlı bölgeler oluştururuz.
</span><span class="n">kernel</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">ones</span><span class="p">((</span><span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span> <span class="n">np</span><span class="p">.</span><span class="n">uint8</span><span class="p">)</span>
<span class="n">mask</span> <span class="o">=</span> <span class="n">cv2</span><span class="p">.</span><span class="nf">morphologyEx</span><span class="p">(</span><span class="n">mask</span><span class="p">,</span> <span class="n">cv2</span><span class="p">.</span><span class="n">MORPH_OPEN</span><span class="p">,</span> <span class="n">kernel</span><span class="p">)</span>

<span class="n">ratio</span> <span class="o">=</span> <span class="n">cv2</span><span class="p">.</span><span class="nf">countNonZero</span><span class="p">(</span><span class="n">mask</span><span class="p">)</span> <span class="o">/</span> <span class="n">mask</span><span class="p">.</span><span class="n">size</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">'</span><span class="s">Kırmızı piksel oranı: </span><span class="si">{</span><span class="n">ratio</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="o">%</span><span class="si">}</span><span class="sh">'</span><span class="p">)</span>
</code></pre></div></div>

<p>Kod, kırmızı piksel oranını verir; fakat yaprak, gölge veya kırmızı bir ekipman yanlış pozitif üretebilir. Bu nedenle pratik sistemlerde sonuç, eğitilmiş bir sinir ağı ve derinlik ölçümüyle doğrulanır.</p>

<h2 id="tarladaki-gerçek-zorluklar">Tarladaki gerçek zorluklar</h2>

<p>Değişken güneş ışığı, üst üste gelen meyveler, rüzgârla sallanan dallar ve kamera üzerindeki toz model başarımını düşürür. Eğitim veri kümesinde farklı saatler, hava koşulları, çeşitler ve olgunluk seviyeleri bulunmalıdır. Döndürme, parlaklık değiştirme ve yapay gölge ekleme gibi veri artırma teknikleri de modeli dayanıklı hâle getirir.</p>

<p>Son aşamada meyvenin 3B konumu robot koluna aktarılır. Kol, yaklaşma açısını hesaplar; kuvvet sensörüyle sıkma basıncını sınırlar ve meyveyi nazikçe koparır. Böylece nesne tanıma yalnızca “Bu bir meyve mi?” sorusunu değil, “Olgun mu, nerede ve güvenle toplanabilir mi?” sorularını da yanıtlayan bütüncül bir karar mekanizmasına dönüşür.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="robotik" /><category term="görüntü işleme" /><category term="nesne tanıma" /><category term="yapay zeka" /><category term="tarım teknolojileri" /><category term="python" /><summary type="html"><![CDATA[Bir meyve toplama robotu için ağaca bakmak, insanın manav tezgâhına bakmasından çok daha karmaşıktır. Robot; yaprakların arkasındaki meyveleri bulmalı, hangilerinin olgun olduğunu anlamalı ve ezmeden toplayabileceği bir hareket planlamalıdır. Bu süreçte kameralar robotun gözü, görüntü işleme algoritmaları ise deneyimli bir çiftçinin sezgileri gibi çalışır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/robotik-hasat-sistemlerinde-46.png" /><media:content medium="image" url="https://program.sonsuz.us/img/robotik-hasat-sistemlerinde-46.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Simülasyondan Gerçek Robota: Sim-to-Real Uçurumunu Aşmak</title><link href="https://program.sonsuz.us/posts/simulasyondan-gercek-robota-sim-to-real-ucurumunu-asmak/" rel="alternate" type="text/html" title="Simülasyondan Gerçek Robota: Sim-to-Real Uçurumunu Aşmak" /><published>2026-10-26T00:00:00+00:00</published><updated>2026-10-26T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/simulasyondan-gercek-robota-sim-to-real-ucurumunu-asmak</id><content type="html" xml:base="https://program.sonsuz.us/posts/simulasyondan-gercek-robota-sim-to-real-ucurumunu-asmak/"><![CDATA[<p>Bir robotun simülasyonda kusursuzca yürümesi, gerçek dünyaya çıktığında aynı zarafetle hareket edeceği anlamına gelmez. Sanal ortamda şampiyon olan kontrol politikası; gerçek motordaki gecikme, zemindeki sürtünme veya sensördeki küçücük bir gürültü yüzünden kendisini yerde bulabilir. Simülasyon ile fiziksel dünya arasındaki bu uyumsuzluğa <strong>sim-to-real gap</strong>, yani simülasyondan gerçeğe aktarım uçurumu denir.</p>

<p><img src="/img/simulasyondan-gercek-robota-35.svg" alt="simulasyondan-gercek-robota-35" /></p>

<p>``</p>

<h2 id="kontrol-politikası-ne-öğrenir">Kontrol politikası ne öğrenir?</h2>

<p>Takviyeli öğrenmede robot, bulunduğu durumdan hangi eyleme geçeceğini belirleyen bir politika öğrenir. Bu ilişki genel olarak</p>

\[a_t \sim \pi_\theta(a_t \mid s_t)\]

<p>biçiminde gösterilir. Burada $s_t$ robotun eklem açıları, hızları ve sensör ölçümleri gibi durum bilgisini; $a_t$ motorlara gönderilecek komutları; $\theta$ ise öğrenilen parametreleri temsil eder.</p>

<p>Amaç, zaman boyunca elde edilen indirimli ödülü büyütmektir:</p>

\[J(\theta)=\mathbb{E}\left[\sum_{t=0}^{T}\gamma^t r_t\right]\]

<p>Robot dengede kalmak, hedefe ilerlemek veya enerji tüketimini azaltmak gibi davranışları ödül fonksiyonu üzerinden keşfeder. Simülasyon bu süreç için idealdir; robot binlerce kez düşebilir, duvara çarpabilir ve yeniden başlatılabilir. Ne teknisyen üzülür ne de pahalı bir dişli kutusu kırılır.</p>

<h2 id="uçurum-neden-oluşur">Uçurum neden oluşur?</h2>

<p>Simülatörler gerçekliğin eksiksiz kopyası değil, hesaplanabilir modelleridir. Gerçek dünyadaki temas dinamikleri, kablo esnekliği, motor sıcaklığı ve kamera ışığı gibi ayrıntıların tamamını modellemek zordur.</p>

<table>
  <thead>
    <tr>
      <th>Etken</th>
      <th>Simülasyonda</th>
      <th>Gerçek dünyada</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Sürtünme</td>
      <td>Sabit veya basitleştirilmiş</td>
      <td>Yüzeye ve aşınmaya göre değişken</td>
    </tr>
    <tr>
      <td>Sensörler</td>
      <td>Temiz ve düzenli veri</td>
      <td>Gürültü, sapma ve veri kaybı</td>
    </tr>
    <tr>
      <td>Motorlar</td>
      <td>Komuta anında yanıt</td>
      <td>Gecikme, doygunluk ve ısınma</td>
    </tr>
    <tr>
      <td>Temas</td>
      <td>Matematiksel yaklaşım</td>
      <td>Darbe, titreşim ve deformasyon</td>
    </tr>
    <tr>
      <td>Görüntü</td>
      <td>Kontrollü ışık</td>
      <td>Gölge, yansıma ve hareket bulanıklığı</td>
    </tr>
  </tbody>
</table>

<p>Politika simülatörün kusurlarını kullanmayı da öğrenebilir. Örneğin gerçek dışı bir temas modelinden yararlanarak yürüyen robot, fiziksel zeminde aynı numarayı yapamaz. Bu durum, adeta sınav sorularını ezberleyip konuyu öğrenmemeye benzer.</p>

<h2 id="domain-randomization-gerçekliği-tahmin-etmek-yerine-çeşitlendirmek">Domain randomization: Gerçekliği tahmin etmek yerine çeşitlendirmek</h2>

<p>En yaygın çözüm, eğitim sırasında fiziksel parametreleri rastgele değiştiren <strong>domain randomization</strong> yaklaşımıdır. Robot her bölümde farklı sürtünme, kütle, gecikme ve sensör gürültüsü görür. Böylece tek bir sanal dünyaya ezber yapmak yerine dayanıklı bir strateji geliştirir.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">random</span>

<span class="c1"># Her eğitim bölümünde yeni fiziksel koşullar üretir.
</span><span class="k">def</span> <span class="nf">randomize_environment</span><span class="p">(</span><span class="n">sim</span><span class="p">):</span>
    <span class="n">sim</span><span class="p">.</span><span class="n">friction</span> <span class="o">=</span> <span class="n">random</span><span class="p">.</span><span class="nf">uniform</span><span class="p">(</span><span class="mf">0.4</span><span class="p">,</span> <span class="mf">1.2</span><span class="p">)</span>
    <span class="n">sim</span><span class="p">.</span><span class="n">motor_strength</span> <span class="o">=</span> <span class="n">random</span><span class="p">.</span><span class="nf">uniform</span><span class="p">(</span><span class="mf">0.85</span><span class="p">,</span> <span class="mf">1.15</span><span class="p">)</span>
    <span class="n">sim</span><span class="p">.</span><span class="n">sensor_noise</span> <span class="o">=</span> <span class="n">random</span><span class="p">.</span><span class="nf">uniform</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.03</span><span class="p">)</span>
    <span class="n">sim</span><span class="p">.</span><span class="n">control_delay</span> <span class="o">=</span> <span class="n">random</span><span class="p">.</span><span class="nf">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>

<span class="k">for</span> <span class="n">episode</span> <span class="ow">in</span> <span class="nf">range</span><span class="p">(</span><span class="mi">10_000</span><span class="p">):</span>
    <span class="nf">randomize_environment</span><span class="p">(</span><span class="n">sim</span><span class="p">)</span>
    <span class="n">observation</span> <span class="o">=</span> <span class="n">sim</span><span class="p">.</span><span class="nf">reset</span><span class="p">()</span>
    <span class="nf">train_policy</span><span class="p">(</span><span class="n">observation</span><span class="p">)</span>
</code></pre></div></div>

<p>Bu kod, politikanın belirli bir sürtünme katsayısına güvenmesini engeller. Ancak aralıklar aşırı geniş seçilirse öğrenme gereksiz yere zorlaşır; dar seçilirse gerçek dünya aralığın dışında kalabilir.</p>

<h2 id="diğer-köprü-kurma-yöntemleri">Diğer köprü kurma yöntemleri</h2>

<p><strong>Sistem tanımlama</strong>, gerçek robot üzerinde ölçümler yaparak kütle, motor tepkisi ve sürtünme gibi parametreleri tahmin eder. <strong>Domain adaptation</strong>, özellikle kamera görüntülerindeki sanal-gerçek farkını azaltır. <strong>Gerçek dünyada ince ayar</strong> ise simülasyonda öğrenilen politikayı az miktarda fiziksel deneyimle günceller.</p>

<table>
  <thead>
    <tr>
      <th>Yöntem</th>
      <th>Güçlü yanı</th>
      <th>Temel riski</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Domain randomization</td>
      <td>Sağlam ve genellenebilir politika</td>
      <td>Eğitim zorlaşabilir</td>
    </tr>
    <tr>
      <td>Sistem tanımlama</td>
      <td>Daha gerçekçi simülatör</td>
      <td>Parametreler zamanla değişebilir</td>
    </tr>
    <tr>
      <td>Domain adaptation</td>
      <td>Görsel farkları azaltır</td>
      <td>Ek veri ve model gerekir</td>
    </tr>
    <tr>
      <td>Gerçek ince ayar</td>
      <td>Doğrudan uyum sağlar</td>
      <td>Donanım hasarı riski taşır</td>
    </tr>
  </tbody>
</table>

<p>Pratikte en iyi sonuç genellikle bu tekniklerin birleşiminden gelir. Önce geniş bir simülasyon dağılımında eğitim yapılır, ardından güvenlik sınırlarıyla gerçek robot üzerinde dikkatli ince ayar uygulanır. Kısacası hedef, mükemmel bir simülatör yapmak değil; kusurlu simülasyona rağmen doğru karar verebilen bir robot yetiştirmektir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="robotik" /><category term="takviyeli öğrenme" /><category term="sim-to-real" /><category term="yapay zeka" /><category term="robot kontrolü" /><category term="domain randomization" /><summary type="html"><![CDATA[Bir robotun simülasyonda kusursuzca yürümesi, gerçek dünyaya çıktığında aynı zarafetle hareket edeceği anlamına gelmez. Sanal ortamda şampiyon olan kontrol politikası; gerçek motordaki gecikme, zemindeki sürtünme veya sensördeki küçücük bir gürültü yüzünden kendisini yerde bulabilir. Simülasyon ile fiziksel dünya arasındaki bu uyumsuzluğa sim-to-real gap, yani simülasyondan gerçeğe aktarım uçurumu denir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/simulasyondan-gercek-robota-35.png" /><media:content medium="image" url="https://program.sonsuz.us/img/simulasyondan-gercek-robota-35.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Toplu Taşıma Rota Optimizasyonu: Şehrin Görünmez Matematiği</title><link href="https://program.sonsuz.us/posts/toplu-tasima-rota-optimizasyonu-sehrin-gorunmez-matematigi/" rel="alternate" type="text/html" title="Toplu Taşıma Rota Optimizasyonu: Şehrin Görünmez Matematiği" /><published>2026-10-26T00:00:00+00:00</published><updated>2026-10-26T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/toplu-tasima-rota-optimizasyonu-sehrin-gorunmez-matematigi</id><content type="html" xml:base="https://program.sonsuz.us/posts/toplu-tasima-rota-optimizasyonu-sehrin-gorunmez-matematigi/"><![CDATA[<p>Sabah işe giderken otobüsün tıklım tıklım, karşı yönden gelen aracın ise neredeyse boş olduğunu gördünüz mü? Bu dengesizlik yalnızca kötü şans değildir; yolcu talebi, araç kapasitesi ve sefer sıklığı arasındaki optimizasyon probleminin görünür sonucudur. Toplu taşıma planlaması, milyonlarca olası rota arasından hem yolcuyu hem işletmeciyi memnun edecek bir denge bulmaya çalışır.</p>

<p><img src="/img/toplu-tasima-rota-48.svg" alt="toplu-tasima-rota-48" /></p>

<p>``
Bir toplu taşıma ağı, <strong>çizge teorisi</strong> kullanılarak modellenebilir. Duraklar düğüm, duraklar arasındaki bağlantılar ise kenar olarak düşünülür. Her kenara seyahat süresi, mesafe, maliyet ve beklenen yoğunluk gibi ağırlıklar atanır. Böylece şehir haritası, algoritmaların üzerinde çalışabileceği matematiksel bir ağa dönüşür.</p>

<p>Yolcu talebi genellikle bir <strong>başlangıç-varış matrisi</strong> ile ifade edilir. $D_{ij}$ değeri, belirli bir zaman aralığında $i$ bölgesinden $j$ bölgesine gitmek isteyen yolcu sayısını gösterir. Sabah ve akşam değerleri farklı olacağından tek bir sabit matris yeterli değildir. Akıllı kart kayıtları, GPS verileri, mobil uygulama sorguları ve nüfus bilgileri kullanılarak saatlik talep tahminleri oluşturulur.</p>

<table>
  <thead>
    <tr>
      <th>Veri kaynağı</th>
      <th>Sağladığı bilgi</th>
      <th>Temel sınırlama</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Akıllı kart</td>
      <td>Biniş zamanı ve durağı</td>
      <td>İniş noktası her zaman bilinmez</td>
    </tr>
    <tr>
      <td>GPS</td>
      <td>Araç konumu ve gecikme</td>
      <td>Yolcu amacı hakkında bilgi vermez</td>
    </tr>
    <tr>
      <td>Mobil uygulama</td>
      <td>Aranan başlangıç ve varış</td>
      <td>Her yolcuyu temsil etmez</td>
    </tr>
    <tr>
      <td>Anket</td>
      <td>Tercih ve memnuniyet</td>
      <td>Pahalıdır ve çabuk eskiyebilir</td>
    </tr>
  </tbody>
</table>

<p>Optimizasyonun amaç fonksiyonu çoğunlukla yolcuların toplam seyahat ve bekleme süresini azaltırken işletme maliyetini kontrol altında tutar. Basitleştirilmiş bir model şöyle yazılabilir:</p>

\[\min Z = \alpha \sum_p T_p + \beta \sum_p W_p + \gamma \sum_r C_r x_r\]

<p>Burada $T_p$ yolcu $p$ için araç içindeki süreyi, $W_p$ bekleme süresini, $C_r$ ise $r$ rotasının işletme maliyetini gösterir. $x_r$, rotanın kullanılıp kullanılmadığını veya kaç araçla işletileceğini temsil eder. $\alpha$, $\beta$ ve $\gamma$ katsayıları hedeflerin önemini belirler. Beklemek psikolojik olarak daha yorucu algılandığı için çoğu modelde $\beta$, $\alpha$ değerinden büyük seçilebilir.</p>

<p>Elbette matematiğin keyfini kaçırmayı seven kısıtlar da vardır! Araç kapasitesi aşılmamalı, sürücü çalışma sürelerine uyulmalı, filo sayısı geçilmemeli ve her bölge asgari hizmet almalıdır:</p>

\[q_{r,t} \leq K_r \cdot f_{r,t}\]

<p>Bu eşitsizlikte $q_{r,t}$ ilgili rota ve saatteki talebi, $K_r$ araç kapasitesini, $f_{r,t}$ ise sefer sayısını belirtir.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Güçlü yönü</th>
      <th>Uygun olduğu durum</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Dijkstra</td>
      <td>En kısa yolu hızlı bulur</td>
      <td>Tek yolcunun rota seçimi</td>
    </tr>
    <tr>
      <td>Doğrusal programlama</td>
      <td>Açıklanabilir ve ölçülebilir sonuç üretir</td>
      <td>Sefer sıklığı ve filo dağıtımı</td>
    </tr>
    <tr>
      <td>Genetik algoritma</td>
      <td>Büyük arama uzaylarını keşfeder</td>
      <td>Yeni hat tasarımı</td>
    </tr>
    <tr>
      <td>Pekiştirmeli öğrenme</td>
      <td>Değişen koşullara uyum sağlar</td>
      <td>Gerçek zamanlı araç yönetimi</td>
    </tr>
  </tbody>
</table>

<p>Aşağıdaki Python örneği, talebe göre basit bir saatlik sefer sayısı hesaplar:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">math</span>

<span class="k">def</span> <span class="nf">gerekli_sefer</span><span class="p">(</span><span class="n">talep</span><span class="p">,</span> <span class="n">kapasite</span><span class="p">,</span> <span class="n">hedef_doluluk</span><span class="o">=</span><span class="mf">0.85</span><span class="p">):</span>
    <span class="n">etkin_kapasite</span> <span class="o">=</span> <span class="n">kapasite</span> <span class="o">*</span> <span class="n">hedef_doluluk</span>
    <span class="k">return</span> <span class="n">math</span><span class="p">.</span><span class="nf">ceil</span><span class="p">(</span><span class="n">talep</span> <span class="o">/</span> <span class="n">etkin_kapasite</span><span class="p">)</span>

<span class="n">saatlik_talep</span> <span class="o">=</span> <span class="mi">720</span>
<span class="n">sefer</span> <span class="o">=</span> <span class="nf">gerekli_sefer</span><span class="p">(</span><span class="n">saatlik_talep</span><span class="p">,</span> <span class="n">kapasite</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Saatte en az </span><span class="si">{</span><span class="n">sefer</span><span class="si">}</span><span class="s"> sefer planlanmalı.</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<p>Buradaki hedef doluluk oranı, aracın tamamen doldurulmasını önleyerek konfor ve ani talep artışları için pay bırakır. Ancak gerçek sistemlerde aktarmalar, trafik, engelli erişimi, gecikme olasılığı ve bölgesel adalet de hesaba katılır.</p>

<p>Başarılı rota optimizasyonu yalnızca en kısa veya en ucuz ağı kurmak değildir. Amaç; erişilebilir, dayanıklı ve adil bir sistem tasarlamaktır. Kısacası iyi planlanmış bir metro hattı, yolcunun fark etmediği binlerce veri noktası ve matematiksel karar sayesinde “tam zamanında” gelir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="rota optimizasyonu" /><category term="toplu taşıma" /><category term="çizge teorisi" /><category term="doğrusal programlama" /><category term="veri bilimi" /><category term="akıllı şehirler" /><summary type="html"><![CDATA[Sabah işe giderken otobüsün tıklım tıklım, karşı yönden gelen aracın ise neredeyse boş olduğunu gördünüz mü? Bu dengesizlik yalnızca kötü şans değildir; yolcu talebi, araç kapasitesi ve sefer sıklığı arasındaki optimizasyon probleminin görünür sonucudur. Toplu taşıma planlaması, milyonlarca olası rota arasından hem yolcuyu hem işletmeciyi memnun edecek bir denge bulmaya çalışır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/toplu-tasima-rota-48.png" /><media:content medium="image" url="https://program.sonsuz.us/img/toplu-tasima-rota-48.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Yapay Zekâ Röntgen ve MR Görüntülerini Nasıl Yorumlar?</title><link href="https://program.sonsuz.us/posts/yapay-zeka-rontgen-ve-mr-goruntulerini-nasil-yorumlar/" rel="alternate" type="text/html" title="Yapay Zekâ Röntgen ve MR Görüntülerini Nasıl Yorumlar?" /><published>2026-10-26T00:00:00+00:00</published><updated>2026-10-26T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/yapay-zeka-rontgen-ve-mr-goruntulerini-nasil-yorumlar</id><content type="html" xml:base="https://program.sonsuz.us/posts/yapay-zeka-rontgen-ve-mr-goruntulerini-nasil-yorumlar/"><![CDATA[<p><img src="/img/yapay-zeka-rontgen-97.svg" alt="yapay-zeka-rontgen-97" /></p>

<p>Bir radyolog röntgene baktığında kenarları, yoğunluk farklılıklarını ve anatomik ilişkileri değerlendirir. Bilgisayar ise görüntüyü önce sayılardan oluşan dev bir tablo olarak görür. Yapay zekânın başarısı, bu sayısal desenlerle kırık, tümör veya doku bozukluğu gibi klinik bulgular arasındaki ilişkiyi öğrenmesinden gelir. Yine de bu teknoloji “dijital doktor” değil; hekimin kararını destekleyen güçlü bir araçtır.
``</p>

<h2 id="görüntü-bilgisayar-için-ne-anlama-gelir">Görüntü bilgisayar için ne anlama gelir?</h2>

<p>Gri tonlu bir tıbbi görüntü, her hücresinde parlaklık değeri bulunan bir matristir. Basitleştirilmiş biçimde görüntüyü $I(x,y)$ ile gösterebiliriz. Buradaki $x$ ve $y$ pikselin konumunu, $I$ ise yoğunluğunu ifade eder.</p>

<p>Röntgende yoğun dokular ışını daha fazla soğurduğu için kemikler genellikle parlak görünür. MR ise hidrojen çekirdeklerinin manyetik alandaki davranışını ölçer. Bu nedenle aynı anatomik bölge, kullanılan MR sekansına göre farklı görünebilir.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Röntgen</th>
      <th>MR</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Temel fizik</td>
      <td>X-ışını soğurulması</td>
      <td>Manyetik alan ve radyo dalgaları</td>
    </tr>
    <tr>
      <td>Güçlü olduğu alan</td>
      <td>Kemik, akciğer, hızlı tarama</td>
      <td>Beyin, kas, bağ ve yumuşak doku</td>
    </tr>
    <tr>
      <td>Görüntü yapısı</td>
      <td>Çoğunlukla 2B</td>
      <td>Genellikle çok kesitli 3B hacim</td>
    </tr>
    <tr>
      <td>Yapay zekâ görevi</td>
      <td>Sınıflandırma, kırık bulma</td>
      <td>Segmentasyon, hacim ve lezyon analizi</td>
    </tr>
  </tbody>
</table>

<h2 id="model-nasıl-öğrenir">Model nasıl öğrenir?</h2>

<p>Önce uzmanlar tarafından etiketlenmiş çok sayıda görüntü hazırlanır. “Normal”, “zatürre şüphesi” veya lezyon sınırları gibi etiketler, modelin öğrenme hedefidir. Evrişimli sinir ağları (CNN), küçük filtreleri görüntü üzerinde gezdirerek kenar, doku ve şekil gibi özellikleri çıkarır.</p>

<p>Bir evrişim işlemi kabaca şöyle yazılır:</p>

\[F(i,j)=\sum_m\sum_n I(i+m,j+n)K(m,n)\]

<p>Burada $K$, belirli bir görsel deseni arayan filtredir. İlk katmanlar çizgileri öğrenirken daha derin katmanlar nodül veya anatomik yapı gibi karmaşık örüntülere duyarlı hâle gelir. Vision Transformer modelleri ise görüntüyü küçük parçalara ayırıp uzak bölgeler arasındaki ilişkileri “dikkat” mekanizmasıyla inceler.</p>

<p>Eğitim sırasında tahmin ile gerçek etiket arasındaki hata hesaplanır. İkili sınıflandırmada sık kullanılan kayıp fonksiyonu şöyledir:</p>

\[L=-[y\log(p)+(1-y)\log(1-p)]\]

<p>Model, bu değeri küçültecek şekilde milyonlarca parametresini günceller.</p>

<h2 id="tipik-analiz-hattı">Tipik analiz hattı</h2>

<p>Aşağıdaki örnek, eğitilmiş bir modelle görüntü sınıflandırma sürecinin sadeleştirilmiş hâlidir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">PIL</span> <span class="kn">import</span> <span class="n">Image</span>
<span class="kn">from</span> <span class="n">torchvision</span> <span class="kn">import</span> <span class="n">transforms</span>

<span class="n">pipeline</span> <span class="o">=</span> <span class="n">transforms</span><span class="p">.</span><span class="nc">Compose</span><span class="p">([</span>
    <span class="n">transforms</span><span class="p">.</span><span class="nc">Resize</span><span class="p">((</span><span class="mi">224</span><span class="p">,</span> <span class="mi">224</span><span class="p">)),</span>
    <span class="n">transforms</span><span class="p">.</span><span class="nc">Grayscale</span><span class="p">(</span><span class="n">num_output_channels</span><span class="o">=</span><span class="mi">3</span><span class="p">),</span>
    <span class="n">transforms</span><span class="p">.</span><span class="nc">ToTensor</span><span class="p">(),</span>
    <span class="n">transforms</span><span class="p">.</span><span class="nc">Normalize</span><span class="p">([</span><span class="mf">0.5</span><span class="p">]</span> <span class="o">*</span> <span class="mi">3</span><span class="p">,</span> <span class="p">[</span><span class="mf">0.5</span><span class="p">]</span> <span class="o">*</span> <span class="mi">3</span><span class="p">)</span>
<span class="p">])</span>

<span class="n">image</span> <span class="o">=</span> <span class="n">Image</span><span class="p">.</span><span class="nf">open</span><span class="p">(</span><span class="sh">"</span><span class="s">rontgen.png</span><span class="sh">"</span><span class="p">)</span>
<span class="n">tensor</span> <span class="o">=</span> <span class="nf">pipeline</span><span class="p">(</span><span class="n">image</span><span class="p">).</span><span class="nf">unsqueeze</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">probability</span> <span class="o">=</span> <span class="nf">model</span><span class="p">(</span><span class="n">tensor</span><span class="p">).</span><span class="nf">sigmoid</span><span class="p">().</span><span class="nf">item</span><span class="p">()</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Şüpheli bulgu olasılığı: </span><span class="si">{</span><span class="n">probability</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="o">%</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<p>Kod görüntüyü standart boyuta getirir, sayısal tensöre dönüştürür ve modele verir. Çıkan olasılık kesin tanı değildir; yalnızca modelin öğrendiği verilere göre ürettiği bir skordur.</p>

<h2 id="sınıflandırmadan-segmentasyona">Sınıflandırmadan segmentasyona</h2>

<p>Sınıflandırma, görüntünün tamamına bir etiket verir. Nesne tespiti şüpheli bölgeyi kutuyla işaretler. Segmentasyon ise her pikseli ayrı ayrı değerlendirerek tümörün sınırlarını çizebilir. MR analizinde U-Net gibi mimariler bu yüzden oldukça popülerdir.</p>

<table>
  <thead>
    <tr>
      <th>Görev</th>
      <th>Çıktı</th>
      <th>Örnek kullanım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Sınıflandırma</td>
      <td>Etiket veya olasılık</td>
      <td>Normal/anormal ayrımı</td>
    </tr>
    <tr>
      <td>Tespit</td>
      <td>Sınırlayıcı kutu</td>
      <td>Akciğer nodülü bulma</td>
    </tr>
    <tr>
      <td>Segmentasyon</td>
      <td>Piksel maskesi</td>
      <td>Beyin tümörü hacmini ölçme</td>
    </tr>
  </tbody>
</table>

<h2 id="neden-insan-denetimi-şart">Neden insan denetimi şart?</h2>

<p>Farklı hastanelerin cihazları, çekim protokolleri ve hasta grupları değişebilir. Model yalnızca belirli cihazlarda eğitildiyse başka bir merkezde başarısı düşebilir. Ayrıca veri dengesizliği, yanlış etiketler ve açıklanabilirlik sorunları hatalı sonuçlara yol açabilir.</p>

<p>Bu nedenle modeller bağımsız veri kümelerinde test edilir; duyarlılık, özgüllük ve ROC-AUC gibi ölçütlerle değerlendirilir. Isı haritaları modelin hangi bölgelere baktığını gösterebilse de klinik gerekçe yerine geçmez. En güvenli yaklaşım, yapay zekânın yorulmadan tarama yaptığı, radyoloğun ise bağlamı, hasta öyküsünü ve belirsizliği yönettiği insan-makine iş birliğidir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="yapay zekâ" /><category term="tıbbi görüntüleme" /><category term="derin öğrenme" /><category term="röntgen" /><category term="manyetik rezonans" /><category term="bilgisayarlı görü" /><summary type="html"><![CDATA[Bir radyolog röntgene baktığında kenarları, yoğunluk farklılıklarını ve anatomik ilişkileri değerlendirir. Bilgisayar ise görüntüyü önce sayılardan oluşan dev bir tablo olarak görür. Yapay zekânın başarısı, bu sayısal desenlerle kırık, tümör veya doku bozukluğu gibi klinik bulgular arasındaki ilişkiyi öğrenmesinden gelir. Yine de bu teknoloji “dijital doktor” değil; hekimin kararını destekleyen güçlü bir araçtır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/yapay-zeka-rontgen-97.png" /><media:content medium="image" url="https://program.sonsuz.us/img/yapay-zeka-rontgen-97.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Ağ Teorisiyle Şehrin Röntgenini Çekmek: Yol Ağlarında Zayıf Nokta Analizi</title><link href="https://program.sonsuz.us/posts/ag-teorisiyle-sehrin-rontgenini-cekmek-yol-aglarinda-zayif-nokta-analizi/" rel="alternate" type="text/html" title="Ağ Teorisiyle Şehrin Röntgenini Çekmek: Yol Ağlarında Zayıf Nokta Analizi" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/ag-teorisiyle-sehrin-rontgenini-cekmek-yol-aglarinda-zayif-nokta-analizi</id><content type="html" xml:base="https://program.sonsuz.us/posts/ag-teorisiyle-sehrin-rontgenini-cekmek-yol-aglarinda-zayif-nokta-analizi/"><![CDATA[<p>Bir şehir haritasına baktığınızda yalnızca yollar, kavşaklar ve döner kavşakta çıkışı kaçıran sürücüler görmeyin. Aynı harita, matematiksel olarak incelenebilen dev bir ağdır. Graf teorisi sayesinde hangi kavşağın kritik olduğunu, bir köprü kapandığında ulaşımın ne kadar etkileneceğini ve alternatif güzergâhların gerçekten işe yarayıp yaramadığını ölçebiliriz.
``</p>
<h2 id="şehri-bir-grafa-dönüştürmek">Şehri bir grafa dönüştürmek</h2>

<p>Graf, düğümlerden ve bu düğümleri bağlayan kenarlardan oluşur. Yol ağı modelinde kavşaklar veya yol başlangıçları <strong>düğüm</strong>, yollar ise <strong>kenar</strong> olarak temsil edilir. Matematiksel gösterimle bir graf:</p>

\[G = (V, E)\]

<p>şeklinde tanımlanır. Burada $V$ düğüm kümesini, $E$ ise yol bağlantılarını ifade eder. Tek yönlü yolların bulunduğu şehirlerde yönlü graf; bütün yolların iki yönde kullanılabildiği basitleştirilmiş modellerde yönsüz graf tercih edilir.</p>

<p>Kenarlar yalnızca bağlantı anlamına gelmek zorunda değildir. Her yola uzunluk, seyahat süresi veya kapasite gibi bir ağırlık atanabilir:</p>

\[w(u,v) = \text{seyahat süresi}\]

<table>
  <thead>
    <tr>
      <th>Model öğesi</th>
      <th>Şehirdeki karşılığı</th>
      <th>Örnek özellik</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Düğüm</td>
      <td>Kavşak, durak, yol sonu</td>
      <td>Konum, trafik yoğunluğu</td>
    </tr>
    <tr>
      <td>Kenar</td>
      <td>Yol veya köprü</td>
      <td>Uzunluk, hız, kapasite</td>
    </tr>
    <tr>
      <td>Ağırlık</td>
      <td>Geçiş maliyeti</td>
      <td>Süre, mesafe, yakıt</td>
    </tr>
    <tr>
      <td>Yön</td>
      <td>İzin verilen hareket</td>
      <td>Tek yönlü cadde</td>
    </tr>
  </tbody>
</table>

<h2 id="zayıf-nokta-ne-demektir">Zayıf nokta ne demektir?</h2>

<p>Bir yolun kalabalık olması, onun mutlaka yapısal bir zayıflık olduğu anlamına gelmez. Zayıf nokta; devre dışı kaldığında ağın parçalanmasına, seyahat sürelerinin ciddi biçimde artmasına veya alternatif yolların aşırı yüklenmesine neden olan bileşendir.</p>

<p>Bu noktaları belirlemek için çeşitli merkezilik ölçüleri kullanılır:</p>

<ul>
  <li><strong>Derece merkeziliği:</strong> Bir kavşağın kaç doğrudan bağlantısı bulunduğunu ölçer.</li>
  <li><strong>Aradalık merkeziliği:</strong> En kısa rotaların ne kadarının ilgili düğümden geçtiğini gösterir.</li>
  <li><strong>Yakınlık merkeziliği:</strong> Bir düğümden diğer noktalara ortalama erişim kolaylığını ölçer.</li>
  <li><strong>Özvektör merkeziliği:</strong> Önemli kavşaklara bağlı olan kavşakları öne çıkarır.</li>
</ul>

<p>Aradalık merkeziliği kabaca şöyle hesaplanır:</p>

\[C_B(v) = \sum_{s \neq v \neq t} \frac{\sigma_{st}(v)}{\sigma_{st}}\]

<p>Burada $\sigma_{st}$, $s$ ile $t$ arasındaki en kısa yolların sayısı; $\sigma_{st}(v)$ ise bunlardan $v$ düğümünden geçenlerin sayısıdır. Değeri yüksek bir kavşak, şehrin trafik dünyasındaki “herkesin tanıdığı aracı kişi” gibidir.</p>

<table>
  <thead>
    <tr>
      <th>Ölçüm</th>
      <th>Yanıtladığı soru</th>
      <th>Olası kullanım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Derece</td>
      <td>Kaç yola bağlı?</td>
      <td>Yoğun kavşak tespiti</td>
    </tr>
    <tr>
      <td>Aradalık</td>
      <td>Kaç rota buradan geçiyor?</td>
      <td>Kritik geçiş analizi</td>
    </tr>
    <tr>
      <td>Yakınlık</td>
      <td>Diğer noktalara ne kadar yakın?</td>
      <td>Acil servis konumu</td>
    </tr>
    <tr>
      <td>Köprü kenar</td>
      <td>Kapanırsa ağ bölünür mü?</td>
      <td>Köprü ve tünel riski</td>
    </tr>
  </tbody>
</table>

<h2 id="python-ve-networkx-ile-küçük-bir-deney">Python ve NetworkX ile küçük bir deney</h2>

<p>Aşağıdaki kod örnek bir yol ağı oluşturur, aradalık merkeziliğini hesaplar ve kaldırıldığında ağı bölen kritik yolları bulur:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">networkx</span> <span class="k">as</span> <span class="n">nx</span>

<span class="n">G</span> <span class="o">=</span> <span class="n">nx</span><span class="p">.</span><span class="nc">Graph</span><span class="p">()</span>
<span class="n">G</span><span class="p">.</span><span class="nf">add_weighted_edges_from</span><span class="p">([</span>
    <span class="p">(</span><span class="sh">'</span><span class="s">A</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">B</span><span class="sh">'</span><span class="p">,</span> <span class="mi">4</span><span class="p">),</span>
    <span class="p">(</span><span class="sh">'</span><span class="s">B</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">C</span><span class="sh">'</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
    <span class="p">(</span><span class="sh">'</span><span class="s">C</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">D</span><span class="sh">'</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span>
    <span class="p">(</span><span class="sh">'</span><span class="s">B</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">D</span><span class="sh">'</span><span class="p">,</span> <span class="mi">6</span><span class="p">),</span>
    <span class="p">(</span><span class="sh">'</span><span class="s">D</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">E</span><span class="sh">'</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
    <span class="p">(</span><span class="sh">'</span><span class="s">E</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">F</span><span class="sh">'</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="p">])</span>

<span class="n">centrality</span> <span class="o">=</span> <span class="n">nx</span><span class="p">.</span><span class="nf">betweenness_centrality</span><span class="p">(</span><span class="n">G</span><span class="p">,</span> <span class="n">weight</span><span class="o">=</span><span class="sh">'</span><span class="s">weight</span><span class="sh">'</span><span class="p">)</span>
<span class="n">critical_nodes</span> <span class="o">=</span> <span class="nf">sorted</span><span class="p">(</span>
    <span class="n">centrality</span><span class="p">.</span><span class="nf">items</span><span class="p">(),</span>
    <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">item</span><span class="p">:</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
    <span class="n">reverse</span><span class="o">=</span><span class="bp">True</span>
<span class="p">)</span>

<span class="nf">print</span><span class="p">(</span><span class="sh">'</span><span class="s">Kritik kavşaklar:</span><span class="sh">'</span><span class="p">,</span> <span class="n">critical_nodes</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sh">'</span><span class="s">Kritik yollar:</span><span class="sh">'</span><span class="p">,</span> <span class="nf">list</span><span class="p">(</span><span class="n">nx</span><span class="p">.</span><span class="nf">bridges</span><span class="p">(</span><span class="n">G</span><span class="p">)))</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">betweenness_centrality</code>, kısa rotalarda sık kullanılan kavşakları sıralar. <code class="language-plaintext highlighter-rouge">bridges</code> ise kaldırıldığında ağın bağlı bileşen sayısını artıran kenarları döndürür. Gerçek bir projede yol verileri OpenStreetMap üzerinden alınabilir; <code class="language-plaintext highlighter-rouge">osmnx</code> kütüphanesiyle indirilen ağ doğrudan NetworkX grafına dönüştürülebilir.</p>

<h2 id="dayanıklılığı-sınamak">Dayanıklılığı sınamak</h2>

<p>Analizin en eğlenceli kısmı kontrollü kaostur: Kritik bir düğümü silip sonuçları yeniden hesaplayın. Ortalama en kısa yol uzuyor mu? Bazı mahalleler tamamen kopuyor mu? Alternatif yollar kapasiteyi karşılıyor mu?</p>

<p>Rastgele kapanmalar ile yüksek merkezilikli yolların hedefli kapanmalarını karşılaştırmak da önemlidir. Ağ rastgele arızalara dayanırken tek bir stratejik köprüye bağımlı olabilir. Böylece yeni bağlantıların nereye yapılacağı, acil durum rotalarının nasıl tasarlanacağı ve bakım önceliğinin hangi yollara verileceği sezgiyle değil, ölçülebilir verilerle belirlenir. Kısacası graf teorisi, şehir haritasını sadece göstermez; haritanın nereden çatlayabileceğini de anlatır.</p>

<p><img src="/img/ag-teorisiyle-sehrin-49.svg" alt="ag-teorisiyle-sehrin-49" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="graf teorisi" /><category term="ağ analizi" /><category term="python" /><category term="şehir planlama" /><category term="networkx" /><category term="veri bilimi" /><summary type="html"><![CDATA[Bir şehir haritasına baktığınızda yalnızca yollar, kavşaklar ve döner kavşakta çıkışı kaçıran sürücüler görmeyin. Aynı harita, matematiksel olarak incelenebilen dev bir ağdır. Graf teorisi sayesinde hangi kavşağın kritik olduğunu, bir köprü kapandığında ulaşımın ne kadar etkileneceğini ve alternatif güzergâhların gerçekten işe yarayıp yaramadığını ölçebiliriz.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/ag-teorisiyle-sehrin-49.png" /><media:content medium="image" url="https://program.sonsuz.us/img/ag-teorisiyle-sehrin-49.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Ahırdaki Sessiz Dedektif: Görüntü İşleme ile Hayvan Davranışlarını İzlemek</title><link href="https://program.sonsuz.us/posts/ahirdaki-sessiz-dedektif-goruntu-isleme-ile-hayvan-davranislarini-izlemek/" rel="alternate" type="text/html" title="Ahırdaki Sessiz Dedektif: Görüntü İşleme ile Hayvan Davranışlarını İzlemek" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/ahirdaki-sessiz-dedektif-goruntu-isleme-ile-hayvan-davranislarini-izlemek</id><content type="html" xml:base="https://program.sonsuz.us/posts/ahirdaki-sessiz-dedektif-goruntu-isleme-ile-hayvan-davranislarini-izlemek/"><![CDATA[<p>Bir ineğin daha az yürümesi, sürüden uzaklaşması veya normalden uzun süre yatması çoğu zaman sağlık sorununun ilk işaretidir. Ancak yüzlerce hayvanın bulunduğu bir işletmede bu küçük değişimleri insan gözüyle sürekli takip etmek oldukça zordur. Kameralar ve görüntü işleme algoritmaları, hayvanları rahatsız etmeden gözlemleyerek hareketleri ölçülebilir verilere dönüştüren sessiz birer dedektif gibi çalışır.
``</p>

<h2 id="kameradan-davranış-verisine-giden-yol">Kameradan davranış verisine giden yol</h2>

<p>Sistem yalnızca video kaydetmez; her kareyi analiz ederek önce hayvanları bulur, ardından aynı hayvanı kareler boyunca takip eder. Genel işlem hattı şu adımlardan oluşur:</p>

<ol>
  <li>Kamera görüntüsünün alınması ve zaman damgasıyla kaydedilmesi</li>
  <li>Gürültü azaltma, parlaklık düzeltme ve perspektif dönüşümü</li>
  <li>Hayvanların nesne tespit modeliyle belirlenmesi</li>
  <li>Her hayvana geçici veya kalıcı bir kimlik atanması</li>
  <li>Konum, hız, yatma süresi ve yemlik ziyareti gibi özelliklerin çıkarılması</li>
  <li>Olağan dışı davranışlar için uyarı üretilmesi</li>
</ol>

<p>Nesne tespiti, görüntüdeki her hayvanı bir sınırlayıcı kutuyla gösterir. Takip algoritması ise bu kutunun sonraki karede hangi kutuyla eşleştiğini belirler. Böylece sistem “karede üç inek var” demekle kalmaz; “17 numaralı inek son iki saatte yalnızca 40 metre yürüdü” diyebilir.</p>

<h2 id="hareket-nasıl-sayıya-dönüşür">Hareket nasıl sayıya dönüşür?</h2>

<p>Bir hayvanın görüntü üzerindeki merkezi $(x_t, y_t)$ ve bir sonraki karedeki merkezi $(x_{t+1}, y_{t+1})$ olsun. Piksel cinsinden yer değiştirme Öklid uzaklığıyla hesaplanabilir:</p>

\[d_t = \sqrt{(x_{t+1}-x_t)^2 + (y_{t+1}-y_t)^2}\]

<p>Kamera kalibrasyonu sayesinde piksel-metre dönüşümü yapılırsa ortalama hız yaklaşık olarak $v=d/\Delta t$ ile bulunur. Fakat tek bir düşük hız değeri hastalık anlamına gelmez. Yaş, sıcaklık, sağım zamanı ve sürünün günlük düzeni de hesaba katılmalıdır. Bu nedenle güvenilir sistemler tek kare yerine zaman serilerini değerlendirir.</p>

<table>
  <thead>
    <tr>
      <th>Ölçülen özellik</th>
      <th>Olası yorum</th>
      <th>Dikkat edilmesi gereken</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Uzun yatma süresi</td>
      <td>Ağrı, yorgunluk veya topallık</td>
      <td>Geviş getirme dönemiyle karışabilir</td>
    </tr>
    <tr>
      <td>Azalan yemlik ziyareti</td>
      <td>İştahsızlık veya hastalık</td>
      <td>Yem dağıtım saati sonucu etkiler</td>
    </tr>
    <tr>
      <td>Sık ve düzensiz hareket</td>
      <td>Stres veya kızgınlık</td>
      <td>Sürü içi etkileşim incelenmelidir</td>
    </tr>
    <tr>
      <td>Sürüden uzak durma</td>
      <td>Rahatsızlık veya sosyal baskı</td>
      <td>Alanın fiziksel düzeni önemlidir</td>
    </tr>
    <tr>
      <td>Tekrarlanan baş hareketi</td>
      <td>Kaşıntı ya da stres</td>
      <td>Sinek yoğunluğu kontrol edilmelidir</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/ahirdaki-sessiz-dedektif-27.svg" alt="ahirdaki-sessiz-dedektif-27" /></p>

<h2 id="basit-bir-hareket-ölçümü">Basit bir hareket ölçümü</h2>

<p>Aşağıdaki Python örneği, takip modelinden geldiği varsayılan merkez noktaları arasındaki toplam piksel mesafesini hesaplar:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">math</span> <span class="kn">import</span> <span class="n">hypot</span>

<span class="k">def</span> <span class="nf">toplam_hareket</span><span class="p">(</span><span class="n">konumlar</span><span class="p">,</span> <span class="n">metre_per_piksel</span><span class="o">=</span><span class="mf">0.02</span><span class="p">):</span>
    <span class="n">toplam_piksel</span> <span class="o">=</span> <span class="mf">0.0</span>

    <span class="k">for</span> <span class="n">onceki</span><span class="p">,</span> <span class="n">simdiki</span> <span class="ow">in</span> <span class="nf">zip</span><span class="p">(</span><span class="n">konumlar</span><span class="p">,</span> <span class="n">konumlar</span><span class="p">[</span><span class="mi">1</span><span class="p">:]):</span>
        <span class="n">dx</span> <span class="o">=</span> <span class="n">simdiki</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">onceki</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
        <span class="n">dy</span> <span class="o">=</span> <span class="n">simdiki</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">onceki</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
        <span class="n">toplam_piksel</span> <span class="o">+=</span> <span class="nf">hypot</span><span class="p">(</span><span class="n">dx</span><span class="p">,</span> <span class="n">dy</span><span class="p">)</span>

    <span class="k">return</span> <span class="n">toplam_piksel</span> <span class="o">*</span> <span class="n">metre_per_piksel</span>

<span class="n">iz</span> <span class="o">=</span> <span class="p">[(</span><span class="mi">120</span><span class="p">,</span> <span class="mi">80</span><span class="p">),</span> <span class="p">(</span><span class="mi">124</span><span class="p">,</span> <span class="mi">83</span><span class="p">),</span> <span class="p">(</span><span class="mi">130</span><span class="p">,</span> <span class="mi">85</span><span class="p">),</span> <span class="p">(</span><span class="mi">131</span><span class="p">,</span> <span class="mi">90</span><span class="p">)]</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Tahmini hareket: </span><span class="si">{</span><span class="nf">toplam_hareket</span><span class="p">(</span><span class="n">iz</span><span class="p">)</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="n">f</span><span class="si">}</span><span class="s"> metre</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<p>Bu kod tespiti kendisi yapmaz; YOLO gibi bir model ve ByteTrack benzeri bir takipçi tarafından üretilen koordinatları anlamlı bir mesafeye çevirir. Gerçek uygulamada kamera açısının yol açtığı perspektif hatası kalibrasyonla düzeltilmelidir.</p>

<h2 id="sağlık-uyarısı-nasıl-oluşturulur">Sağlık uyarısı nasıl oluşturulur?</h2>

<p>Her hayvan için geçmiş davranışlardan bir normal aralık öğrenilebilir. Günlük hareket miktarı $X$, geçmiş ortalama $\mu$ ve standart sapma $\sigma$ kullanılarak standartlaştırılır:</p>

\[z = \frac{X-\mu}{\sigma}\]

<p>Örneğin $z&lt;-2$ olması, hareketin alışılmış seviyenin belirgin biçimde altına düştüğünü gösterebilir. Yine de bu sonuç doğrudan teşhis değildir; veteriner incelemesini tetikleyen bir erken uyarıdır. Yanlış alarmları azaltmak için hareket, yem tüketimi, vücut sıcaklığı ve sağım verisi birlikte değerlendirilebilir.</p>

<h2 id="sahadaki-gerçek-zorluklar">Sahadaki gerçek zorluklar</h2>

<p>Toz, gece karanlığı, hayvanların birbirini kapatması ve kirlenen kamera lensleri model başarısını düşürür. Kızılötesi kamera, uygun aydınlatma ve farklı açılardan çekim bu sorunları azaltabilir. Ayrıca verilerin güvenli saklanması, çalışan mahremiyeti ve algoritmanın farklı ırklar üzerinde doğrulanması unutulmamalıdır.</p>

<p>Sonuç olarak görüntü işleme, yetiştiricinin deneyiminin yerini almak yerine dikkatini doğru hayvana yönlendirir. Doğru kurulan bir sistem; hastalıkları daha erken fark etmeye, refahı artırmaya ve işletme kaynaklarını daha bilinçli kullanmaya yardımcı olur.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="görüntü işleme" /><category term="yapay zeka" /><category term="hayvancılık" /><category term="davranış analizi" /><category term="bilgisayarlı görü" /><category term="python" /><summary type="html"><![CDATA[Bir ineğin daha az yürümesi, sürüden uzaklaşması veya normalden uzun süre yatması çoğu zaman sağlık sorununun ilk işaretidir. Ancak yüzlerce hayvanın bulunduğu bir işletmede bu küçük değişimleri insan gözüyle sürekli takip etmek oldukça zordur. Kameralar ve görüntü işleme algoritmaları, hayvanları rahatsız etmeden gözlemleyerek hareketleri ölçülebilir verilere dönüştüren sessiz birer dedektif gibi çalışır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/ahirdaki-sessiz-dedektif-27.png" /><media:content medium="image" url="https://program.sonsuz.us/img/ahirdaki-sessiz-dedektif-27.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Akıllı Saat Verileriyle Gerçek Zamanlı Nabız ve Uyku Analizi</title><link href="https://program.sonsuz.us/posts/akilli-saat-verileriyle-gercek-zamanli-nabiz-ve-uyku-analizi/" rel="alternate" type="text/html" title="Akıllı Saat Verileriyle Gerçek Zamanlı Nabız ve Uyku Analizi" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/akilli-saat-verileriyle-gercek-zamanli-nabiz-ve-uyku-analizi</id><content type="html" xml:base="https://program.sonsuz.us/posts/akilli-saat-verileriyle-gercek-zamanli-nabiz-ve-uyku-analizi/"><![CDATA[<p><img src="/img/akilli-saat-verileriyle-20.svg" alt="akilli-saat-verileriyle-20" /></p>

<p>Akıllı saatler yalnızca saati gösteren cihazlar olmaktan çıkıp bileğimizde çalışan küçük sağlık laboratuvarlarına dönüştü. Nabız, hareket, kandaki oksijen oranı ve uyku gibi ölçümler; doğru algoritmalarla işlendiğinde anlamlı eğilimlere ve erken uyarılara dönüştürülebilir. Ancak ham sensör verisini doğrudan yorumlamak, rüzgârlı havada fısıltı dinlemeye benzer: Önce gürültüyü temizlemek gerekir.
``</p>

<h2 id="sensörden-anlamlı-veriye">Sensörden anlamlı veriye</h2>

<p>Akıllı saatler nabzı çoğunlukla <strong>fotopletismografi (PPG)</strong> yöntemiyle ölçer. Cihazın altındaki LED cilde ışık gönderir; fotodiyot ise geri yansıyan ışığın şiddetini ölçer. Kalp her attığında damarlardaki kan hacmi değiştiği için yansıma sinyalinde tepe noktaları oluşur.</p>

<p>Ardışık iki tepe arasındaki süre $\Delta t$ saniye ise yaklaşık nabız şu şekilde hesaplanır:</p>

\[HR = \frac{60}{\Delta t}\]

<p>Örneğin iki tepe arasındaki süre $0.8$ saniyeyse nabız $75$ BPM olur. Gerçek dünyada hareket, gevşek kayış, ter ve ortam ışığı sinyali bozabilir. Bu nedenle filtreleme, tepe tespiti ve güven puanı hesaplama aşamaları önemlidir.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Avantajı</th>
      <th>Dezavantajı</th>
      <th>Kullanım alanı</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Hareketli ortalama</td>
      <td>Basit ve hızlıdır</td>
      <td>Ani değişimleri yumuşatabilir</td>
      <td>Canlı nabız göstergesi</td>
    </tr>
    <tr>
      <td>Medyan filtresi</td>
      <td>Sıçramaları temizler</td>
      <td>Büyük pencere gecikme yaratır</td>
      <td>Sensör hatalarının giderilmesi</td>
    </tr>
    <tr>
      <td>Butterworth filtresi</td>
      <td>Frekansları kontrollü süzer</td>
      <td>Parametre ayarı gerekir</td>
      <td>PPG sinyal işleme</td>
    </tr>
    <tr>
      <td>Makine öğrenmesi</td>
      <td>Karmaşık örüntüleri bulur</td>
      <td>Etiketli veri gerektirir</td>
      <td>Uyku evresi tahmini</td>
    </tr>
  </tbody>
</table>

<h2 id="gerçek-zamanlı-nabız-işleme">Gerçek zamanlı nabız işleme</h2>

<p>Aşağıdaki Python sınıfı, saatten geldiği varsayılan BPM değerlerini kayan pencereye ekler. Medyan kullanarak aykırı ölçümlerin etkisini azaltır ve son değerlerin değişkenliğine göre basit bir güven puanı üretir.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">collections</span> <span class="kn">import</span> <span class="n">deque</span>
<span class="kn">from</span> <span class="n">statistics</span> <span class="kn">import</span> <span class="n">median</span><span class="p">,</span> <span class="n">pstdev</span>

<span class="k">class</span> <span class="nc">HeartRateStream</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="n">window_size</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
        <span class="n">self</span><span class="p">.</span><span class="n">values</span> <span class="o">=</span> <span class="nf">deque</span><span class="p">(</span><span class="n">maxlen</span><span class="o">=</span><span class="n">window_size</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="n">bpm</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="mi">30</span> <span class="o">&lt;=</span> <span class="n">bpm</span> <span class="o">&lt;=</span> <span class="mi">220</span><span class="p">:</span>
            <span class="k">return</span> <span class="p">{</span><span class="sh">'</span><span class="s">status</span><span class="sh">'</span><span class="p">:</span> <span class="sh">'</span><span class="s">invalid</span><span class="sh">'</span><span class="p">}</span>

        <span class="n">self</span><span class="p">.</span><span class="n">values</span><span class="p">.</span><span class="nf">append</span><span class="p">(</span><span class="n">bpm</span><span class="p">)</span>
        <span class="n">filtered</span> <span class="o">=</span> <span class="nf">median</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">values</span><span class="p">)</span>
        <span class="n">deviation</span> <span class="o">=</span> <span class="nf">pstdev</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">values</span><span class="p">)</span> <span class="k">if</span> <span class="nf">len</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">values</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="mi">0</span>
        <span class="n">confidence</span> <span class="o">=</span> <span class="nf">max</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span> <span class="o">-</span> <span class="n">deviation</span> <span class="o">/</span> <span class="mi">20</span><span class="p">)</span>

        <span class="k">return</span> <span class="p">{</span>
            <span class="sh">'</span><span class="s">status</span><span class="sh">'</span><span class="p">:</span> <span class="sh">'</span><span class="s">ok</span><span class="sh">'</span><span class="p">,</span>
            <span class="sh">'</span><span class="s">bpm</span><span class="sh">'</span><span class="p">:</span> <span class="nf">round</span><span class="p">(</span><span class="n">filtered</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
            <span class="sh">'</span><span class="s">confidence</span><span class="sh">'</span><span class="p">:</span> <span class="nf">round</span><span class="p">(</span><span class="n">confidence</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
        <span class="p">}</span>

<span class="n">stream</span> <span class="o">=</span> <span class="nc">HeartRateStream</span><span class="p">()</span>
<span class="k">for</span> <span class="n">measurement</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">74</span><span class="p">,</span> <span class="mi">76</span><span class="p">,</span> <span class="mi">75</span><span class="p">,</span> <span class="mi">140</span><span class="p">,</span> <span class="mi">77</span><span class="p">,</span> <span class="mi">76</span><span class="p">]:</span>
    <span class="nf">print</span><span class="p">(</span><span class="n">stream</span><span class="p">.</span><span class="nf">update</span><span class="p">(</span><span class="n">measurement</span><span class="p">))</span>
</code></pre></div></div>

<p>Buradaki <code class="language-plaintext highlighter-rouge">140</code> değeri tek başına geldiğinde medyanı dramatik biçimde değiştirmez. Bununla birlikte gerçek bir egzersiz sırasında yükselen nabzın yanlışlıkla gürültü sayılmaması için ivmeölçer verisi de kullanılmalıdır. Kullanıcı koşuyorsa yüksek nabız beklenebilir; koltukta oturuyorsa aynı ölçüm daha dikkat çekicidir.</p>

<h2 id="uyku-nasıl-tahmin-edilir">Uyku nasıl tahmin edilir?</h2>

<p>Uyku analizi genellikle ivmeölçer hareketleri, nabız ve kalp atışları arasındaki değişkenliği birleştirir. Basit bir modelde düşük hareket ve düşen nabız uykuya işaret eder. Daha gelişmiş sistemler uyanıklık, hafif uyku, derin uyku ve REM sınıflarını tahmin eder.</p>

<p>Bir özellik vektörü şöyle tanımlanabilir:</p>

\[x = [HR_{avg}, HRV, movement, oxygen]\]

<p>Bu değerler karar ağacı, lojistik regresyon veya sinir ağına verilebilir. Başlangıç projesinde açıklanabilir olduğu için karar ağacı iyi bir seçimdir. Veriler 30 saniyelik ya da bir dakikalık pencerelere bölünerek her pencere için ortalama, standart sapma ve hareket toplamı hesaplanabilir.</p>

<h2 id="sağlık-verisinde-kritik-ayrıntılar">Sağlık verisinde kritik ayrıntılar</h2>

<p>Gerçek zamanlı sistem, eksik paketleri ve Bluetooth kopmalarını yönetmelidir. Ölçümlere zaman damgası eklenmeli, veriler aktarımda ve depolamada şifrelenmeli, kullanıcıdan açık izin alınmalıdır. Ayrıca bu algoritmalar tıbbi teşhis koymamalıdır. “Düzensiz ölçüm algılandı” demek, “Kalp hastalığınız var” demekten hem teknik hem etik açıdan daha doğrudur.</p>

<p>Bu projeyi büyütmek için FastAPI ile veri kabul eden bir servis, WebSocket ile canlı panel ve kişiye özel normal değerleri öğrenen bir anomali modeli ekleyebilirsiniz. Böylece bilekte başlayan küçük sinyal, güvenli ve açıklanabilir bir sağlık analizi sistemine dönüşür.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Proje" /><category term="giyilebilir-teknoloji" /><category term="sağlık-verisi" /><category term="python" /><category term="gerçek-zamanlı-analiz" /><category term="sinyal-işleme" /><category term="makine-öğrenmesi" /><summary type="html"><![CDATA[Akıllı saatler yalnızca saati gösteren cihazlar olmaktan çıkıp bileğimizde çalışan küçük sağlık laboratuvarlarına dönüştü. Nabız, hareket, kandaki oksijen oranı ve uyku gibi ölçümler; doğru algoritmalarla işlendiğinde anlamlı eğilimlere ve erken uyarılara dönüştürülebilir. Ancak ham sensör verisini doğrudan yorumlamak, rüzgârlı havada fısıltı dinlemeye benzer: Önce gürültüyü temizlemek gerekir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/akilli-saat-verileriyle-20.png" /><media:content medium="image" url="https://program.sonsuz.us/img/akilli-saat-verileriyle-20.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Akıllı Sayaçlarla Enerji Şebekesi Optimizasyonu</title><link href="https://program.sonsuz.us/posts/akilli-sayaclarla-enerji-sebekesi-optimizasyonu/" rel="alternate" type="text/html" title="Akıllı Sayaçlarla Enerji Şebekesi Optimizasyonu" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/akilli-sayaclarla-enerji-sebekesi-optimizasyonu</id><content type="html" xml:base="https://program.sonsuz.us/posts/akilli-sayaclarla-enerji-sebekesi-optimizasyonu/"><![CDATA[<p>Bir şehir aynı anda uyanıp kahve makinelerini, klimaları ve fabrikaları çalıştırdığında elektrik şebekesi ciddi bir denge sınavına girer. Geleneksel sayaçlar yalnızca dönemsel tüketimi gösterirken akıllı sayaçlar, tüketimi kısa aralıklarla ölçerek şebekenin adeta nabzını tutar. Böylece enerji üretimi, depolama sistemleri ve tüketici talepleri gerçek zamanlı verilere göre yönetilebilir.</p>

<p>``</p>

<h2 id="akıllı-sayaç-verisi-nedir">Akıllı sayaç verisi nedir?</h2>

<p>Akıllı sayaçlar elektrik tüketimini genellikle 1, 5, 15 veya 30 dakikalık aralıklarla kaydeder. Her ölçüm; zaman damgası, tüketilen enerji, gerilim, akım ve bazı sistemlerde güç faktörü gibi alanlar içerebilir. Veriler güvenli iletişim ağları üzerinden merkezi bir yönetim platformuna gönderilir.</p>

<p>Bir sayacın belirli bir aralıktaki ortalama gücü basitçe şöyle hesaplanabilir:</p>

\[P = E / t\]

<p>Burada $E$ tüketilen enerji, $t$ ölçüm süresi ve $P$ ortalama güçtür. Şehir genelindeki toplam talep ise $N$ sayacın katkısıyla bulunur:</p>

\[P_{toplam}(t) = \sum_{i=1}^{N} P_i(t)\]

<p>Bu toplam, santrallerin ve bataryaların karşılaması gereken anlık yükü temsil eder. Üretim ile tüketim dengelenemezse frekans sapmaları, kesintiler veya ekipman hasarları ortaya çıkabilir.</p>

<h2 id="geleneksel-ve-akıllı-yaklaşım">Geleneksel ve akıllı yaklaşım</h2>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Geleneksel sayaç</th>
      <th>Akıllı sayaç</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Ölçüm sıklığı</td>
      <td>Aylık</td>
      <td>Dakikalık veya saatlik</td>
    </tr>
    <tr>
      <td>Veri aktarımı</td>
      <td>Görevli tarafından</td>
      <td>Otomatik ve uzaktan</td>
    </tr>
    <tr>
      <td>Arıza tespiti</td>
      <td>Gecikmeli</td>
      <td>Gerçek zamana yakın</td>
    </tr>
    <tr>
      <td>Talep tahmini</td>
      <td>Sınırlı</td>
      <td>Ayrıntılı ve dinamik</td>
    </tr>
    <tr>
      <td>Fiyatlandırma</td>
      <td>Genellikle sabit</td>
      <td>Zamana bağlı olabilir</td>
    </tr>
  </tbody>
</table>

<p>Akıllı sistem, yalnızca daha fazla veri toplamaz; şehrin davranış kalıplarını görünür hâle getirir. Örneğin sıcaklık yükseldiğinde klima tüketiminin ne kadar artacağı veya bir futbol maçı bittiğinde talebin nasıl sıçrayacağı tahmin edilebilir.</p>

<h2 id="veriden-dengelemeye-giden-yol">Veriden dengelemeye giden yol</h2>

<p>İlk aşama veri temizliğidir. Eksik ölçümler enterpolasyonla tamamlanabilir, fiziksel olarak imkânsız değerler aykırı veri olarak işaretlenebilir. Ardından hava durumu, takvim, resmi tatiller ve geçmiş tüketim gibi değişkenlerle talep tahmini yapılır.</p>

<p>Basitleştirilmiş bir Python örneği, hareketli ortalama kullanarak kısa vadeli yük tahmini üretir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">pandas</span> <span class="k">as</span> <span class="n">pd</span>

<span class="n">veri</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nf">read_csv</span><span class="p">(</span><span class="sh">"</span><span class="s">sayac_verisi.csv</span><span class="sh">"</span><span class="p">,</span> <span class="n">parse_dates</span><span class="o">=</span><span class="p">[</span><span class="sh">"</span><span class="s">zaman</span><span class="sh">"</span><span class="p">])</span>
<span class="n">veri</span> <span class="o">=</span> <span class="n">veri</span><span class="p">.</span><span class="nf">sort_values</span><span class="p">(</span><span class="sh">"</span><span class="s">zaman</span><span class="sh">"</span><span class="p">)</span>

<span class="c1"># Son dört ölçümün ortalaması kısa vadeli tahmin olarak kullanılır.
</span><span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">tahmin_kw</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">tuketim_kw</span><span class="sh">"</span><span class="p">].</span><span class="nf">rolling</span><span class="p">(</span><span class="mi">4</span><span class="p">).</span><span class="nf">mean</span><span class="p">()</span>

<span class="c1"># Gerçek tüketim ile tahmin arasındaki fark hesaplanır.
</span><span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">denge_ihtiyaci_kw</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
    <span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">tuketim_kw</span><span class="sh">"</span><span class="p">]</span> <span class="o">-</span> <span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">tahmin_kw</span><span class="sh">"</span><span class="p">]</span>
<span class="p">)</span>

<span class="nf">print</span><span class="p">(</span><span class="n">veri</span><span class="p">.</span><span class="nf">tail</span><span class="p">())</span>
</code></pre></div></div>

<p>Bu yöntem öğretici olsa da gerçek sistemlerde ARIMA, gradyan artırma, LSTM veya Transformer tabanlı modeller kullanılabilir. Tahmin edilen talep üretim planına aktarılır. Beklenmedik bir artış varsa bataryalar devreye alınabilir; düşüş varsa üretim azaltılabilir ya da fazla enerji depolanabilir.</p>

<h2 id="talep-tarafı-yönetimi">Talep tarafı yönetimi</h2>

<p>Optimizasyon yalnızca daha fazla elektrik üretmek anlamına gelmez. Yoğun saatlerde elektrikli araç şarjını ertelemek, ticari binaların klimalarını küçük ölçüde ayarlamak veya tüketicilere indirim sunmak da denge sağlar. Amaç maliyeti ifade eden $C$, emisyonu ifade eden $M$ ve kesinti riskini ifade eden $R$ değerlerini birlikte küçültmektir:</p>

\[minimize\quad \alpha C + \beta M + \gamma R\]

<p>Katsayılar şehrin önceliklerini temsil eder. Çevreci bir yönetim $\beta$ değerini, kesintiye karşı hassas bir hastane bölgesi ise $\gamma$ değerini yükseltebilir.</p>

<h2 id="güvenlik-ve-mahremiyet">Güvenlik ve mahremiyet</h2>

<p>Ayrıntılı tüketim verisi, insanların evde olup olmadığına dair ipuçları verebilir. Bu nedenle veriler şifrelenmeli, mümkün olduğunda anonimleştirilmeli ve yalnızca gerekli süre boyunca saklanmalıdır. Ayrıca sayaç yazılımları güncel tutulmalı ve sahte ölçümlere karşı doğrulama mekanizmaları kullanılmalıdır.</p>

<p>Sonuç olarak akıllı sayaçlar, elektrik faturasını dijitalleştiren cihazlardan çok daha fazlasıdır. Doğru veri mühendisliği ve optimizasyon yöntemleriyle şehirler daha az kayıp yaşayan, yenilenebilir kaynakları daha iyi kullanan ve talep sıçramalarına daha çevik tepki veren enerji sistemleri kurabilir.</p>

<p><img src="/img/akilli-sayaclarla-enerji-71.svg" alt="akilli-sayaclarla-enerji-71" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="akıllı sayaç" /><category term="enerji optimizasyonu" /><category term="akıllı şebeke" /><category term="veri analizi" /><category term="makine öğrenmesi" /><category term="python" /><summary type="html"><![CDATA[Bir şehir aynı anda uyanıp kahve makinelerini, klimaları ve fabrikaları çalıştırdığında elektrik şebekesi ciddi bir denge sınavına girer. Geleneksel sayaçlar yalnızca dönemsel tüketimi gösterirken akıllı sayaçlar, tüketimi kısa aralıklarla ölçerek şebekenin adeta nabzını tutar. Böylece enerji üretimi, depolama sistemleri ve tüketici talepleri gerçek zamanlı verilere göre yönetilebilir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/akilli-sayaclarla-enerji-71.png" /><media:content medium="image" url="https://program.sonsuz.us/img/akilli-sayaclarla-enerji-71.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Akıllı Termostatlar Sizi Nasıl Öğreniyor? Konforun Arkasındaki Algoritmalar</title><link href="https://program.sonsuz.us/posts/akilli-termostatlar-sizi-nasil-ogreniyor-konforun-arkasindaki-algoritmalar/" rel="alternate" type="text/html" title="Akıllı Termostatlar Sizi Nasıl Öğreniyor? Konforun Arkasındaki Algoritmalar" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/akilli-termostatlar-sizi-nasil-ogreniyor-konforun-arkasindaki-algoritmalar</id><content type="html" xml:base="https://program.sonsuz.us/posts/akilli-termostatlar-sizi-nasil-ogreniyor-konforun-arkasindaki-algoritmalar/"><![CDATA[<p>Akıllı bir termostatın sabah siz uyanmadan evi ısıtması sihir gibi görünebilir. Oysa cihazın içinde pelerinli bir büyücü değil; sensörler, geçmiş veriler ve öğrenen algoritmalar bulunur. Termostat, hangi saatlerde evde olduğunuzu, hangi sıcaklıkları tercih ettiğinizi ve evin ne kadar sürede ısındığını gözlemleyerek zamanla kişisel bir ısıtma planı oluşturur.</p>

<p>``</p>

<h2 id="termostat-hangi-verileri-toplar">Termostat hangi verileri toplar?</h2>

<p>Öğrenme süreci, düzenli olarak ölçüm yapılmasıyla başlar. Temel veri noktaları oda sıcaklığı, hedef sıcaklık, saat, gün ve kullanıcının yaptığı manuel değişikliklerdir. Daha gelişmiş cihazlar hareket sensörlerinden, telefon konumundan, nem ölçümlerinden ve hava durumu servislerinden de yararlanabilir.</p>

<table>
  <thead>
    <tr>
      <th>Veri</th>
      <th>Algoritmaya anlattığı şey</th>
      <th>Örnek</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Saat ve gün</td>
      <td>Günlük veya haftalık rutin</td>
      <td>Hafta içi 07.00’de uyanma</td>
    </tr>
    <tr>
      <td>Manuel ayar</td>
      <td>Kullanıcının gerçek tercihi</td>
      <td>Akşam sıcaklığı 22°C yapma</td>
    </tr>
    <tr>
      <td>Hareket sensörü</td>
      <td>Evde birinin bulunup bulunmadığı</td>
      <td>İki saat hareket algılanmaması</td>
    </tr>
    <tr>
      <td>Dış sıcaklık</td>
      <td>Evin ısınma hızını etkileyen koşul</td>
      <td>Dışarısı -3°C</td>
    </tr>
    <tr>
      <td>Telefon konumu</td>
      <td>Eve yaklaşma veya evden ayrılma</td>
      <td>Kullanıcı eve 5 km uzakta</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/akilli-termostatlar-sizi-11.svg" alt="akilli-termostatlar-sizi-11" /></p>

<p>Burada kritik nokta şudur: Tek bir değişiklik alışkanlık sayılmaz. Kullanıcının sıcaklığı bir akşam yükseltmesi tesadüf olabilir. Algoritma, tekrar eden örüntülere daha fazla güvenmelidir.</p>

<h2 id="öğrenmenin-temel-mantığı">Öğrenmenin temel mantığı</h2>

<p>Basit bir sistem, benzer zaman dilimlerindeki tercihlerin hareketli ortalamasını kullanabilir. Son $n$ günde aynı saatte seçilen sıcaklıklar $T_1, T_2, \ldots, T_n$ ise tahmin şöyle hesaplanır:</p>

\[\hat{T}=\frac{1}{n}\sum_{i=1}^{n}T_i\]

<p>Yeni davranışların daha önemli olması istenirse üstel düzeltme uygulanabilir:</p>

\[S_t=\alpha T_t+(1-\alpha)S_{t-1}\]

<p>Buradaki $\alpha$, algoritmanın değişime ne kadar hızlı tepki verdiğini belirler. Büyük bir $\alpha$ yeni tercihlere hızla uyum sağlar; küçük değer ise geçmiş alışkanlıkları daha uzun süre korur.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Güçlü yanı</th>
      <th>Zayıf yanı</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Sabit program</td>
      <td>Basit ve öngörülebilir</td>
      <td>Değişen rutine uymaz</td>
    </tr>
    <tr>
      <td>Hareketli ortalama</td>
      <td>Gürültüyü azaltır</td>
      <td>Ani değişiklikleri geç öğrenir</td>
    </tr>
    <tr>
      <td>Karar ağacı</td>
      <td>Saat, hava ve varlığı birlikte işler</td>
      <td>Fazla veriyle karmaşıklaşabilir</td>
    </tr>
    <tr>
      <td>Pekiştirmeli öğrenme</td>
      <td>Konfor ve tasarrufu birlikte optimize eder</td>
      <td>Güvenli keşif mekanizması gerektirir</td>
    </tr>
  </tbody>
</table>

<h2 id="küçük-bir-öğrenme-örneği">Küçük bir öğrenme örneği</h2>

<p>Aşağıdaki Python kodu, belirli bir saat için son sıcaklık tercihlerine daha yüksek ağırlık verir. Böylece termostat eski alışkanlıkları tamamen unutmadan yeni davranışlara uyum sağlar.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">sicaklik_tahmini</span><span class="p">(</span><span class="n">tercihler</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.35</span><span class="p">):</span>
    <span class="sh">"""</span><span class="s">Geçmiş tercihlerden üstel düzeltilmiş hedef üretir.</span><span class="sh">"""</span>
    <span class="k">if</span> <span class="ow">not</span> <span class="n">tercihler</span><span class="p">:</span>
        <span class="k">return</span> <span class="mf">20.0</span>  <span class="c1"># Veri yoksa güvenli varsayılan
</span>
    <span class="n">tahmin</span> <span class="o">=</span> <span class="n">tercihler</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
    <span class="k">for</span> <span class="n">sicaklik</span> <span class="ow">in</span> <span class="n">tercihler</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
        <span class="n">tahmin</span> <span class="o">=</span> <span class="n">alpha</span> <span class="o">*</span> <span class="n">sicaklik</span> <span class="o">+</span> <span class="p">(</span><span class="mi">1</span> <span class="o">-</span> <span class="n">alpha</span><span class="p">)</span> <span class="o">*</span> <span class="n">tahmin</span>

    <span class="k">return</span> <span class="nf">round</span><span class="p">(</span><span class="n">tahmin</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>

<span class="n">aksam_tercihleri</span> <span class="o">=</span> <span class="p">[</span><span class="mi">21</span><span class="p">,</span> <span class="mf">21.5</span><span class="p">,</span> <span class="mi">22</span><span class="p">,</span> <span class="mi">22</span><span class="p">,</span> <span class="mf">22.5</span><span class="p">]</span>
<span class="nf">print</span><span class="p">(</span><span class="nf">sicaklik_tahmini</span><span class="p">(</span><span class="n">aksam_tercihleri</span><span class="p">))</span>
</code></pre></div></div>

<p>Gerçek bir cihaz yalnızca sıcaklığı tahmin etmez. Evin termal davranışını da öğrenir. Örneğin salonun 19°C’den 22°C’ye ulaşması 30 dakika sürüyorsa sistem, hedef saate kadar beklemek yerine kombiyi önceden çalıştırır.</p>

<h2 id="konfor-ile-tasarruf-arasındaki-denge">Konfor ile tasarruf arasındaki denge</h2>

<p>Termostatın amacı evi sürekli sıcak tutmak değildir. Daha mantıklı hedef, konfor kaybı ile enerji tüketimini birlikte azaltmaktır:</p>

\[J=\lambda E+(1-\lambda)C\]

<p>Burada $E$ enerji maliyetini, $C$ hedef sıcaklıktan sapmayı, $\lambda$ ise tasarrufa verilen önemi temsil eder. Kullanıcı üşüyüp ayarı sürekli değiştiriyorsa algoritma konfora daha fazla ağırlık vermeyi öğrenebilir.</p>

<p>Elbette öğrenen cihazlarda mahremiyet önemlidir. Evde bulunma saatleri hassas bilgi sayılmalı; veriler mümkünse cihaz üzerinde işlenmeli, şifrelenmeli ve kullanıcı tarafından silinebilmelidir. Ayrıca donma riski veya aşırı ısınma gibi durumlarda öğrenilmiş kararlar güvenlik sınırlarını aşmamalıdır.</p>

<p>Sonuç olarak akıllı termostat, yalnızca uzaktan kontrol edilen bir düğme değildir. Tekrarlanan davranışları istatistiksel örüntülere dönüştüren, evin fiziksel tepkisini modelleyen ve konfor ile maliyet arasında sürekli pazarlık yapan küçük bir karar sistemidir. Üstelik siz rutininizi değiştirdikçe o da ders programını günceller.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="akıllı termostat" /><category term="makine öğrenmesi" /><category term="nesnelerin interneti" /><category term="yapay zeka" /><category term="enerji verimliliği" /><summary type="html"><![CDATA[Akıllı bir termostatın sabah siz uyanmadan evi ısıtması sihir gibi görünebilir. Oysa cihazın içinde pelerinli bir büyücü değil; sensörler, geçmiş veriler ve öğrenen algoritmalar bulunur. Termostat, hangi saatlerde evde olduğunuzu, hangi sıcaklıkları tercih ettiğinizi ve evin ne kadar sürede ısındığını gözlemleyerek zamanla kişisel bir ısıtma planı oluşturur.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/akilli-termostatlar-sizi-11.png" /><media:content medium="image" url="https://program.sonsuz.us/img/akilli-termostatlar-sizi-11.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>