پروژه الکترونیکپروژه های پایتونپروژه های پردازش تصویرپروژه های رزبری پای

آموزش ساخت اسکنر کد QR با رزبری پای و OpenCV

کد QR (کد پاسخ سریع) نوعی بارکد ماتریسی است که شامل اطلاعات مختلفی است. مثلا داده های موقعیت مکانی ، شناسه ، شماره تلفن یا آدرس وبسایت و … در این آموزش ما قصد داریم یک اسکنر QR کد مبتنی بر رزبری پای را با استفاده از کتابخانه OpenCV و ZBar بسازیم. ZBar بهترین کتابخانه برای شناسایی و رمز گشایی انواع مختلف بارکد ها و کد های QR است.

OpenCV برای دریافت فریم های ویدئو و پردازش آن استفاده می شود. هنگامی که OpenCV یک فریم را ضبط کند، سپس می توانیم آن را به یک کتابخانه رمز گشایی بارکد پایتون مانند ZBar ارجاع دهیم که بارکد را رمزگشایی کرده و به اطلاعات مربوطه تبدیل می کند. فیلم عملکرد پروژه در انتهای صفحه قرار داده شده است.

QR کد چیست ؟

QR کد چیست ؟
QR کد چیست ؟

QR کد همونطور که گفتیم به معنای پاسخ سریع است. این کد یک تصویر 2 بعدی ماتریسی برای خوانندن داده ها با سرعت بالا است که در سال 1994 توسط DENSO WAVE برای صنعت خودروسازی ژاپن تهیه شد. یک کد QR داده ها را بسیار کارآمد در مقایسه با بارکد استاندارد فشرده می کند. این کد از چهار حالت رمزگذاری استاندارد (عددی ، الفبایی ، بایت / باینری و کانجی) استفاده می کند ، این فناوری به صورت “متن باز” ساخته شده است ، برای همه در دسترس است. محبوبیت بسیار زیاد کدهای QR نسبت به بارکدها معمولی ، ظرفیت داده های بزرگتر است.

QR کد چگونه کار میکند ؟

کدهای QR (و سایر کدهای ماتریس داده ها) به گونه ای طراحی شده اند که توسط ابزارهای ویژه قابل خواندن باشند ، نه توسط انسان. بنابراین فقط مقدار مشخصی از آن را می توانیم با مطالعه بصری درک کنیم ، اگرچه هر کد با روشهای مختلف ساخته شده است اما حاوی چند نکته مشترک است.

آموزش الگو های QR کد

تصویر پایین الگو های کد QR را نشان میدهد و در پایین تصویر توضیحات هر کدام قرار داده شده است.

آموزش الگو های QR کد
آموزش الگو های QR کد
  1. الگو ها شناسائیی (1) : جعبه های مربعی بزرگ سه گوشه کد است ، تأیید میکند که تصویر یک کد QR است ، از آنجا که تنها سه مورد از آنها وجود دارد ، به راحتی بالا و پایین کد معلوم میشود.
  2. الگوی تراز وسط (2) : این باعث می شود که از هر جهت دیگری قابل خواندن است.
  3. الگوی تنظیم خواندن (3) : این الگو باعث میشود اندازه خطوط کد را تعیین شود.
  4. اطلاعات نسخه (4) : در حال حاضر 40 نسخه استاندارد از QR code وجود دارد ، در این بخش  نسخه QR که مورد استفاده قرار گرفته تعیین می شود.
  5. اطلاعات فرمت (5) : اطلاعات در مورد کمبود ها و خطاهای کد نشان داده میشود .
  6. محیط خارجی کد (6) : فاصله ای در چهار طرف هر کد QR به منظور تمایز کد از محیط اطراف آن است.
    بخش های دیگر کد داده ها و مواردی است که به اطلاعات ارائه شونده اختصاص دارد.
حتما ببینید :  ساخت دماسنج بدون تماس با آردوینو (مخصوص کرونا و ثبت در فرمت اکسل)

بنظرم تا همین حد اطلاعات در مورد QR کد کافی باشه ، درصورتی که نیاز به اطلاعات دیگری دارید میتوانید آموزش کامل پروژه ساخت کد QR آردوینو با نمایشگر OLED SSD1306 را نیز مشاهده کنید.

کتابخانه های مورد نیاز

قبل از شروع به کار با این اسکنر کد QR رزبری پای ، ابتدا باید OpenCV ، کتابخانه رمزگشایی بارکد ZBar ، imutils و سایر وابستگی ها را در این پروژه نصب کنیم. OpenCV در اینجا برای پردازش تصویر دیجیتال استفاده می شود که رایج ترین برنامه پردازش تصویر دیجیتال ، تشخیص شی object ، تشخیص چهره و شمارنده افراد است.

نصب OpenCV در Raspberry Pi

در اینجا از کتابخانه OpenCV برای اسکنر Raspberry Pi QR استفاده خواهد شد. برای نصب OpenCV ، ابتدا Raspberry Pi را به روز کنید.

sudo apt-get update

سپس وابستگی های مورد نیاز برای نصب OpenCV را روی Raspberry Pi خود نصب کنید.

sudo apt-get install libhdf5-dev -y 
sudo apt-get install libhdf5-serial-dev –y 
sudo apt-get install libatlas-base-dev –y 
sudo apt-get install libjasper-dev -y 
sudo apt-get install libqtgui4 –y
sudo apt-get install libqt4-test –y

پس از آن ، OpenCV را با استفاده از دستور زیر در رزبری پای نصب کنید.

pip3 install opencv-contrib-python==4.1.0.25

در صورتی که در این مرحله به مشکل برخوردید، آموزش نصب OpenCV روی رزبری پای با CMake را مشاهده کنید.

نصب ZBar در رزبری پای

Zbar بهترین کتابخانه برای شناسایی و رمزگشایی انواع مختلف بارکدها و کدهای QR است. برای نصب کتابخانه از دستور زیر استفاده کنید:

pip3 install pyzbar

نصب imutils در رزبری پای

imutils برای سهولت کارکرد های اصلی پردازش تصویر مانند ترجمه ، چرخش ، تغییر اندازه ، اسکلت بندی و نمایش تصاویر Matplotlib با OpenCV استفاده می شود. برای نصب imutils از دستور زیر استفاده کنید:

pip3 install imutils

نصب argparse در رزبری پای

برای نصب کتابخانه argparse از دستور زیر استفاده کنید. argparse وظیفه تجزیه و تحلیل آرگومان های خط فرمان را دارد.

pip3 install argparse

سخت افزار اسکنر بارکد رزبری پای

در این پروژه اسکنر QR کد با رزبری پای ما فقط به برد رزبری پای و دوربین رزبری پای نیاز داریم. تنهای نیاز است نوار اتصال دوربین را در شکاف دوربین موجود در برد Raspberry pi قرار دهیم.

اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید.

سخت افزار اسکنر بارکد رزبری پای

از دوربین Pi می توان برای ساخت پروژه های مختلف جالب مانند امنیت خانه، مانیتورینگ بازدیدکنندگان و … استفاده کرد که ما آنها را در سایت آیرنکس قرار داده ایم.

کد پایتون برای اسکنر کد QR رزبری پای

کد کامل اسکنر کد QR در انتهای صفحه در فایل دانلودی قرار داده شده است. در اینجا بعضی از قسمت های مهم کد را بررسی میکنیم.

طبق معمول ، کد را با فراخوانی تمام بسته های مورد نیاز شروع میکنیم.

from imutils.video import VideoStream
from pyzbar import pyzbar
import argparse
import datetime
import imutils
import time
import cv2​

سپس تجزیه کننده آرگومان را میسازیم و استدلال ها را تجزیه میکنیم. آرگومان Command-line حاوی اطلاعاتی در مورد مسیر پرونده CSV است. پرونده CSV (مقادیر جدا شده با کاما) حاوی زمان و بارگذاری بارکد موجود در جریان ویدیوی ما است.

ap = argparse.ArgumentParser()
ap.add_argument("-o", "--output", type=str, default="barcodes.csv",
            help="path to output CSV file containing barcodes")
args = vars(ap.parse_args())

در اینجا اگر به جای دوربین رزبری پای از وبکم USB استفاده میکنید، # را بردارید یعنی کد را از حالت کامنت خارج کنید.

#vs = VideoStream(src=0).start()
vs = VideoStream(usePiCamera=True).start()
time.sleep(2.0)

حالا درون loop ، یک فریم از جریان ویدیو میگیریم و اندازه آن را به 400 پیکسل تغییر میدهیم. پس از گرفتن فریم، با تابع pyzbar.decode کد QR را شناسایی و رمزگشایی میکنیم.

frame = vs.read()
frame = imutils.resize(frame, width=400)
barcodes = pyzbar.decode(frame)

اکنون بارکد ها را شناسایی میکنیم و دور آن خط میکشیم.

for barcode in barcodes:
        (x, y, w, h) = barcode.rect
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)

کد پایتون برای اسکنر کد QR رزبری پای

سپس بارکد شناسایی شده را با استفاده از عملکرد رمزگشایی (“utf-8”) به یک رشته “utf-8” رمزگشایی میکینم و سپس با استفاده از عملکرد barcode.type نوع بارکد را استخراج میکنیم.

barcodeData = barcode.data.decode("utf-8")
barcodeType = barcode.type

پس از آن ، داده های بارکد استخراج شده و نوع بارکد را در داخل متغیری به نام text ذخیره کرده و داده های بارکد را رسم کرده و روی تصویر تایپ میکنیم.

text = "{} ({})".format(barcodeData, barcodeType)
cv2.putText(frame, text, (x, y - 10),
     cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)

ساخت بارکد خوان با رزبری پای و opencv

اکنون خروجی را با داده های بارکد و نوع بارکد نمایش میدهیم.

cv2.imshow("Barcode Reader", frame)

بار کد خوان Raspberry pi

اکنون در آخرین مرحله ، بررسی میکنیم که اگر s فشرده شود، حلقه اصلی متوقف شود و مراحل پاکسازی شروع شود.

key = cv2.waitKey(1) & 0xFF
if key == ord("s"):
        break
print("[INFO] cleaning up...")
csv.close()
cv2.destroyAllWindows()
vs.stop()

فیلم عملکرد پروژه

پس از آماده شدن سخت افزار، برنامه QR کد خوان را اجرا کنید. پنجره ای مشاهده خواهید کرد که نمای مستقیمی از دوربین شما را نشان می دهد ، اکنون می توانید بارکد را در مقابل دوربین PI قرار دهید. هنگامی که رزبری پای بارکد را رمزگشایی می کند ، یک جعبه قرمز با اطلاعات بارکد و نوع بارکد نشان می دهد. به این ترتیب می توانید به راحتی و فقط با استفاده از برد رزبری پای و دوربین Pi یا دوربین USB ، یک بارکد خوان رزبری پای بسازید. فیلم زیر به شما در درک نحوه کار این پروژه کمک میکند.

برای دانلود فایل های پروژه ثبت نام کنید، تنها چند ثانیه زمان لازم است. از طریق فرم زیر اقدام کنید.

ایمیل خود را وارد کنید

نظرتان را در مورد این مطلب با ستاره دادن اعلام کنید امیدوارم این مطلب برای شما مفید بوده باشد. نظرات ، مشکلات و پیشنهادات خود را در پایین صفحه اعلام کنید

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. (در خصوص سوال در مورد این مطلب از قسمت نظرات همین مطلب اقدام کنید)

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

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

دکمه بازگشت به بالا