استفاده از Pyzbar برای خواندن QR Code در پایتون

استفاده از Pyzbar برای خواندن QR Code در پایتون

در دنیای امروز، QR Code ها به ابزاری رایج برای ذخیره و انتقال اطلاعات تبدیل شده‌اند. از بازاریابی و تبلیغات گرفته تا پرداخت‌های دیجیتال و اشتراک‌گذاری اطلاعات تماس، QR Code ها کاربردهای فراوانی دارند. پایتون، به عنوان یک زبان برنامه‌نویسی قدرتمند و انعطاف‌پذیر، ابزارهای متعددی برای کار با QR Code ها ارائه می‌دهد. یکی از این ابزارها، کتابخانه Pyzbar است. این مقاله به بررسی جامع کتابخانه Pyzbar، نحوه نصب و استفاده از آن، و همچنین مثال‌های عملی برای خواندن QR Code ها در پایتون می‌پردازد. این مقاله در دسته ‘کتابخانه‌های خاص و کاربردی’ در آموزش پایتون قرار می‌گیرد.

مقدمه‌ای بر Pyzbar

Pyzbar یک کتابخانه پایتون است که برای خواندن بارکدها و QR Code ها از تصاویر استفاده می‌شود. این کتابخانه بر پایه کتابخانه ZBar، یک کتابخانه متن‌باز برای خواندن بارکدها، ساخته شده است. Pyzbar به شما امکان می‌دهد تا به راحتی QR Code ها را از تصاویر مختلف، از جمله تصاویر گرفته شده از دوربین، فایل‌های تصویری ذخیره شده، و حتی تصاویر موجود در وب‌سایت‌ها، خوانده و اطلاعات موجود در آن‌ها را استخراج کنید.

پیش‌نیازها

قبل از شروع کار با Pyzbar، باید پیش‌نیازهای زیر را نصب داشته باشید:

  • پایتون: اطمینان حاصل کنید که پایتون بر روی سیستم شما نصب شده است.
  • PIL (Pillow): کتابخانه Pillow برای کار با تصاویر در پایتون ضروری است.
  • ZBar: کتابخانه ZBar موتور اصلی خواندن بارکدها و QR Code ها در Pyzbar است.

نصب Pyzbar و پیش‌نیازها

برای نصب Pyzbar و پیش‌نیازهای آن، می‌توانید از pip، مدیر بسته پایتون، استفاده کنید. دستورات زیر را در ترمینال یا خط فرمان خود اجرا کنید:

pip install Pillow
pip install pyzbar

نصب ZBar بسته به سیستم عامل شما متفاوت است:

  • ویندوز: نصب ZBar در ویندوز کمی پیچیده‌تر است. می‌توانید از بسته‌های از پیش ساخته شده ZBar برای ویندوز استفاده کنید یا آن را از طریق مدیر بسته Chocolatey نصب کنید.
  • لینوکس: در اکثر توزیع‌های لینوکس، می‌توانید ZBar را با استفاده از مدیر بسته توزیع خود نصب کنید. به عنوان مثال، در Debian/Ubuntu:
            sudo apt-get install libzbar0
            
  • macOS: در macOS، می‌توانید ZBar را با استفاده از Homebrew نصب کنید:
            brew install zbar
            

نحوه استفاده از Pyzbar

پس از نصب Pyzbar و پیش‌نیازهای آن، می‌توانید از آن برای خواندن QR Code ها در پایتون استفاده کنید. در اینجا یک مثال ساده آورده شده است:

from PIL import Image
from pyzbar.pyzbar import decode

def read_qr_code(image_path):
    try:
        img = Image.open(image_path)
        decoded_objects = decode(img)

        if decoded_objects:
            for obj in decoded_objects:
                print("نوع QR Code:", obj.type)
                print("داده‌های QR Code:", obj.data.decode('utf-8'))
                print("موقعیت QR Code:", obj.rect)
        else:
            print("QR Code در تصویر یافت نشد.")

    except FileNotFoundError:
        print("فایل تصویر یافت نشد.")
    except Exception as e:
        print("خطا در خواندن QR Code:", e)

# مثال استفاده
image_path = 'qrcode.png'  # مسیر تصویر QR Code
read_qr_code(image_path)

در این مثال، ابتدا کتابخانه‌های PIL و pyzbar را وارد می‌کنیم. سپس، تابع read_qr_code را تعریف می‌کنیم که مسیر تصویر QR Code را به عنوان ورودی می‌گیرد. در داخل این تابع، ابتدا تصویر را با استفاده از Image.open باز می‌کنیم. سپس، از تابع decode برای خواندن QR Code ها از تصویر استفاده می‌کنیم. تابع decode یک لیست از اشیاء Decoded را برمی‌گرداند که هر کدام شامل اطلاعات مربوط به یک QR Code هستند. در نهایت، اطلاعات مربوط به هر QR Code را چاپ می‌کنیم.

توضیح پارامترهای خروجی decode

تابع decode اطلاعات مختلفی را در مورد QR Code خوانده شده برمی‌گرداند. در مثال بالا، ما از پارامترهای زیر استفاده کردیم:

  • obj.type: نوع QR Code را نشان می‌دهد.
  • obj.data: داده‌های رمزگذاری شده در QR Code را به صورت بایت نشان می‌دهد. برای تبدیل آن به رشته، از decode('utf-8') استفاده می‌کنیم.
  • obj.rect: موقعیت QR Code در تصویر را به صورت یک مستطیل نشان می‌دهد.

خواندن QR Code از دوربین

Pyzbar همچنین به شما امکان می‌دهد تا QR Code ها را از دوربین بخوانید. برای این کار، می‌توانید از کتابخانه OpenCV استفاده کنید. در اینجا یک مثال آورده شده است:

import cv2
from pyzbar.pyzbar import decode

def read_qr_code_from_camera():
    cap = cv2.VideoCapture(0)  # 0 نشان دهنده دوربین پیش‌فرض است

    while True:
        ret, frame = cap.read()
        if not ret:
            break

        decoded_objects = decode(frame)

        if decoded_objects:
            for obj in decoded_objects:
                print("نوع QR Code:", obj.type)
                print("داده‌های QR Code:", obj.data.decode('utf-8'))
                cv2.rectangle(frame, (obj.rect.left, obj.rect.top), (obj.rect.left + obj.rect.width, obj.rect.top + obj.rect.height), (0, 255, 0), 2)

        cv2.imshow('QR Code Scanner', frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()

# مثال استفاده
read_qr_code_from_camera()

در این مثال، ابتدا دوربین را با استفاده از cv2.VideoCapture(0) باز می‌کنیم. سپس، در یک حلقه بی‌نهایت، فریم‌های دوربین را می‌خوانیم و از تابع decode برای خواندن QR Code ها از هر فریم استفاده می‌کنیم. اگر QR Code ای یافت شد، اطلاعات مربوط به آن را چاپ می‌کنیم و یک مستطیل سبز رنگ دور QR Code رسم می‌کنیم. در نهایت، فریم را نمایش می‌دهیم و منتظر می‌مانیم تا کاربر کلید ‘q’ را فشار دهد تا برنامه بسته شود.

نکات مهم

  • کیفیت تصویر: کیفیت تصویر تأثیر زیادی بر دقت خواندن QR Code ها دارد. سعی کنید از تصاویر با کیفیت بالا استفاده کنید.
  • نورپردازی: نورپردازی مناسب نیز برای خواندن QR Code ها ضروری است. از نور کافی و یکنواخت استفاده کنید.
  • زاویه دید: زاویه دید دوربین نسبت به QR Code نیز می‌تواند بر دقت خواندن تأثیر بگذارد. سعی کنید QR Code را به طور مستقیم و بدون زاویه بخوانید.
  • اندازه QR Code: اندازه QR Code نیز مهم است. QR Code های کوچک ممکن است به سختی خوانده شوند.

نتیجه‌گیری

Pyzbar یک کتابخانه قدرتمند و آسان برای استفاده برای خواندن QR Code ها در پایتون است. با استفاده از این کتابخانه، می‌توانید به راحتی QR Code ها را از تصاویر مختلف، از جمله تصاویر گرفته شده از دوربین، فایل‌های تصویری ذخیره شده، و تصاویر موجود در وب‌سایت‌ها، خوانده و اطلاعات موجود در آن‌ها را استخراج کنید. با رعایت نکات مهم ذکر شده، می‌توانید دقت خواندن QR Code ها را افزایش دهید و از این کتابخانه به طور موثرتری استفاده کنید.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *