منظور از خواندن آفلاین این است که بدون استفاده از وب کم و تصویر لایو دوربین یا ویدیو استریم و فقط با استفاده از تصویر یک QR Code، چطور محتوای آن را استخراج نمائیم.
به این منظور باید در ابتدا تصویر مد نظر از ورودی در متلب خوانده شود. لذا دستور زیر را اجرا میکنیم:
I = imread("QRCode_eyc.ac.ir.jpg");
در مرحله بعد بررسی تصویر ورودی جهت یافتن QR Code انجام میشود. خروجي دستور زير شامل پارامترهاي محتوای QRCodeرمز گشایی شده، قالب آن که شامل يكي از موارد جدول زیر است و مختصات قرارگیری تصویر QRCodeدر تصویر اصلی مي باشد.
[msg,detectedFormat,loc] = readBarcode(I,"all");
در صورت اجرای این دستور متغییر های msg، detectedFormatو locشامل مقادیر بازیابی شده از تصویر بارکد خواهد بود.
در این مثال، هر یک از این متغییر ها شامل مقادیر زیر هستند که در بخش Workspace قابل مشاهده است.
از طرفی جهت نمایش راحت تر این متغییر ها در بخش Command Window میتوانید از دستورات زیر استفاده کنید:
disp("Barcode format: " + detectedFormat); disp("Decoded barcode message: : " + msg);
در این صورت به شرح ذیل در بخش Command Window نمایش داده میشود:
در انتها جهت اضافه کردن این مقادیر به تصویر و نمایش همه آنها با هم در یک تصویر به شرح ذیل عمل میکنیم:
xyText = loc(2,:); xyText = xyText + 10;
با این دستور، با توجه به اینکه متغیر locدارای 4 نقطه مختصات جهت تشخیص QRCode است، طبق تصویر Workspace مقدار متغیر loc به شرح تصوير زير است، لذا با دستور بالا فقط مختصات دوم بدون محدودیت {یعنی نقطه ابتدایی و انتهایی مختصات} در متغیر xyText مقداردهی میگردد و جهت جلوگيري از تداخل آن با نقطه تصوير اصلي، مقدار 10 واحد به مختصات آن نقطه اضافه ميگردد.
سپس توسط دستور زیر مقدار msgرا در نقطه مشخص xyText روی تصویر I درج میکنیم.
دقت شود در این حالت سایز متن روی 10 پیکسل تنظیم شده است و یک مستطیل پر دور متن ایجاد شده است.
Imsg = insertText(I,xyText,msg,"BoxOpacity",1,"FontSize",10);
تا اینجا خروجی کار به شرح تصویر زیر خواهد بود:
اکنون جهت ایجاد دایره های قرمز تو پر روی نقاط شناسایی QRCode روی تصویر جدید Imsg از دستور زیر استفاده میشود.
Imsg = insertShape(Imsg, "FilledCircle",[loc, repmat(5, length(loc), 1)],"Color","red","Opacity",1);
در نهایت با استفاده از دستور زیر تصویر کامل نمایش داده میشود:
imshow(Imsg);
خروجی نهایی کار به شرح ذیل خواهد بود:
اسکریپت این مقاله به شرح ذیل است:
close all; clear all; clc; I = imread("QRCode_eyc.ac.ir.jpg"); [msg,detectedFormat,loc] = readBarcode(I,"all"); disp("QRCode format: " + detectedFormat); disp("Decoded QRCode message: : " + msg); xyText = loc(2,:); xyText = xyText + 10; Imsg = insertText(I,xyText,msg,"BoxOpacity",1,"FontSize",10); Imsg = insertShape(Imsg, "FilledCircle",[loc, repmat(5, length(loc), 1)],"Color","red","Opacity",1); imshow(Imsg);
Reference:
[1] https://www.mathworks.com/help/vision/ref/readbarcode.html