بررسی تصویر · محتوای QR

چطور محتوای کد QR را بدون بازکردن لینک بخوانیم؟

زیر یک آگهی نوشته‌اند «ثبت‌نام رسمی» و کنارش کد QR گذاشته‌اند. قبل از بازکردن لینک، می‌شود یک سؤال ساده را جواب داد: داخل خودِ کد چه چیزی ذخیره شده است؟ برای این مرحله، خروجی موردنیاز یک متن قابل ثبت است؛ عنوان آگهی و پیش‌نمایش دوربین جای آن را نمی‌گیرند.

ذره‌بین روی طرح تزئینی شبیه QR و قطعه‌های جداشده روی کاغذ
تصویر مفهومیِ استخراج محتوا پیش از اقدام؛ طرح تزئینی تصویر، کد آزمایش نیست.

تصویر، محتوای کد و عمل اسکنر را جدا کنید

در این بررسی سه چیز داریم: تصویر یا سندی که کد داخل آن دیده می‌شود، داده‌ای که کد در خود دارد، و کاری که برنامه اسکنر پیشنهاد می‌کند. ممکن است برنامه بخواهد مرورگر را باز کند یا یک مخاطب بسازد؛ شما فعلاً فقط داده را می‌خواهید.

هر QR لینک سایت نیست. توضیحات پروژه ZXing درباره قالب محتوا، قراردادهایی برای نشانی وب، اطلاعات تماس، شماره تلفن و تنظیم شبکه معرفی می‌کند. برنامه‌ها می‌توانند این متن‌ها را تفسیر کنند و دکمه انجام کار نشان بدهند. برای بررسی اولیه، ابزاری مناسب است که محتوا را محلی به‌صورت متن برگرداند و آن کار را اجرا نکند.

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

اول تصویر کامل را نگه دارید

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

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

یک روش محلی برای گرفتن متن

کد کوتاه زیر، فایل PNG موجود روی رایانه را می‌خواند و مرورگر یا مقصد لینک را باز نمی‌کند. این روش برای محتوای متنی معمول است؛ ابزار جرم‌یابیِ بایت‌به‌بایت برای همه نوع رمزگذاری QR نیست. اگر پایتون دارید، در ویندوز یک محیط جدا بسازید و بسته OpenCV را یک بار در آن نصب کنید:

python -m venv qr-reader
qr-reader\Scripts\python.exe -m pip install opencv-python-headless

نصب بسته به اینترنت نیاز دارد؛ پس از نصب، مرحله خواندن تصویر می‌تواند محلی انجام شود. راهنمای بسته OpenCV نسخه headless را توضیح می‌دهد. در همین محیط فقط یک بسته OpenCV نصب کنید. برای هر تصویر یک پوشه کاری تازه بسازید تا خروجی قبلی با نتیجه جدید اشتباه نشود. کد زیر را در فایلی با نام decode_qr.py ذخیره کنید و تصویر کاری را با نام qr.png کنارش قرار دهید:

from pathlib import Path
import json
import cv2

image_path = Path(__file__).with_name("qr.png")
image = cv2.imread(str(image_path))
if image is None:
    raise SystemExit("Image could not be read")
text, points, _ = cv2.QRCodeDetector().detectAndDecode(image)
if points is None or text == "":
    raise SystemExit("No text decoded; keep the result unresolved")
result = json.dumps({"decoded_text": text}, ensure_ascii=True, indent=2)
image_path.with_suffix(".decoded.json").write_text(result, encoding="utf-8")
print(result)

حالا فرمان qr-reader\Scripts\python.exe decode_qr.py را اجرا کنید. خروجی در فایل qr.decoded.json می‌نشیند. قرارداد خروجی تشخیص و خواندن در مستندات OpenCV آمده است. JSON متن برگشتی را با نمایش صریح نویسه‌های ویژه نگه می‌دارد؛ ممکن است حروف فارسی را به‌شکل کدهای یونیکد ببینید. این خروجی، تصویر اصلی یا نسخه بایت‌به‌بایتِ داده رمزگذاری‌شده نیست. برای امتحان‌کردنش هم لازم نیست آن را در نوار نشانی مرورگر بچسبانید.

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

آزمایش کوچک: دو نوشته متفاوت، یک محتوای ثابت

در ۱۸ اکتبر ۲۰۲۶، پنج تصویر PNG آزمایشی را به‌صورت محلی با بسته qrcode نسخه ۸٫۲ ساختیم و با OpenCV نسخه ۴٫۱۳٫۰ در پایتون ۳٫۱۲٫۱۰ خواندیم. این یک بررسی قابل تکرارِ روش کار بود؛ آزمایش کدهای واقعی کاربران یا سنجش دقت عمومی ابزار نبود. سه تصویر، یک نشانی نمونه رزروشده داشتند: خودِ کد، و دو آگهی که همان کد زیر عنوان‌های متفاوتشان قرار گرفته بود.

تصویر آزمایشیمتن برگشتیمشاهده
کد بدون متن اطرافhttps://example.org/exhibit?room=4متن خوانده شد
آگهی با عنوان انگلیسی «اتاق چهارِ نمایشگاه»همان نشانی نمونهمتن خوانده شد
آگهی با عنوان انگلیسی «دریافت جایزه»همان نشانی نمونهتغییر ادعای اطراف کد، محتوای آن را تغییر نداده بود
کد دارای متن سادهEXHIBIT ROOM 4خروجی متنی بود و نشانی وب نداشت
تصویر کنترلِ سفید و خالیمتنی برنگشتنمادی شناسایی نشد

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

بعد از خواندن، نوع خروجی را مشخص کنید

اگر خروجی نشانی وب بود، اول همان متن دقیق را ذخیره کنید. یک نشانی کوتاه ممکن است به جای دیگری هدایت شود؛ خواندن آفلاین QR زنجیره هدایت و صفحه نهایی فعلی را نشان نمی‌دهد. حتی ممکن است سرویس مقصد بعدی را تغییر دهد، درحالی‌که QR چاپ‌شده همان قبلی باشد. در یادداشت، «نشانی داخل کد» و «مقصد نهایی» را یکی نکنید.

اگر قرار است خود نشانی بررسی شود، از راهنمای اوسینت جت برای بررسی لینک مشکوک بدون کلیک ادامه دهید. کار خواندن QR در همین مرز تمام می‌شود و بررسی URL آغاز می‌شود. اگر خروجی متن ساده یا اطلاعات تماس است، همان را توصیف کنید؛ لازم نیست به‌زور آن را به استعلام سایت تبدیل کنید.

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

یادداشت نهایی چه شکلی باشد؟

این موارد را ثبت کنید: تصویر منبع و زمان دریافت، محل کد، سابقه برش یا تغییر تصویر، ابزار و نسخه آن، متن دقیق برگشتی، نوع محتوا، نتیجه یا خطای خواندن، و اینکه آیا با مقصدی تماس گرفته‌اید. در آزمایش بالا پاسخ مورد آخر «خیر» است. برداشت و فرضیه خود را در جمله‌ای جدا بنویسید.

«کد پایین سمت راستِ تصویر ذخیره‌شده به این نشانی تبدیل شد؛ مقصد باز نشده است» یک نتیجه روشن است. جمله «سایت رسمی ثبت‌نام رویداد تأیید شد» از شواهد فراتر می‌رود. اگر سؤال باقی‌مانده درباره صادرکننده آگهی است، همان را در شرح تحقیق بنویسید؛ موفقیت در خواندن کد، پایان بررسی منشأ آگهی نیست.

انتشار: 2026-11-03 · تحریریه اوسینت جت

پیشنهاد اصلاح · English version