Python ve OpenCV Kullanarak Barkod Okuyucu Uygulaması

0 42

Bu yazımızda Python ve OpenCV kullanarak barkod okuyucu uygulaması geliştireceğiz. Daha önce Python kullanarak karekod (qrcode) oluşturma ve karekod okuma uygulamaları geliştirmiştik. Bu yazımız da tüm ticari ürünlerin üzerinde olan barkodların okuma işlemini Python ve  OpenCv kullanarak nasıl yapabileceğimizi anlatacağız.

Barkod Nedir?

 

Barkodçubuk kod ya da çizgi im, verilerin görsel özellikli makinelerin okuyabilmesi için çeşitli kodlama yöntemleriyle sunulmasıdır.

Orijinal olarak barkod, veriyi paralel çizgilerin genişlikleri ve boşlukları arasında saklardı, ama günümüzde noktasal şekiller, iç içe daireler ve görüntü içinde gizli şekiller gibi farklı türlerde de görülebiliyorlar.

barkod örneği

Üstte Code-128 tekniğiyle kodlanmış bir barkod örneği görüyorsunuz. Code-128 tekniğiyle kodlanmış barkodlara yazılar kodlanabilirken, Code-11, Code-39 gibi daha eski tekniklerde sadece sayısal bilgiler saklanabilir.

Barkod okuyucu Uygulaması İçin Gerekli Kütüphaneler

Bu yazımızda , bir görüntüdeki barkodun nasıl algılanacağını ve kodunun nasıl çözüleceğini kontrol edeceğiz. Bunun için pyzbar kütüphanesini kullanacağız. Ayrıca görüntüyü dosyasını okuyup, ekranda göstermek için OpenCV kütüphanesini kullanacağız.

Pyzbar kütüphanesini kolayca kurmak için aşağıdaki komutu kullanabilirsiniz:

pip install pyzbar

Bu eğitim Python’un 3.7.2 sürümü ile test edilmiştir.

Barkod Uygulaması Kodları

Cv2 modülünü içe aktararak başlayacağız , böylece test görüntümüzü numpy dizi olarak okuyabiliriz . Ayrıca, kod çözme işlevini barkodu algılamak ve kodunu çözmek için kullanacağımız pyzbar modülünden de içe aktaracağız .

import cv2
from pyzbar.pyzbar import decode

Bundan sonra dosya sisteminden test görüntüsünü okuyacağız. Bunu, imread fonksiyonuna bir çağrı ile yapacağız ve dosya yoluna sahip bir dize girdi olarak geçeceğiz .

Buradaki siteden ücretsiz olarak online barkod oluşturmak için kullanabilirsiniz. Bu makalemiz için “Jn7.net” verisiyle bir barkod oluşturduk. Uygulamamızı test etmek için alttaki barkod görüntüsünü kullanabilirsiniz.

barkod örneği

İmread fonksiyonu, çıktı olarak, görüntüyü sayısal ndarray olarak döndürür .

image = cv2.imread('barcode.jpg')

Ardından, görüntüdeki barkodun kodunu çözmek için içe aktardığımız kod decode fonksiyonunu çağırmamız ve görüntüyü girdi olarak geçmemiz gerekir.

Bu işlev, Decoded sınıfında bir dizi nesne döndürür . Dizinin her öğesi algılanan bir barkodu temsil eder. Bu, kütüphaneyi birden çok barkodlu görüntülerle kullanabileceğimiz anlamına gelir.

detectedBarcodes = decode(image)

Bizim durumumuzda, resmimizin sadece bir barkodu var, bu nedenle bu dizinin sadece tek bir öğe içermesi bekleniyor. Bununla birlikte, daha sağlam bir kod için, bir for in döngüsü ile dizi üzerinden tekrarlayacağız , yani bir, birden fazla veya hiç barkod bulunmadığında çalışacaktır.

for barcode in detectedBarcodes:
     # handling each barcode

Barkod nesnemizden elde edebileceğimiz özelliklerden birine rect denir . Barkodun karşılık geldiği çokgenin sınırlayıcı kutusunu içerir.

Bu basit örnek için, barkodun herhangi bir dönüşü olmadığı ve bu nedenle bir dikdörtgen oluşturduğu bir görüntü kullanıyoruz. Bunu göz önünde bulundurarak, barkodun etrafına bir şekil çizmek için rect özelliğini kullanabiliriz .

Bununla birlikte, daha karmaşık senaryolar için, Barcode nesnesi , barkodun etrafında çokgeni oluşturan noktaları içeren çokgen özelliğine de sahiptir . Burada barkod döndürüldüğünde rect özelliğinin çokgene nasıl davrandığını kontrol edebilirsiniz .

Burada rect niteliğini kullanacağımızdan, onu analiz edeceğiz. Temel olarak, dikdörtgenin sol üst köşesinin x ve y koordinatlarını, genişliğini ve yüksekliğini içeren bir sınıftır . Bunları 4 farklı değişken olarak elde edeceğiz.

(x, y, w, h) = barcode.rect

Bu koordinatları kullanarak , cv2 modülünden dikdörtgen işlevini çağırarak görüntüdeki dikdörtgeni çizeceğiz .

cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 5)

Ayrıca, kodu çözülen içeriği barkoddan ( veri özelliği) ve barkod türünü ( tür özelliği) yazdıracağız . Test görüntüsünde Kod 128 barkodu kullandım .

 

print(barcode.data)
print(barcode.type)

Dolu döngü aşağıda görülebilir.

for barcode in detectedBarcodes:
     
    (x, y, w, h) = barcode.rect
    cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 5)
  
    print(barcode.data)
    print(barcode.type)

Sonlandırmak için, zaten barkodun çevresinde dikdörtgen bulunan görüntüyü bir pencerede görüntüleriz.

cv2.imshow("Image", image)
  
cv2.waitKey(0)
cv2.destroyAllWindows()

Son kod aşağıda görülebilir.

import cv2
from pyzbar.pyzbar import decode




image = cv2.imread('C:/Users/N/Desktop/barcode.png')


detectedBarcodes = decode(image)


for barcode in detectedBarcodes:
     
    (x, y, w, h) = barcode.rect
    cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 5)
  
    print(barcode.data)
    print(barcode.type)




cv2.imshow("Image", image)
  
cv2.waitKey(0)
cv2.destroyAllWindows()

Kodu test etme

Önceki kodu test etmek için, sadece seçtiğiniz bir ortamda çalıştırın. Bir Python IDE olan IDLE’yi kullandım.

Şekil 2’ye benzer bir sonuç elde etmelisiniz. Görüldüğü gibi görüntüde barkod tespit edildi ve doğru verilerin kodu çözüldü ve piton kabuğuna yazdırıldı.

Sitemizde Python ve OpenCV kullanarak hazırladığımız birçok ders içeriği bulunmaktadır.

Yorumlarınızı bekliyoruz.

Cevap bırakın

E-posta hesabınız yayımlanmayacak.

Bu web sitesi deneyiminizi geliştirmek için çerezleri kullanır. Bununla iyi olduğunuzu varsayacağız, ancak isterseniz vazgeçebilirsiniz. Kabul etmek Mesajları Oku