اسکنفا اپلیکیشن اسکنر فارسی برای اندروید است که اسکن QR و بارکد، اسکن سند و تبدیل عکس به PDF، اسکن کارت ملی، تشخیص متن فارسی و خواندن کارت بانکی را در یک برنامه سبک و آفلاین جمع میکند.
چرا به یک اپلیکیشن اسکنر فارسی دیگر نیاز بود؟
به تجربه ما، کارهای روزمره اسکن بین چند برنامه پخش است: یکی برای QR، یکی برای PDF، یکی برای متن. فارسی در بیشتر آنها در حد یک افزونه است و برای خواندن یک عکس گاهی باید فایل را به سروری بفرستید که نمیشناسید.
پروژه اسکنفا با سه هدف شروع شد:
یکجا: همه اسکنهای روزمره در یک برنامه
فارسی واقعی: راستچین، ارقام فارسی، فونت وزیرمتن و تشخیص متن فارسی
خصوصی: پردازش روی خود گوشی، بدون ثبتنام و بدون ارسال سند
اسکن QR و بارکد: لینک و وایفای خودکار شناخته میشود
اسکنر با ML Kit ساخته شده و اگر بارکد کوچک یا دور باشد، خودش تا ۴ برابر زوم میکند. کادر روی کدِ پیداشده قفل میشود و برنامه محتوا را از میان ۱۰ نوع میشناسد: لینک، وایفای، مخاطب، پیامک، ایمیل، تلفن، موقعیت مکانی، رویداد تقویم، بارکد کالا و متن ساده. ML Kit روی خود دستگاه کار میکند و به سرور نیاز ندارد.
بعد از اسکن، هر نوع کارِ مناسب خودش را پیشنهاد میدهد:
وایفای: اتصال مستقیم به شبکه، بدون تایپ رمز
بارکد کالا: جستجوی قیمت در ترب، دیجیکالا یا گوگل
مخاطب و رویداد: افزودن مستقیم به مخاطبین و تقویم
گالری و اسکن پیوسته: خواندن QR از عکس و ذخیره چند کد پشت سر هم
پیش از باز شدن هر لینک، پنج بررسی آفلاین انجام میشود: http بدون رمزگذاری، آدرس عددی بهجای نام سایت، لینک کوتاهشده (از فهرست ۱۱ سرویس شناختهشده)، نام سایت با نویسههای غیرمعمول، و علامت @ که مقصد را پنهان میکند. هشدارها به زبان ساده زیر «مقصد» میآیند و تصمیم با کاربر میماند.
اسکن سند: لبههای برگه خودکار پیدا میشود
دوربین هر ۱۶۰ میلیثانیه یک نسخه ۲۵۶ پیکسلی از تصویر را بررسی میکند و برگه را با کادر نارنجی نشان میدهد. وقتی برگه حدود یک ثانیه ثابت بماند، عکس خودکار گرفته میشود. لبهیاب را بدون OpenCV و فقط با Kotlin نوشتیم تا کتابخانه سنگینی به برنامه اضافه نشود.
بعد از عکس، ویرایشگر دو مرحله دارد. اول گوشهها را روی لبهها میگذارید، بعد یکی از چهار فیلتر را انتخاب میکنید: اصلی، رنگی شفاف، خاکستری یا سیاه و سفید. فیلتر روشنایی کاغذ را در هر نقطه تخمین میزند و سایههای ملایم را خنثی میکند؛ برگهای که زیر نور کج عکس گرفتهاید سفید میشود و نوشتهها سیاه میمانند.
هر سند چند صفحه دارد و صفحهها جابهجا، ویرایش، حذف و اضافه میشوند. خروجی PDF یا JPG است. عکس را از گالری یا با «اشتراکگذاری» از هر برنامهای میشود مستقیم به اسکنفا فرستاد.
flowchart LR
A[دوربین] --> B[پیدا کردن لبهها]
B --> C[صافسازی و اصلاح صفحه] --> D[فیلتر و چرخش]
D --> E[تصویر یا پیدیاف]کارت ملی: پشت و رو روی یک برگه A4
حالت کارت ملی دو مرحله دارد: اول روی کارت، بعد پشت کارت. خروجی یک برگه A4 است که هر دو طرف را زیر هم و وسط صفحه میگذارد. عرض هر کارت حدود ۱۰٫۶ سانتیمتر است؛ کمی بزرگتر از اندازه واقعی (۸۵٫۶ میلیمتر) تا چاپ خوانا بماند. همین حالت برای گواهینامه هم کار میکند.
نسخه تصویری همان برگه ۱۲۴۰ در ۱۷۵۴ پیکسل ساخته میشود و برای ارسال در پیامرسانها آماده است.
اسناد، عکسها و متنهای تشخیصدادهشده فقط در حافظه برنامه روی گوشی میمانند.
تشخیص متن فارسی بدون اینترنت چطور کار میکند؟
با توجه به اینکه ML Kit مدل فارسی ندارد، برای فارسی از Tesseract استفاده کردیم و مدلهای فارسی و انگلیسی (حدود ۷٫۴ مگابایت) را داخل خود برنامه گذاشتیم. اندازه عکس پیش از خواندن به حداکثر ۲۲۰۰ پیکسل میرسد و از همان فیلتر سیاه و سفید صفحه رد میشود تا متن تیره روی زمینه روشن بماند. انگلیسی و عدد با ML Kit خوانده میشود.
نتیجه قابل ویرایش است؛ کپی، اشتراک یا ذخیره در «فایلها» دارد. زیر متن، بخش «موارد پیدا شده» شماره تلفن، ایمیل، لینک، شماره کارت، شبا و کد ملی را جدا میکند و با یک لمس تماس میگیرد، ایمیل میفرستد یا کپی میکند. شماره کارت، شبا و کد ملی فقط وقتی نشان داده میشوند که رقم کنترلیشان درست باشد.
تشخیص فارسی روی عکس روشن و صاف بهتر کار میکند. برنامه خودش هم همین را زیر نتیجه یادآوری میکند و پیشنهاد میدهد متن را ویرایش کنید.
کارت بانکی و ابزارهای ایرانی
دوربین هر ۲۸۰ میلیثانیه یک فریم میخواند و وقتی یک شماره ۱۶ رقمی معتبر (با کنترل Luhn) در دستکم دو فریم تکرار شد، آن را نشان میدهد. نام بانک از ۶ رقم اول کارت پیدا میشود و فهرست آن بیش از ۴۰ پیششماره دارد. تاریخ انقضا و شبا هم اگر روی کارت باشد خوانده میشود.
بخش «ابزارهای ایرانی» همان منطق را برای وارد کردن دستی میدهد:
کد ملی: بررسی رقم کنترلی
شماره کارت: بررسی Luhn و نام بانک
شبا: بررسی mod 97 و نام بانک از ۳۶ کد بانکی
تاریخ: تبدیل شمسی به میلادی و برعکس
برنامه روشن میگوید که بررسی کد ملی فقط ساختار عدد را میسنجد و وجود صاحب آن را تأیید نمیکند.
ساخت QR و بارکد با رنگ و لوگوی خودتان
سازنده ۱۱ نوع کد دارد: متن، لینک، وایفای، مخاطب، تلفن، پیامک، ایمیل، موقعیت، پیامرسانها (تلگرام، اینستاگرام، واتساپ، ایتا)، شماره کارت و شبا، و بارکد. کد را میشود در گالری ذخیره یا مستقیم بهاشتراک گذاشت.
رنگ، طرح (مربعی، گرد یا نقطهای)، سطح ترمیم خطا (چهار سطح) و لوگوی وسط کد قابل تنظیم است. با لوگو، ترمیم خطا خودکار روی بالاترین سطح میرود و لوگو حدود ۲۲ درصد پهنای کد را میگیرد. اگر رنگ کد و زمینه به هم شبیه باشند (نسبت تضاد کمتر از ۳)، برنامه هشدار میدهد که ممکن است اسکن نشود.
فناوری و کیفیت: این اپلیکیشن اسکنر فارسی از چه ساخته شده؟
انتخاب | بخش |
|---|---|
Jetpack Compose، راستچین، تم روشن و تاریک، فونت وزیرمتن | رابط |
یک اکتیویتی، Voyager برای ناوبری، Hilt برای تزریق وابستگی | معماری |
Room (تاریخچه، سندها، صفحهها) و DataStore | داده |
CameraX، ML Kit، لبهیاب و فیلترهای اختصاصی | دوربین و تصویر |
ML Kit (انگلیسی) و Tesseract (فارسی) | تشخیص متن |
ZXing | QR |
پروژه حدود ۱۵ هزار خط Kotlin در ۱۴۴ فایل است و از اندروید ۷٫۱ به بالا (API 25) روی دو معماری armeabi-v7a و arm64-v8a اجرا میشود. نسخه نهایی با minify و shrink resources ساخته میشود. بیش از ۳۰ تست خودکار بخشهای حساس را میسنجند: اعتبارسنجهای ایرانی، تاریخ شمسی، خواندن کدهای وایفای و vCard، لبهیاب روی عکسهای ساختگی و فیلترها. یک تست Robolectric هم صفحههای واقعی را به PNG تبدیل میکند.
سؤالهای رایج درباره اسکنفا
اسکنفا بدون اینترنت کار میکند؟
بله. اسکن QR، اسکن سند، تشخیص متن و خواندن کارت روی خود گوشی انجام میشود. فقط تبلیغهای نسخه رایگان و پرداخت از فروشگاه به اینترنت نیاز دارند.
سندهای من جایی فرستاده میشود؟
نه. اسناد، عکسها، متنهای تشخیصدادهشده و تاریخچه فقط در حافظه برنامه روی گوشی میمانند و هیچ سروری آنها را نمیگیرد.
تشخیص متن فارسی چقدر دقیق است؟
روی عکس روشن و صاف بهتر جواب میدهد. اگر جایی اشتباه بود، متن نتیجه قابل ویرایش است.
میشود برای کسبوکار من هم یک اپلیکیشن اسکنر فارسی یا اپلیکیشن اندروید دیگر ساخت؟
بله. طرحها و قیمتها را ببینید و درخواستتان را بفرستید تا درباره نیازتان حرف بزنیم.
اگر برای کسبوکار خودتان اپلیکیشن اندروید یا وبسایت لازم دارید، از همینجا شروع کنید.











