منظور از خواندن آفلاین این است که بدون استفاده از وب کم و تصویر لایو دوربین یا ویدیو استریم و فقط با استفاده از تصویر یک بارکد چطور محتوای بارکد را استخراج نمائیم.
به این منظور باید در ابتدا تصویر بارکد مورد نظر از ورودی در متلب خوانده شود. لذا دستور زیر را اجرا میکنیم:
I = imread('BarCode.jpg');
در مرحله بعد بررسی تصویر ورودی جهت یافتن بارکد یک بعدی انجام میشود که محتوای بارکد رمز گشایی شده، قالب بارکد موجود در تصویر که شامل جدول زیر است و مختصات قرارگیری تصویر بارکد در تصویر اصلی بازیابی توسط دستور زیر بازیابی می شود.
[msg,detectedFormat,loc] = readBarcode(I,'1D');
در صورت اجرای این دستور متغییر های msg، detectedFormat و loc شامل مقادیر بازیابی شده از تصویر بارکد خواهد بود.
در این مثال، هر یک از این متغییر ها شامل مقادیر زیر هستند که در بخش Workspace قابل مشاهده است.
از طرفی جهت نمایش راحت تر این متغییر ها در بخش Command Window میتوانید از دستورات زیر استفاده کنید:
disp("Barcode format: " + detectedFormat); disp("Decoded barcode message: : " + msg);
در این صورت به شرح ذیل در بخش Command Window نمایش داده میشود:
در انتها جهت زیباتر اضافه کردن این مقادیر به تصویر و نمایش همه آنها با هم در یک تصویر به شرح ذیل عمل میکنیم:
xyBegin = loc(1,:);
با این دستور، با توجه به اینکه متغیر loc دارای دو نقطه مختصات طبق تصویر Workspace به شرح [29,104;216,104] است، لذا فقط مختصات اول بدون محدودیت {یعنی نقطه ابتدایی و انتهایی مختصات} در متغیر xyBegin مقداردهی میگردد.
سپس توسط دستور زیر مقدار msg را در نقطه مشخص xyBegin روی تصویر I درج میکنیم.
دقت شود در این حالت سایز متن روی 15 پیکسل تنظیم شده است و یک مستطیل پر دور متن ایجاد شده است.
Imsg = insertText(I,xyBegin,msg,'BoxOpacity',1,'FontSize',15);
تا اینجا خروجی کار به شرح تصویر زیر خواهد بود:
جهت بازیابی سایز تصویر از دستور زیر استفاده میشود:
imSize = size(Imsg);
جهت ایجاد یک خط با پهنای 5 پیکسل روی تصویر جدید Imsg از دستور زیر استفاده میشود.
Imsg = insertShape(Imsg,'Line',[1 xyBegin(2) imSize(2) xyBegin(2)],'LineWidth',5);
در نهایت با استفاده از دستور زیر تصویر کامل نمایش داده میشود:
imshow(Imsg);
خروجی نهایی کار به شرح ذیل خواهد بود:
اسکریپت این مقاله به شرح ذیل است:
close all; clear all; clc; I = imread('BarCode.jpg'); [msg,detectedFormat,loc] = readBarcode(I,'1D'); disp("Barcode format: " + detectedFormat); disp("Decoded barcode message: : " + msg); xyBegin = loc(1,:); Imsg = insertText(I,xyBegin,msg,'BoxOpacity',1,'FontSize',15); imSize = size(Imsg); Imsg = insertShape(Imsg,'Line',[1 xyBegin(2) imSize(2) xyBegin(2)],'LineWidth',5); imshow(Imsg);
Reference:
[1] https://www.mathworks.com/help/vision/ref/readbarcode.html