Loglama
Barkod Okuma Teknolojisi Nasıl Çalışır?
Bir barkodun çözülmesi standart, hızlı ve neredeyse hatasız bir işlemdir — bunu belirleyen küresel bir standart var ve her telefon kamerası aynı kurallara göre çalışır. Zor olan kısım bu değil: zor olan, çözülen o sayının hangi ürüne, hangi besin değerine karşılık geldiğini doğru bulmaktır. Cookrange’de bu sorgu, küresel ve kullanıcı katkılarıyla büyüyen bir veritabanı olan Open Food Facts üzerinden yapılıyor — ve bir taramanın sonuç verip vermeyeceğini belirleyen şey barkodun okunması değil, o ürünün veritabanına daha önce girilmiş olup olmadığıdır.
Bir barkod aslında neyi kodluyor?
Market raflarındaki barkodların büyük çoğunluğu, GS1 standardının tanımladığı bir yapıyı takip eder: EAN-13 ya da UPC-A. Bu sayı dizisi rastgele değil — ilk birkaç hane, üreticinin barkodu hangi ülkenin GS1 üye kuruluşundan aldığını gösteren bir ülke/kuruluş öneki (Türkiye’de bu, TOBB bünyesindeki GS1 Türkiye’dir), ortadaki haneler üretici ve ürün kodunu, son hane ise bir kontrol basamağını taşır. Bu kontrol basamağı, Modulo 10 adı verilen bir algoritmayla önceki tüm hanelerden hesaplanır ve tarama sırasında bir hane yanlış okunduğunda bunu anında ortaya çıkarır.
Kamera bir barkodu nasıl “okuyor”?
Telefonun kamerası bir ışık kaynağı değil, ortam ışığının barkoddan yansımasını okuyan bir sensör gibi çalışır: siyah çubuklar ışığı emer, beyaz boşluklar yansıtır. Görüntü işleme katmanı bu yansıma örüntüsünü çubuk genişliklerine, çubuk genişliklerini de bir hane dizisine çevirir. Bu adım, barkodun kendisi net göründüğü sürece saniyenin çok küçük bir kısmında tamamlanır — kontrol basamağı burada hemen doğrulanır, böylece bulanık ya da yarım bir kare, veritabanına hiç gitmeden elenir.
Zincirin asıl kısıtlayan noktası genelde kod değil, ortam koşullarıdır: otomatik odaklanma barkodun net görünmesi için gereken mesafe/netlik ayarını saniyenin bir kısmında yapar, ama yetersiz ışık, yansıma yapan bir ambalaj yüzeyi ya da telefonun çok yakın/uzak tutulması bu adımı uzatabilir. Bu yüzden “tarama neden bazen anında, bazen birkaç deneme gerektiriyor” sorusunun cevabı genelde yazılımda değil, kamera ile barkod arasındaki fiziksel koşullarda aranmalıdır.
Sayı çözüldükten sonra ne oluyor: veritabanı eşleştirmesi
Barkodun kendisi yalnızca bir kimlik numarasıdır — “bu numara şu üretici tarafından kayıtlı” der, ama besin değerini taşımaz. Numaranın karşılığını bulmak ayrı bir adımdır: çözülen sayı bir veritabanına sorgu olarak gönderilir ve o veritabanındaki ürün + besin değeri kaydıyla eşleştirilir. Barkodun kodlanması evrensel bir standarda bağlıyken, bu eşleşmenin bulunup bulunamayacağı tamamen hangi veritabanına sorulduğuna bağlıdır.
Veritabanı kapsamı neden belirleyici?
Burada Türkiye’ye özgü asıl fark devreye giriyor. Kullanıcı katkılarıyla büyüyen bir gıda veritabanı, en çok katkı gelen pazarların etrafında daha hızlı büyür — Open Food Facts için bu tarihsel olarak Batı Avrupa ve Kuzey Amerika olmuştur. Bir ürünü henüz kimse girmemişse, barkodun kendisi teknik olarak geçerli ve doğru çözülmüş olsa bile veritabanında karşılığı olmayabilir. Türkiye’de satılan yerel bir süt ürünü ya da bölgesel bir atıştırmalık, GS1 Türkiye üzerinden düzgün bir barkoda sahip olabilir, ama o barkodu henüz kimse taratıp veritabanına eklememişse eşleşme bulunamaz. Bu yüzden doğruluğu belirleyen, taramanın hızı değil, bu paylaşılan ve büyümeye devam eden veritabanının bugün senin pazarını ne kadar iyi kapsadığıdır.
Bunun pratik sonucu şu: aynı veritabanı büyüdükçe, önceden hiç karşılığı olmayan yerel bir ürün, bir başkası onu ilk kez tarayıp sisteme girdiği andan itibaren herkes için bulunabilir hale geliyor. Kapsamın büyümesi merkezi bir ekibin kararına değil, kullanıcıların katkısına bağlı — bu da veritabanının Türkiye’deki kapsamını, Türkiye’den kaç kişinin aktif olarak katkıda bulunduğunun belirlemesi anlamına geliyor.
Peki bir taramanın sonuç vermesini asıl ne belirliyor?
Uçtan uca akışta değişken olan adım barkodun çözülmesi değil — bu adım zaten neredeyse anlık. Değişken olan, o ürün için Open Food Facts’te zaten bir kayıt olup olmadığıdır: ürün adı, porsiyon, protein/karbonhidrat/yağ değerleri. Küresel ölçekte satılan bir marka için bu kayıt neredeyse kesinlikle zaten vardır, çünkü onu daha önce başka biri taratıp eklemiştir. Bölgesel bir Türk markası için ise bu tamamen, o ürünü dünyanın herhangi bir yerinden — ama gerçekçi olarak en çok Türkiye’den — başka bir kullanıcının daha önce taratıp taratmadığına bağlıdır. Asıl değişken budur, kameranın çubukları ne kadar hızlı okuduğuyla hiçbir ilgisi yoktur.
Barkodun kendisi ile veritabanı eşleşmesi arasındaki fark
| Boyut | Barkodun kendisi | Veritabanı eşleşmesi |
|---|---|---|
| Neyi temsil eder | Bir kimlik numarası (GTIN) | O numaraya karşılık gelen ürün + besin verisi |
| Kim tanımlıyor | Küresel standart (GS1) | Uygulamanın sorguladığı veritabanı |
| Nerede sabit | Her ülkede aynı yapı | Ülkeden ülkeye kapsam farklılaşır |
| Nerede hata olur | Nadiren — kontrol basamağı yakalar | Sık — ürün veritabanında hiç yoksa |
| Türkiye kapsamını ne iyileştirir | Hiçbir şey — zaten evrensel | Kullanıcıların girdiği daha fazla Türk ürünü |
Bir eşleşme yanlış çıkarsa pipeline’da ne değişir?
Kontrol basamağı yalnızca barkodun doğru okunduğunu doğrular — okunan numaranın veritabanındaki karşılığının doğru ürün ve doğru besin değeriyle eşleştiğini garanti etmez. Bu ikisi farklı hata türleridir: biri tarama katmanında oluşur (barkod yanlış çözülür, kontrol basamağı bunu hemen yakalar), diğeri eşleştirme katmanında oluşur (barkod doğru çözülür, ama veritabanındaki kayıt yanlış ya da eksiktir). İkinci tür hatanın çözümü yeniden taramak değil, kaydı düzeltmektir; bir kullanıcı yanlış bir eşleşmeyi bildirdiğinde bu düzeltme veritabanına geri beslenir, böylece aynı barkodu bir sonraki tarayan kişi doğru sonucu görür.
Sık sorulan sorular
Barkodun kendisi bozuksa (silik, yırtık) ne oluyor? Kontrol basamağı burada devreye giriyor: taranan hane dizisi kendi kontrol basamağıyla uyuşmuyorsa, sistem bunu geçerli bir eşleşme olarak kabul etmez ve yanlış bir üründe karar kılmak yerine yeniden taramayı ister.
Aynı barkod farklı ülkelerde farklı bir ürüne mi karşılık gelebilir? Barkod numarasının kendisi tek bir kayda bağlıdır, ama hangi veritabanının bu kaydı içerdiği değişir. Bazı istisnai durumlarda (özellikle dahili/kurum içi barkodlarda) çakışmalar görülebilir, ama bu nadirdir; asıl yaygın sorun çakışma değil, yerel bir ürünün büyük/küresel bir veritabanında hiç yer almamasıdır.
Barkodsuz bir ürünü (simit, ev yemeği) taramak mümkün mü? Hayır — barkod eşleştirme yalnızca gerçekten bir barkodu olan ürünler için çalışır. Barkodsuz ürünlerde devreye giren mekanizma tamamen farklıdır: tarif/porsiyon tahmini. Bu, beslenme ve planlama akışının ayrı, kendi mantığına sahip bir parçasıdır ve bu yazının kapsamındaki barkod-veritabanı eşleştirmesiyle karıştırılmamalıdır.
Barkod okuma teknolojisinin kendisi büyük ölçüde çözülmüş, standart bir problemdir. Asıl önemli olan, çözülen sayının neyle eşleştiğidir — Cookrange’in kapalı, kendine özel bir katalog yerine Open Food Facts’i kullanmasının nedeni de tam olarak bu: küresel, kullanıcı katkılarıyla büyüyen bir veritabanı, ve Türkiye’deki kapsamı tek bir şirketin sıfırdan kapalı bir yerel veri kümesi kurmasına değil, daha çok insanın tarayıp katkıda bulunmasına bağlı olarak büyüyor. Cookrange şu anda v0.9.6 dahili alfa aşamasında; erken erişim için bekleme listesine kaydolabilirsin.