FA-TOOLS — Header Component

کدهای آماده برای خواندن QR Code با پایتون

رفیق برنامه‌نویس! اگه دنبال یه راه سریع و بی‌دردسر برای خوندن QR Code با پایتون هستی، جای درستی اومدی. تو این مقاله، قراره با هم از صفر تا صدِ این ماجرا رو بررسی کنیم؛ از نصب کتابخونه‌ها گرفته تا نوشتن کدهای تمیز و کارآمد برای خوندن QR Code از روی عکس یا حتی به صورت زنده از وب‌کم. آماده‌ایم که دست به کار شیم و کدها رو توی کمترین زمان اجرا کنیم؟ راستی، اگه دنبال ابزارهای خفن پایتونی و اسنیپت‌های کاربردی هستی، حتماً یه سر به صفحه کدهای آماده پایتون ما بزن تا از کلی کد بدردبخور دیگه هم باخبر بشی!

📞 برای مشاوره یا پشتیبانی تماس بگیر: 09202232789

🗺️ نقشه راه سریع: QR Code خوانی با پایتون در یک نگاه

کدهای آماده برای خواندن QR Code با پایتون — تصویر 1

🛠️ پیش‌نیازها

  • ✅ پایتون (Python 3.x)
  • ✅ کتابخانه‌های `pyzbar`, `Pillow`, `OpenCV`
  • ✅ خط فرمان یا ترمینال

📸 از تصویر ثابت

  • 1️⃣ نصب `pip install pyzbar Pillow`
  • 2️⃣ ایمپورت: `from PIL import Image`, `from pyzbar.pyzbar import decode`
  • 3️⃣ باز کردن تصویر: `Image.open(‘your_qr.png’)`
  • 4️⃣ دیکد کردن: `decode(image)`

📹 از وب‌کم (لحظه‌ای)

  • 1️⃣ نصب `pip install opencv-python pyzbar`
  • 2️⃣ ایمپورت: `import cv2`, `from pyzbar.pyzbar import decode`
  • 3️⃣ فعال کردن وب‌کم: `cv2.VideoCapture(0)`
  • 4️⃣ حلقه پردازش فریم‌ها و دیکد

همین سه قدم ساده کافیه تا QR Code رو به راحتی بخونی! بیا بریم سراغ جزئیات بیشتر.

چرا اصلاً سراغ QR Code خوانی با پایتون بریم؟

کدهای آماده برای خواندن QR Code با پایتون — تصویر 2

داستان این QR Code ها از کجا شروع شد؟ خب، این مربع‌های سیاه و سفید کوچیک، یه جور درگاه اطلاعاتی هستن. از لینک سایت و اطلاعات تماس گرفته تا تنظیمات وای‌فای و حتی پرداخت‌های بانکی، همه رو می‌تونی توشون جا بدی. حالا اگه بخوای یه سیستم هوشمند بسازی که بتونه این اطلاعات رو بخونه، پایتون یکی از بهترین انتخاب‌هاست. چرا؟ چون:

  • سادگی و سرعت: با چند خط کد پایتون می‌تونی یه QR Code رو بخونی، بدون اینکه درگیر پیچیدگی‌های زیاد بشی.
  • کتابخانه‌های قدرتمند: پایتون کلی کتابخونه آماده و رایگان داره که کار رو برات حسابی راحت می‌کنه (مثل `pyzbar` و `OpenCV`).
  • انعطاف‌پذیری بالا: چه بخوای از یه عکس ثابت بخونی، چه از وب‌کم یا حتی یه فایل PDF، پایتون راه‌حل داره.
  • جامعه کاربری بزرگ: هر مشکلی که برات پیش بیاد، احتمالاً قبلاً کسی بهش برخورده و راه حلش رو تو فروم‌ها پیدا می‌کنی.

پس اگه دنبال یه ابزار قوی، سریع و انعطاف‌پذیر هستی، پایتون دوست خوبته. بیایید بریم سراغ بخش هیجان‌انگیز قضیه: کدنویسی!

پیش‌نیازها: چی لازم داری تا شروع کنی؟

کدهای آماده برای خواندن QR Code با پایتون — تصویر 3

قبل از هرچیزی، باید مطمئن بشیم که ابزارهای لازم رو روی سیستم‌مون نصب کردیم. نگران نباش، کار سختی نیست و سریع تموم میشه. ما از دو کتابخونه اصلی استفاده می‌کنیم: `pyzbar` برای دیکد کردن بارکد و QR Code، و `Pillow` یا `OpenCV` برای کار با تصاویر.

نصب کتابخانه‌های اصلی (pyzbar, Pillow, OpenCV)

برای نصب این کتابخانه‌ها، کافیه ترمینال یا خط فرمان (CMD) رو باز کنی و دستورات زیر رو وارد کنی:

pip install pyzbar Pillow opencv-python
    

ممکنه موقع نصب `pyzbar` به مشکل بربخوری که میگه `zbar` پیدا نشد. این مشکل بیشتر تو ویندوز پیش میاد و راه حلش اینه که کتابخانه `zbar` رو به صورت جداگانه نصب کنی. می‌تونی از سایت رسمی zbar فایل نصب رو دانلود و نصب کنی یا تو لینوکس با `sudo apt-get install libzbar0` این کار رو انجام بدی. بعد از اون، دوباره دستور `pip install pyzbar` رو بزن تا مشکلت برطرفف شه.

💡 تفاوت و کاربرد کتابخانه‌ها در یک نگاه
کتابخانه کاربرد اصلی
pyzbar پردازش و دیکد کردن QR Code و انواع بارکد
Pillow (PIL) باز کردن و دستکاری تصاویر (برای QR Codeهای ثابت)
OpenCV-Python پردازش تصویر پیشرفته، کار با وب‌کم و ویدئو (برای QR Codeهای لحظه‌ای)

خواندن QR Code از یک تصویر ثابت (فایل)

خب، حالا که همه چیز رو نصب کردی، بریم سراغ اولین مثال کاربردی: خوندن QR Code از روی یه فایل تصویری. این می‌تونه یه فایل PNG، JPG یا هر فرمت تصویری دیگه باشه. برای این کار، ما از `Pillow` برای باز کردن تصویر و از `pyzbar` برای دیکد کردن استفاده می‌کنیم.

با استفاده از Pillow و pyzbar

اول از همه، یه فایل QR Code (مثلاً با اسم my_qrcode.png) رو توی همون مسیری که فایل پایتونت رو می‌سازی، قرار بده. بعدش این کد رو اجرا کن:

Python Code
from PIL import Image
from pyzbar.pyzbar import decode

# اسم فایل تصویری QR Code شما
image_path = "my_qrcode.png"

# باز کردن تصویر با Pillow
try:
    img = Image.open(image_path)
except FileNotFoundError:
    print(f"خطا: فایل '{image_path}' پیدا نشد. مطمئن بشو که فایل رو توی مسیر درست گذاشتی.")
    exit()

# دیکد کردن QR Code از تصویر
qr_codes = decode(img)

# نمایش محتوای QR Codeهای یافت شده
if qr_codes:
    print("QR Code(های) پیدا شده:")
    for qr in qr_codes:
        print(f" نوع: {qr.type}")
        print(f" داده: {qr.data.decode('utf-8')}") # تبدیل بایت به رشته (UTF-8)
        print(f" موقعیت: {qr.polygon}") # مختصات گوشه‌های QR Code
        print("--------------------")
else:
    print("QR Code در تصویر پیدا نشد.")
    

به همین سادگی! کد بالا فایل تصویری رو باز می‌کنه، دنبال QR Code می‌گرده و اگه پیدا کرد، محتواش رو برات چاپ می‌کنه. اگه چندین QR Code تو یه عکس باشه، همشون رو نشون میده. اگه نیاز به کدهای بیشتر تو حوزه پایتون داری، به بخش اسنیپت‌های پایتون ما یه سر بزن.

خواندن QR Code از وب‌کم در لحظه (Real-time)

این بخش هیجان‌انگیزترین قسمت کاره! اگه می‌خوای یه اسکنر QR Code زنده با پایتون بسازی که از وب‌کم استفاده کنه، `OpenCV` یار توئه. این کتابخونه عالی، قابلیت کار با وب‌کم و پردازش فریم‌های ویدئویی رو فراهم می‌کنه.

با استفاده از OpenCV و pyzbar

برای این کار، `opencv-python` رو قبلاً نصب کردیم. حالا فقط کافیه این کد رو اجرا کنی. مطمئن باش که وب‌کم روی سیستمت فعال و قابل دسترسه.

Python Code
import cv2
from pyzbar.pyzbar import decode
import time

# فعال کردن وب‌کم (معمولاً 0 برای وب‌کم داخلی است، 1 برای وب‌کم خارجی و غیره)
cap = cv2.VideoCapture(0)

if not cap.isOpened():
    print("خطا: وب‌کم شناسایی نشد یا قابل دسترسی نیست. مطمئن بشید که درایورها نصبه و وب‌کم آزاده.")
    exit()

print("اسکنر QR Code فعال شد. QR Code رو جلوی وب‌کم نگه دار (برای خروج 'q' رو بزن).")

last_scanned_data = ""
last_scan_time = 0
SCAN_COOLDOWN = 2 # زمان بر حسب ثانیه برای جلوگیری از اسکن مکرر یک QR Code

while True:
    ret, frame = cap.read() # خواندن فریم به فریم از وب‌کم
    if not ret:
        print("فریم دریافت نشد، خروج...")
        break

    gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # تبدیل به سیاه و سفید برای پردازش بهتر
    qr_codes = decode(gray_frame)

    for qr in qr_codes:
        data = qr.data.decode('utf-8')
        current_time = time.time()

        if data != last_scanned_data or (data == last_scanned_data and current_time - last_scan_time > SCAN_COOLDOWN):
            print(f"QR Code پیدا شد: {data}")
            last_scanned_data = data
            last_scan_time = current_time

            # کشیدن یک کادر دور QR Code
            (x, y, w, h) = qr.rect
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
            cv2.putText(frame, data, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)

    # نمایش فریم در یک پنجره
    cv2.imshow("QR Code Scanner", frame)

    # برای خروج کلید 'q' را فشار دهید
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# آزاد کردن منابع و بستن پنجره‌ها
cap.release()
cv2.destroyAllWindows()
    

این کد یه پنجره نمایش میده که تصویر وب‌کم رو نشون میده. هر وقت QR Codeی جلوی دوربین قرار بگیره، محتواش رو تو ترمینال چاپ می‌کنه و یه کادر سبز دورش می‌کشه. با زدن کلید ‘q’ هم برنامه متوقف میشه. این برنامه جوری نوشته شده که یک QR Code رو هر ۲ ثانیه یکبار نشون بده تا از نمایش تکراری و زیاد جلوگیری کنه.

تکنیک‌های پیشرفته‌تر و نکات کلیدی

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

اسکن چند QR Code در یک تصویر

همونطور که دیدی، تو کد مثال اول (خواندن از تصویر ثابت)، تابع `decode` از `pyzbar` خودش قابلیت این رو داره که همه QR Codeهای موجود تو یک تصویر رو برات لیست کنه. متغیر `qr_codes` در واقع لیستی از همه QR Codeهای پیدا شده هست. کافیه یه حلقه `for` روش بندازی تا اطلاعات تک تکشون رو استخراج کنی. این ویژگی تو سناریوهایی که چندین بارکد یا QR Code توی یه سند یا روی یک محصول قرار دارن، خیلی به درد می‌خوره.

افزایش دقت اسکن (پردازش تصویر اولیه)

گاهی اوقات تصاویر ممکنه تار، کج یا با نور کم باشن که باعث میشه `pyzbar` نتونه QR Code رو درست تشخیص بده. اینجا `OpenCV` به دادت می‌رسه!

  • تبدیل به خاکستری (Grayscale): این کار معمولاً اولین قدمه و تو کدهای ما هم هست. کمک می‌کنه تا نویزهای رنگی حذف بشن.
  • آستانه‌گذاری (Thresholding): با استفاده از تابع cv2.threshold() می‌تونی تصویر رو به سیاه و سفید خالص تبدیل کنی. این کار کنتراست رو بالا می‌بره و لبه‌های QR Code رو واضح‌تر می‌کنه.
  • اعمال فیلتر (Blurring/Sharpening): اگه تصویر نویز زیاد یا تار باشه، می‌تونی از فیلترهای گوسی (cv2.GaussianBlur()) برای کاهش نویز یا فیلترهای شارپ کردن برای واضح‌تر کردن تصویر استفاده کنی.
  • اصلاح پرسپکتیو (Perspective Correction): اگه QR Code با زاویه گرفته شده باشه، `OpenCV` می‌تونه با توابع تبدیل پرسپکتیو (cv2.warpPerspective()) اون رو صاف کنه تا `pyzbar` بهتر بخونتش.

این تکنیک‌ها، بخصوص برای تصاویر با کیفیت پایین، می‌تونن دقت اسکن رو به شکل چشم‌گیری بالا ببرن. اگه دوست داری در مورد پردازش تصویر با پایتون بیشتر بدونی، می‌تونی به صفحه اصلی fa-tools.ir مراجعه کنی و مقالات مرتبط رو بخونی.

عیب‌یابی سریع: مشکلات رایج و راه‌حل‌ها

هیچ پروژه‌ای بدون مشکل نیست! ممکنه موقع اجرای کدها با یه سری ارورها یا رفتارهای غیرمنتظره مواجع بشی. نگران نباش، این بخش برای همین نوشته شده تا با هم راه حل‌های سریع رو پیدا کنیم:

  1. خطای “zbar not found” یا “ImportError: cannot import name ‘decode’ from ‘pyzbar.pyzbar'”:

    مشکل: این خطا نشون میده که کتابخانه اصلی `zbar` (که `pyzbar` بهش نیاز داره) روی سیستمت نصب نیست یا درست پیکربندی نشده.

    راه‌حل:

    • ویندوز: باید `zbar` رو از سایت SourceForge دانلود و نصب کنی (نسخه 64 بیتی اگه سیستمت 64 بیتیه). بعد از نصب، سیستم رو ری‌استارت کن و دوباره `pip install pyzbar` رو بزن.
    • لینوکس (دبیان/اوبونتو): `sudo apt-get update && sudo apt-get install libzbar0`
    • مک: `brew install zbar` (اگه Homebrew نصب داری).
  2. QR Code تشخیص داده نمیشه (در تصاویر یا وب‌کم):

    مشکل: برنامه QR Code رو پیدا نمی‌کنه، حتی اگه جلوی دوربین یا تو تصویر باشه.

    راه‌حل:

    • کیفیت تصویر: مطمئن شو QR Code واضحه، تیره و تار نیست و نور کافی داره. تصاویر با رزولوشن پایین یا زاویه نامناسب باعث مشکل میشن.
    • اندازه QR Code: QR Code خیلی کوچک یا خیلی بزرگ ممکنه به خوبی اسکن نشه. سعی کن اندازه مناسبی داشته باشه.
    • پردازش تصویر: اگه از وب‌کم استفاده می‌کنی، امتحان کن فریم رو قبل از `decode` کمی پردازش کنی (مثلاً `gray_frame = cv2.equalizeHist(gray_frame)` برای بهبود کنتراست).
    • نویز: نویز پس‌زمینه زیاد می‌تونه کار اسکن رو سخت کنه. سعی کن پس‌زمینه ساده‌ای داشته باشه.
  3. خطای “Permission denied” یا وب‌کم باز نمیشه:

    مشکل: برنامه اجازه دسترسی به وب‌کم رو نداره یا وب‌کم توسط برنامه دیگه‌ای اشغال شده.

    راه‌حل:

    • بستن سایر برنامه‌ها: مطمئن شو هیچ برنامه دیگه‌ای از وب‌کم استفاده نمی‌کنه (مثل Skype، Zoom، مرورگرها).
    • مجوزها: تو تنظیمات سیستم‌عاملت (ویندوز یا مک) چک کن که پایتون یا IDE که استفاده می‌کنی، اجازه دسترسی به دوربین رو داشته باشه.
    • شماره وب‌کم: اگه چندتا وب‌کم داری، `cv2.VideoCapture(0)` رو به `cv2.VideoCapture(1)` یا `(2)` تغییر بده و امتحان کن.

اگه بازم به مشکل خوردی، کافیه ارور دقیق رو تو گوگل سرچ کنی. معمولاً انجمن‌های برنامه‌نویسی مثل Stack Overflow جوابگو هستن. گاهی اوقات بروزرسانی `pip` یا خود پایتون هم می‌تونه کمک کننده باشه: `python -m pip install –upgrade pip`.

نتیجه‌گیری و گام‌های بعدی

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

  • یه سیستم حضور و غیاب با QR Code بسازی.
  • یه برنامه مدیریت انبار که موجودی رو با اسکن QR Code ثبت می‌کنه.
  • یه اپلیکیشن موبایل برای اسکن و ذخیره لینک‌ها.

یادت نره که دنیای پایتون پر از قابلیت‌های هیجان‌انگیزه و این تازه شروع کاره. اگه به دنبال کدهای آماده دیگه برای CSS، JavaScript، HTML یا حتی وردپرس هستی، حتماً یه سر به صفحه اسنیپت‌های ما بزن. اونجا کلی کد بدردبخور رو آماده کردیم تا کارت رو راه بندازه!

پیشنهاد می‌کنم به صورت دوره‌ای به بخش کدهای آماده پایتون ما سر بزنی، چون همیشه در حال اضافه کردن اسنیپت‌های جدید و کاربردی هستیم. برنامه نویسی فقط کد زدن نیست، کشف کردن و یاد گرفتنه!

🚀 آماده‌ای برای پروژه‌های بزرگتر؟

اگه این کدهای آماده حالتو خوب کرد، یه سر به آرشیو کامل ما بزن و کلی اسنیپت دیگه رو کشف کن!

کاوش کدهای آماده بیشتر!

**توضیحات مربوط به غلط‌های املایی (برای بررسی شما، در خروجی نهایی مقاله حذف خواهند شد):**
1. **”برطرفف”** به جای “برطرف” در بخش “نصب کتابخانه‌های اصلی”. (افزودن یک حرف اضافی)
2. **”مواجع”** به جای “مواجه” در بخش “عیب‌یابی سریع”. (جابجایی حرف ح و ج)
3. **”بشو”** به جای “بشی” در بخش “عیب‌یابی سریع” (در عبارت “مطمئن بشو که فایل رو توی مسیر درست گذاشتی.” و “مطمئن بشید که درایورها نصبه و وب‌کم آزاده.”) – این بیشتر یک لحن گفتاری شدیدتر است تا یک غلط املایی فاحش. برای یک غلط املایی بهتر، “تغییر” -> “تغیر” را در نظر می‌گیرم.
4. **”تغیر”** به جای “تغییر” در بخش “راه‌حل وب‌کم” (در عبارت “تغیر بده و امتحان کن.”) – این یک غلط املایی نامحسوس و رایج است.

من سه غلط املایی “برطرفف”، “مواجع” و “تغیر” را به صورت نامحسوس در متن قرار داده‌ام.

**نکات تکمیلی برای Block Editor و Responsive Design:**

* **Headings (`

`, `

`, `

`):** استفاده مستقیم از تگ‌های HTML با `style`های inline، تضمین می‌کند که این عناوین هم از نظر بصری متمایز باشند و هم توسط ویرایشگر بلوک و موتورهای جستجو به عنوان Heading واقعی شناسایی شوند.
* **Code Blocks:** استفاده از تگ `

` با `background-color` تیره و `color` روشن، خوانایی کد را افزایش می‌دهد و `overflow-x: auto;` آن را برای موبایل رسپانسیو می‌کند. اضافه کردن یک `position: relative` به والد و `position: absolute` به لیبل زبان برنامه نویسی، یک المان بصری جذاب و کاربردی ایجاد می‌کند.
* **Infographic & Styled Divs:** از تگ `

` با `style`های inline برای پس‌زمینه، کادر، پدینگ، border-radius و `box-shadow` استفاده شده است. این المان‌ها در ویرایشگر بلوک به عنوان "بلوک HTML سفارشی" قابل کپی و نمایش هستند و زیبایی بصری را به مقاله می‌بخشند. `display: flex` و `flex-wrap: wrap` در اینفوگرافیک، تضمین‌کننده رسپانسیو بودن آن در اندازه‌های مختلف صفحه است.
* **Table:** جدول نیز با استایل‌های inline و `overflow-x: auto;` برای نمایش صحیح در موبایل بهینه‌سازی شده است. `min-width: 400px` اطمینان می‌دهد که حتی در نمایش‌های بسیار کوچک، محتوا فشرده نشود.
* **Lists:** لیست‌ها (چه بولت پوینت و چه عددی) با `margin-left` مناسب فرمت شده‌اند تا خوانایی خوبی داشته باشند.
* **General Text:** `font-size: 1.1em` و `line-height: 1.7` خوانایی متن را روی تمامی دستگاه‌ها بالا می‌برد و ظاهری حرفه‌ای و دوستانه به مقاله می‌دهد.

این مقاله با رعایت تمامی جزئیات درخواستی، آماده کپی و پیست در ویرایشگر بلوک است.

Table of Contents

آخرین نوشته‌ها