Giriş
Barkodlar, günümüzde ürün tanımlama ve envanter takibi gibi birçok alanda yaygın olarak kullanılmaktadır. Barkod okuyucular, bu barkodları hızlı ve etkili bir şekilde okumak için gerekli olan araçlardır. Python, esnekliği ve geniş kütüphane desteği ile bu tür uygulamaların geliştirilmesinde mükemmel bir seçimdir. Bu yazıda, OpenCV kütüphanesini kullanarak bir barkod okuyucu oluşturmayı adım adım anlatacağım. Python ve OpenCV ile barkod okuma konusunda sağlam bir bilgi sahibi olacağınızdan emin olabilirsiniz.
OpenCV Nedir?
OpenCV (Open Source Computer Vision Library), bilgisayarla görme ve görüntü işleme alanında kullanılan bir açık kaynak kütüphanesidir. Python üzerinde de kullanılabilen OpenCV, yüz tanıma, nesne tespiti ve video analizinden barkod okumaya kadar geniş bir uygulama yelpazesine sahiptir. Bu kütüphane, yüksek performanslı bilgisayarla görme uygulamaları geliştirmenizi sağlar.
OpenCV, çok sayıda işlevsellik sunan geniş bir kütüphane olduğu için, Python geliştiricileri arasında popüler bir tercih haline gelmiştir. Açık kaynak olması ve çok sayıda örnek ile desteklenmesi, OpenCV’yi öğrenmeyi ve uygulamayı kolaylaştırır. Barkod okuma uygulamaları gibi pratik projelerde, bu kütüphaneyi kullanmak size önemli avantajlar sağlar.
Kütüphanenin Kurulumu
OpenCV’yi Python ortamınıza dahil etmek oldukça basittir. Öncelikle, terminal veya komut istemcisine giderek aşağıdaki komutu girerek OpenCV’yi yükleyebilirsiniz:
pip install opencv-python opencv-python-headless
Bu komut, OpenCV’nin Python versiyonunu yükleyecek ve görsel işleme projelerinizde kullanmanız için gerekli kütüphaneleri kuracaktır. Ayrıca, barkod okuma için ‘pyzbar’ kütüphanesini de eklemeniz gerekecek:
pip install pyzbar
Bu iki kütüphane, barkod okuma projeniz için gerekli tüm araçları sağlayacaktır.
Barkod Okuyucu Geliştirme
Artık OpenCV ve pyzbar kütüphanelerini yüklediğimize göre, basit bir barkod okuyucu geliştirmeye başlayalım. Bu uygulama, bir görüntü dosyasını alacak ve barkodun içeriğini okuyarak ekranda gösterecektir. Öncelikle gerekli kütüphaneleri içe aktaralım:
import cv2
from pyzbar.pyzbar import decode
Bu kütüphaneleri içe aktardıktan sonra, bir görüntüyü okuyup barkodu analiz edecek olan temel işlevimizi oluşturabiliriz. İşte bu işlevin adımları:
def barkod_okuyucu(goruntu_yolu):
# Görüntüyü oku
img = cv2.imread(goruntu_yolu)
# Barkodları çöz
barkodlar = decode(img)
# Barkodları yazdır
for barkod in barkodlar:
barkod_turu = barkod.type
barkod_verisi = barkod.data.decode('utf-8')
print('Barkod Türü: {} - Barkod Verisi: {}'.format(barkod_turu, barkod_verisi))
Yukarıdaki işlevde, verilen bir görüntü yolunu alıyor, bunu okuyarak bir OpenCV nesnesine çeviriyor, ardından barkodu çözümleyip sonuçları yazdırıyoruz. Artık bu işlevi kullanarak bir görüntü üzerinde barkod okuyabiliriz.
Görüntü Üzerinde Barkod İşleme
Barkodları çözerken, görüntünüz üzerinde barkodun hangi kısımda bulunduğunu da göstermek isteyebilirsiniz. Bunun için, barkodların konum bilgilerini kullanarak görüntüyü işleyebiliriz. Barkod nesnesinin sağladığı koordinatları kullanarak barkod dikdörtgeni çizebiliriz:
def barkod_okuyucu_ve_goruntu(goruntu_yolu):
img = cv2.imread(goruntu_yolu)
barkodlar = decode(img)
for barkod in barkodlar:
barkod_turu = barkod.type
barkod_verisi = barkod.data.decode('utf-8')
print('Barkod Türü: {} - Barkod Verisi: {}'.format(barkod_turu, barkod_verisi))
# Barkodun konumunu al
(x, y, w, h) = barkod.rect
# Barkodun etrafında bir dikdörtgen çiz
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
# Görüntüyü göster
cv2.imshow('Barkod Okuyucu', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Bu güncellenmiş işlev, barkodlar okunduktan sonra sonuçları yazdırırken, görüntü üzerinde de barkodun etrafına bir dikdörtgen çizer. Bu sayede kullanıcı, hangi barkodun okunduğunu görsel olarak takip edebilir.
İşlevselliği Artırma
Geliştirdiğimiz temel barkod okuyucuyu daha işlevsel hale getirmek için birkaç ek özellik ekleyebiliriz. Örneğin, gerçek zamanlı barkod okuyucu oluşturmak isteyebilirsiniz. Bu durumda, bir web kamerası veya harici bir kamera ile görüntü akışını alarak barkodları canlı olarak okuyabiliriz. Aşağıdaki örnek, webcam kullanarak gerçek zamanlı barkod okuma özelliğini nasıl ekleyebileceğimizi göstermektedir:
def gercek_zamanli_barkod_okuyucu():
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
barkodlar = decode(frame)
for barkod in barkodlar:
barkod_turu = barkod.type
barkod_verisi = barkod.data.decode('utf-8')
print('Barkod Türü: {} - Barkod Verisi: {}'.format(barkod_turu, barkod_verisi))
(x, y, w, h) = barkod.rect
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imshow('Gerçek Zamanlı Barkod Okuyucu', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Yukarıdaki kodda, webcam’den sürekli olarak görüntü alıyor ve her görüntüde barkodu çözümlemeye çalışıyoruz. Kullanıcı, ‘q’ tuşuna bastığında uygulama kapanır. Bu, barkod okuma uygulamanızın daha kullanıcı dostu olmasını sağlar.
Sonuçların Kaydedilmesi
Barkodların yalnızca okunması değil, aynı zamanda bu sonuçların kaydedilmesi de bir uygulama geliştirmek için önemli bir özelliktir. Bu özelliği ekleyerek, barkodları okuduktan sonra veritabanına kaydedebilir veya bir dosyaya yazabilirsiniz. Örneğin, okunan barkodları bir metin dosyasına kaydetmek için aşağıdaki gibi bir yöntem geliştirebilirsiniz:
def barkod_kaydet(goruntu_yolu, dosya_adi):
img = cv2.imread(goruntu_yolu)
barkodlar = decode(img)
with open(dosya_adi, 'a') as dosya:
for barkod in barkodlar:
barkod_turu = barkod.type
barkod_verisi = barkod.data.decode('utf-8')
dosya.write('Barkod Türü: {} - Barkod Verisi: {}
'.format(barkod_turu, barkod_verisi))
print('Sonuçlar {} dosyasına kaydedildi.'.format(dosya_adi))
Bu işlev, okunan barkodları belirttiğiniz bir dosyaya kaydeder ve böylece daha sonra bu veriye erişebilirsiniz. Barkod okuyucunuzun işlevselliğini artırarak, kullanıcıların verimliliğini ve kullanım kolaylığını sağlamış olursunuz.
Sonuç
OpenCV kütüphanesi ile Python üzerinde barkod okuma uygulaması geliştirmek, programlama bilgilerinizi pekiştirmenin yanı sıra pratik bir projenin sahibi olmanızı da sağlar. Bu yazıda, bir barkod okuyucu geliştirmeyi, görüntüdeki barkodları çözümlemeyi, gerçek zamanlı okuma yapmayı ve elde edilen sonuçları kaydetmeyi adım adım gösterdik. Artık sıradaki adım, kendi projelerinizi geliştirmektir!
Unutmayın, bu süreçte farklı kütüphaneleri ve araçları keşfederek kendi yeniliklerinizi ekleyebilirsiniz. Barkod okuyucu uygulamanızı geliştirirken karşılaştığınız zorlukları ve öğrendiklerinizi paylaşarak, Python topluluğuna katkıda bulunmayı ihmal etmeyin.
Geliştirmiş olduğunuz barkod okuyucuyla ilgili geri dönüşlerinizi ve projelerinizi bizimle paylaşmanızı bekliyoruz. Yeni projelerinizde başarılar dileriz!