Bu yazımız da Python ve OpenCV görüntü işleme kütüphanesini kullanarak QRCode yani Karekod okuma, tespit etme ve içerdiği bilgileri okumayı anlatacağız.
Bir önceki yazımız da Python ile nasıl kendi QRCode (karekod) oluşturabileceğinizi anlatmıştık. Önceki yazımızı da mutlaka inceleyin.
İçerik Tablosu
Python ve OpenCV İle Karekod QR Code Tespit Etme ve Okuma
Resimden Qr Kod Tespit Etme
CV2 modülünü içe aktararak başlayacağız .
import cv2
Bizim kullanacağımız karekodumuz alttaki içerisinde “https://jn7.net” bilgisi içeren örneği kullanabilirsiniz.
Bundan sonra görüntüyü cv2 modülünden imread fonksiyonunu kullanacağız. Dosya yolunu tam olarak belirtmeniz gerekmektedir. Eğer kod ile aynı klasördeyse alttaki gibi kullanabilirsiniz.
image = cv2.imread('jn7.net-qr-code.png')
Bundan sonra , QR Kodunu tespit etmek ve çözmek için kullanacağımız QRCodeDetector sınıfında bir nesne oluşturacağız .
qrCodeDetector = cv2.Q
Bunu takiben , QR Kodunu tespit etmek istediğimiz görüntüyü girdi olarak geçirerek bu nesnedeki DetAndDecode yöntemini çağıracağız .
Bu yöntem, bir dizi değeri aşağıdaki sırayla döndürür:
- Çözülmüş metin [1]. QR Kodu bulunamazsa boş bir dizedir.
- Bulunan QR kodunun köşe noktalarının çıktı dizisi. Bulunmazsa boş olacaktır [1].
- Rektifiye edilmiş ve ikili hale getirilmiş QR Kodunu içeren isteğe bağlı çıktı görüntüsü [1]. Bu derste bundan faydalanmayacağız.
decodedText, points, _ = qrCodeDetector.detectAndDecode(image)
Not: Kullandığımız “_” işareti, kullanmayacağız, üçüncü dönen değeri görmezden için basit kuralıdır.
Resimde QR Kodunun bulunmadığı durumlar olabileceğinden, iade edilen noktaları kontrol edeceğiz. Nokta yoksa, görüntüde QR Kodu bulunamadı demektir.
if points is not None: # Karekodun tespit edildiğinde yapılacak işlemler else: print("QR kod tespit edilemedi.")
Bir QR Kodunun tespit edildiğini varsayarsak, daha sonra detectAndDecode yöntemi tarafından döndürülen köşe dizisini kullanarak, onu sınırlandıran çizgiler çizeriz .
Sadece dizinin uzunluğunu elde edeceğiz ve her bir köşe tarafından tekrarlayacağız, hemen sonraya bağlayacağız. QR Kodunun etrafındaki şekli kapatmak için dizideki son tepe noktasının ilkiyle bağlanması gerektiğini unutmayın.
openCV ile Karekodun Çerçevesini Tespit Etme
Cv2 modülünden line fonksiyonunu çağırarak bir görüntüde çizgi çizebiliriz .
Kısacası, daha önce de belirtildiği gibi , aşağıdaki girişleri geçen line fonksiyonunu çağırıyoruz :
- image : çizgiyi çizeceğimiz görüntü.
- nokta 1 : çizginin ilk noktası. X ve y koordinatlarına sahip bir demet olarak belirtilir.
- nokta 2 : çizginin ikinci noktası. X ve y koordinatlarına sahip bir demet olarak belirtilir.
- renk : çizginin rengi. Bu, BGR formatında 3 renk içeren bir demet olarak tanımlanır. Maviye ayarlayacağız.
- kalınlık : çizginin piksel cinsinden kalınlığı. 5 piksel olarak ayarlayacağız.
Noktaları vertices dizisinden geçirirken bunları tuple’lara dönüştürmemiz gerektiğini unutmayın.
nrOfPoints = len(points) for i in range(nrOfPoints): nextPointIndex = (i+1) % nrOfPoints cv2.line(image, tuple(points[i][0]), tuple(points[nextPointIndex][0]), (255,0,0), 5)
Bundan sonra kodu çözülen metni QR Kodundan yazdıracağız ve ardından görüntüyü göstereceğiz. Görüntü şimdi QR Kodunu şekli etrafında mavi çizgilerle göstermelidir.
print(decodedText) cv2.imshow("Image", image) cv2.waitKey(0) cv2.destroyAllWindows()
Kodumuzun tamamı alttaki gibi olacaktır.
Resimden Qr Kod Tespit Etme Kodu
import cv2 image = cv2.imread('C:/Users/N/Desktop/testQRCode.png') qrCodeDetector = cv2.QRCodeDetector() decodedText, points, _ = qrCodeDetector.detectAndDecode(image) if points is not None: nrOfPoints = len(points) for i in range(nrOfPoints): nextPointIndex = (i+1) % nrOfPoints cv2.line(image, tuple(points[i][0]), tuple(points[nextPointIndex][0]), (255,0,0), 5) print(decodedText) cv2.imshow("Image", image) cv2.waitKey(0) cv2.destroyAllWindows() else: print("QR code not detected")
WebCam Kullanarak QR Kod Çözme
Bu işlemi webcam’dan veya telefon kamerasından aldığımız görüntüyü kullanarak karekod tespit etme ve tespit edilen karekodu çözümleme işlemi için kullanabileceğiniz örnek kodumuzda alttaki gibidir.
Bu kod sayesinde gelen görüntüyü canlı olarak tarar ve ekrandaki karekodu tespit edip, çözümlemesini yapıp ekrana bilgiyi yazdırır. OpenCV ile ekrana yazı yazdırma ile ilgili yazımızda bu işlem hakkında daha fazla bilgi edinebilirsiniz.
import cv2 c=cv2.VideoCapture(1) qr=cv2.QRCodeDetector() while True: _,frame=c.read() decodedText, points, _ = qr.detectAndDecode(frame) if points is not None: nrOfPoints = len(points) for i in range(nrOfPoints): nextPointIndex = (i + 1) % nrOfPoints cv2.line(frame, tuple(points[i][0]), tuple(points[nextPointIndex][0]), (255, 0, 0), 5) font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(frame, decodedText, (140 , 50), font, .5, (0, 0, 0), 1, cv2.LINE_AA) print(decodedText) cv2.imshow("Cap", frame) if (cv2.waitKey(1)&0xff==27): break c.release()
OpenCV ve Python İle Karekod Okuma Sonuç
Diğer OpenCV ve Python Uygulama Örneklerimiz
- OpenCV Nedir?
- Python ve OpenCV ile Video Oynatma
- Python ve OpenCV ile Videoyu Renklerine Ayırma
- Python ve OpenCV İle Video Kaydetme
- Python ve OpenCV ile Resim İşlemlerine Giriş
- Python ve OpenCV Kullanarak Yüz Tanıma Uygulaması
- Python ve OpenCV Kullanarak Bilgisayar Kamerasından Görüntü Almak
- Pyton ve OpenCV Kullanarak Kenar Algılama Uygulaması
- Python ve OpenCV Kullanarak Resimlere Elastik Efekti Verme
- Python ve OpenCV Kullanarak SuperPixel İşlemi Uygulaması
- Python Ve OpenCv İle WebCam’den Aldığınız Görüntüyü İşlemek
- Python Ve OpenCV Ile Resimlerinizi JSON Formatına Çevirin
- Python Ve OpenCV Ile Youtube Videolarını Stream Yapma
- Python Ve OpenCV Kullanarak Bir Resmin Tüm Piksellerine Ulaşmak
- Python ve OpenCV kullanarak komik aynalar uygulaması
- Python Ve OpenCV Ile Basit Şekil Algılama Uygulaması
- Python Ve OpenCV Kullanarak Görüntülere Gerçek Zamanlı Metin Yazma
- Python Ve OpenCV Kullanarak Belli Bir Nokta Ile Hareket Arası Mesafe Ölçümü
Ayrıca Python öğrenmek isteyenler içinde Hazırladığımız Python derslerine de göz atabilirsiniz. programlama bilginiz geliştirmek ve farklı örnekler çözmek içinde 100 Algoritma sorusuna göz atabilirsiniz.
Yorumlarınız bekliyoruz.