Text Recognition (OCR — Optical Character Recognition) — فناوری استخراج متن چاپی یا دستنویس از تصاویر و جریان ویدئو است. در توسعه موبایل از Text Recognition برای دیجیتالی کردن اسناد، تشخیص پلاک خودرو، خواندن کارتهای ویزیت و ترجمه بلادرنگ متن استفاده میشود. راهحلهای اصلی OCR موبایل: ML Kit Text Recognition (Google)، Vision Framework (Apple)، Tesseract OCR (open-source). بر اساس Google ML Kit، 2025، Text Recognition V2 یک فریم را در 10–30 میلیثانیه با دقت 96% برای الفبای لاتین و 91% برای سیریلیک پردازش میکند.
نکات اصلی
Text Recognition (OCR) — فرآیند بینایی کامپیوتر که تصویر متن را به کاراکترهای قابل خواندن توسط ماشین تبدیل میکند. OCR از مراحل زیر تشکیل شده است: پیشپردازش تصویر (دوگانگی، رفع کجی، اصلاح انحراف)، قطعهبندی (تقسیم به خطوط، کلمات، کاراکترها)، تشخیص (طبقهبندی هر کاراکتر) و پسپردازش (بررسی با فرهنگ لغت، تصحیح خطاها). سیستمهای OCR مدرن (ML Kit، Vision) از شبکههای عصبی سرتاسری استفاده میکنند که همه مراحل را ترکیب میکنند.
انواع OCR: متن چاپی (printed text) — تشخیص متن ماشینی از اسناد، تابلوها، صفحهنمایشها — دقت 95–99%; متن دستنویس (handwriting) — تشخیص ورودی دستی — دقت 80–90% برای لاتین، 70–80% برای سیریلیک; متن صحنه (scene text) — متن در صحنههای طبیعی: شماره خانهها، علائم جادهای، نام فروشگاهها — به دلیل اعوجاج پرسپکتیو و تابش نور دشوارترین است.
CRNN + CTC Loss — معماری استفاده شده در مدلهای OCR مدرن. Convolutional Recurrent Neural Network (CNN + LSTM) ویژگیهای تصویر را استخراج میکند و Connectionist Temporal Classification دنباله کاراکترها را بدون نیاز به قطعهبندی اولیه رمزگشایی میکند. CRNN با متون با هر طولی کار میکند و در برابر انحراف و اعوجاج مقاوم است. بر اساس arXiv (2025)، مدلهای CRNN دقت 97.5% را بر روی benchmark ICDAR 2019 ارائه میدهند.
| راهحل OCR | دقت | سرعت | زبانها | پلتفرم |
|---|---|---|---|---|
| ML Kit V2 | 96% | 10–30 میلیثانیه | 45+ | Android, iOS |
| Apple Vision | 95% | 10–40 میلیثانیه | 13+ | iOS, macOS |
| Tesseract 5 | 90% | 50–200 میلیثانیه | 100+ | چندپلتفرمی |
| Google Cloud Vision | 98% | 500–1000 میلیثانیه | 200+ | سرور (API) |
CRNN برای دستگاههای موبایل — ML Kit از مدل MobileNetV2 + CRNN با کوانتیزاسیون INT8 استفاده میکند. مدل 2–5 MB (latent) حجم دارد و از طریق TFLite Delegate روی GPU/NPU اجرا میشود. بر خلاف Tesseract (خط لوله کلاسیک)، OCR شبکه عصبی نیازی به قطعهبندی جداگانه کاراکترها ندارد و در برابر نویز مقاومتر است. نقطه ضعف: برای بلادرنگ به GPU یا NPU نیاز دارد — روی CPU خالص سرعت به 5–10 FPS کاهش مییابد.
ML Kit Text Recognition — ابزار اصلی OCR برای برنامههای موبایل. در دو نسخه موجود است: V2 (Latin-based — بهینه شده برای لاتین، سیریلیک، اعداد) و V1 (Latin + CJK — ژاپنی، چینی، کرهای اما کندتر). V2 از مدل CRNN سرتاسری استفاده میکند، V1 — از CNN + LSTM قدیمیتر. Google V2 را برای همه موارد به جز نیاز به تشخیص CJK توصیه میکند.
ساختار نتیجه ML Kit: Text → TextBlock → Line → Element (Word/Symbol). هر سطح دارای bounding box، confidence (0..1) و recognised text است. Text — شیء ریشه با fullText (کل متن تشخیص داده شده در یک خط). TextBlock — بلوک منطقی متن (پاراگراف، ستون). Line — خط متن. Element — کلمه یا نماد. از confidence برای فیلتر کردن تشخیصهای نادقیق استفاده کنید.
// ML Kit Text Recognition V2
val recognizer = TextRecognition.getClient(
TextRecognizerOptions.DEFAULT_OPTIONS
)
recognizer.process(inputImage)
.addOnSuccessListener { text ->
val fullText = text.text
text.textBlocks.forEach { block ->
val blockText = block.text
val blockRect = block.boundingBox
block.lines.forEach { line ->
line.elements.forEach { element ->
val word = element.text
val confidence = element.confidence
}
}
}
}
.addOnFailureListener { error -> /* error */ }
Text Recognition در iOS از طریق ML Kit: API مشابه Android است اما از UIImage/CVPixelBuffer به جای InputImage استفاده میکند. ML Kit به طور خودکار از Apple Neural Engine روی A12+ از طریق Core ML Delegate استفاده میکند. برای iOS ML Kit Text Recognition V2 سرعت 15–30 میلیثانیه را در iPhone 15 Pro نشان میدهد. برای حداکثر عملکرد، UIImage را قبل از ارسال به CVPixelBuffer تبدیل کنید — این کار سربار تبدیل را کاهش میدهد.
Apple Vision Framework OCR بومی را از طریق VNRecognizeTextRequest (iOS 13+) فراهم میکند. Vision OCR از Apple Neural Engine (ANE) استفاده میکند و به SDK اضافی نیاز ندارد. از 13 زبان پشتیبانی میکند (EN, FR, IT, DE, ES, PT, ZH, JP, KO, RU, AR, TH, VI). Vision به طور خودکار زبان متن را تشخیص میدهد (language correction) و از چندین زبان در یک فریم پشتیبانی میکند. سرعت — 10–40 میلیثانیه روی A16+.
ویژگیهای Vision OCR: recognitionLevel (fast vs accurate)، automaticLanguageDetection، customWords (افزودن اصطلاحات خاص)، پشتیبانی از top candidates (چند گزینه تشخیص برای متن نامشخص). حالت fast دقت 90% را در 10–20 میلیثانیه میدهد، accurate — 95% در 30–50 میلیثانیه. برای تولید از accurate با فیلتر confidence >= 0.5 استفاده کنید.
import Vision
let request = VNRecognizeTextRequest { request, error in
guard let observations = request.results as? [VNRecognizedTextObservation] else { return }
for observation in observations {
let topCandidate = observation.topCandidates(1).first
let text = topCandidate?.string ?? ""
let confidence = topCandidate?.confidence ?? 0
let boundingBox = observation.boundingBox
}
}
request.recognitionLevel = .accurate
request.usesLanguageCorrection = true
let handler = VNImageRequestHandler(cgImage: cgImage, orientation: .up)
try handler.perform([request])
Vision vs ML Kit در iOS: Vision در دستگاههای قدیمیتر (iPhone X–13) به لطف ANE داخلی سریعتر است. ML Kit در صحنههای پیچیده (اعوجاج، انحراف، تابش نور) به دلیل مدل Google آموزش دیده روی میلیونها تصویر scene text دقیقتر است. Vision از confidence برای کاراکترهای جداگانه پشتیبانی نمیکند (فقط برای کلمات)، که فیلتر کردن را محدود میکند. برای اسناد — Vision (سریعتر)، برای scene text — ML Kit (دقیقتر).
Tesseract OCR — موتور تشخیص متن متنباز، توسعه یافته توسط HP (1985–1998) و توسط Google (2006+) ادامه یافته است. Tesseract 5 (LSTM-based) از معماری شبکه عصبی CRNN استفاده میکند که افزایش قابل توجهی در دقت نسبت به Tesseract 4 (کلاسیک + LSTM) ایجاد میکند. Tesseract از 100+ زبان از جمله سیریلیک، عربی، عبری و CJK پشتیبانی میکند. برای Android — tess-two (فورک)، برای iOS — swift-tesseract.
معایب Tesseract: سرعت 50–200 میلیثانیه در هر فریم (CPU-only، بدون شتاب GPU)، نیاز به پیشپردازش تصویر (دوگانگی، رفع کجی، تعیین جهت) قبل از ارسال به موتور، عدم تشخیص داخلی متن — باید ناحیه تصویر را ارسال کرد (اغلب همراه با OpenCV Text Detection یا EAST). Tesseract دقت 90% را روی اسناد تمیز و ~70% روی scene text ارائه میدهد.
چه زمانی Tesseract را انتخاب کنیم: اگر برنامه روی دستگاههای بدون Google Play (Huawei) کار میکند، نیاز به پشتیبانی از زبانهای نادر (سانسکریت، عبری) دارید، یا سفارشیسازی کامل خط لوله OCR (آموزش روی فونتهای خود) required است. برای همه موارد دیگر ML Kit یا Vision سریعتر، دقیقتر و نیاز به کد کمتری دارند. Tesseract فقط در صورت محدودیت در SDKهای شخص ثالث انتخاب موجهی است.
// Tesseract OCR از طریق tess-two
val tess = TessBaseAPI()
tess.init(dataPath, "rus+eng")
tess.pageSegMode = TessBaseAPI.PageSegMode.PSM_AUTO
val bitmap = BitmapFactory.decodeResource(resources, R.drawable.text)
val gray = Bitmap.createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888)
OpenCV.process(bitmap, gray) // دوگانگی + رفع انحراف
tess.setImage(gray)
val result = tess.utF8Text
tess.recycle()
پیشپردازش برای Tesseract اجباری است: تبدیل به grayscale، دوگانگی (Otsu یا Adaptive)، رفع انحراف (deskew)، حذف نویز (median blur). بدون پیشپردازش، دقت Tesseract به 50–60% کاهش مییابد. از OpenCV برای پیشپردازش استفاده کنید: Imgproc.cvtColor → Imgproc.threshold → Imgproc.erode/dilate → Core.rotate (deskew). برای اسناد با پسزمینه یکنواخت، دوگانگی کافی است، برای scene text — خط لوله کامل.
کیفیت تصویر — عامل اصلی دقت OCR. ML Kit و Vision دارای پیشپردازش داخلی هستند، اما برای موارد پیچیده (عکسهای تیره، تار، نوردهی زیاد) پردازش اضافی دقت را 10–15% افزایش میدهد. تکنیکهای اصلی: افزایش کنتراست (CLAHE)، رفع تاری (unsharp mask)، اصلاح پرسپکتیو (perspective transform)، حذف سایهها و تابش نور.
CLAHE (Contrast Limited Adaptive Histogram Equalization) — تساوی تطبیقی هیستوگرام محدود به کنتراست که کنتراست نواحی محلی را بهبود میبخشد. CLAHE برای عکسهای اسناد با نورپردازی ناهموار (بخشی در سایه، بخشی در نور) موثر است. OpenCV Core.createCLAHE با clipLimit=2.0 و tileGridSize=(8,8) نتیجه بهینه را برای OCR میدهد. پس از CLAHE، دقت ML Kit روی اسناد تیره از 70% به 88% افزایش مییابد.
اصلاح پرسپکتیو — برای عکسهای اسناد زاویهدار اجباری است. از OpenCV findHomography + warpPerspective برای تراز کردن سند استفاده کنید. برای تشخیص خودکار لبههای سند از Canny edge detection + findContours + approxPolyDP استفاده کنید. پس از اصلاح پرسپکتیو، دقت OCR برای عکسهای با زاویه >30 درجه 20–30% افزایش مییابد.
// CLAHE + پیشپردازش OpenCV
val mat = Mat()
Utils.bitmapToMat(bitmap, mat)
Imgproc.cvtColor(mat, mat, Imgproc.COLOR_RGB2GRAY)
val clahe = Imgproc.createCLAHE(2.0, Size(8.0, 8.0))
clahe.apply(mat, mat)
Imgproc.GaussianBlur(mat, mat, Size(3.0, 3.0), 0.0)
Imgproc.threshold(mat, mat, 0.0, 255.0, Imgproc.THRESH_BINARY or Imgproc.THRESH_OTSU)
val processedBitmap = Bitmap.createBitmap(mat.cols(), mat.rows(), Bitmap.Config.ARGB_8888)
Utils.matToBitmap(mat, processedBitmap)
تشخیص متن قبل از OCR — برای scene text از EAST (Efficient Accurate Scene Text Detector) یا CRAFT (Character Region Awareness for Text Detection) قبل از ارسال به OCR استفاده کنید. EAST bounding box متن را در صحنه در 5–15 میلیثانیه تشخیص میدهد. CRAFT دقیقتر است (97%) اما کندتر (50–100 میلیثانیه). تشخیص متن اجازه میدهد نواحی بدون متن حذف شوند و فقط بخشهای مرتبط به OCR ارسال شوند که پردازش کلی را سرعت میبخشد.
اسکن اسناد — رایجترین کاربرد OCR. برنامههای اسکن (CamScanner، Adobe Scan، Google Drive) از ML Kit یا Vision برای تشخیص متن از عکسهای اسناد استفاده میکنند. خط لوله معمول: تشخیص لبههای سند → اصلاح پرسپکتیو → پردازش CLAHE → OCR → قالببندی (PDF, DOCX). ML Kit Text Recognition V2 یک صفحه A4 را در 100–200 میلیثانیه پردازش میکند.
ترجمه بلادرنگ متن — ترکیب OCR و ترجمه ماشینی. Google Translate، Microsoft Translator، Yandex Translate از ML Kit یا Vision برای تشخیص متن از دوربین استفاده میکنند و ترجمه را روی متن اصلی قرار میدهند (ترجمه AR). نیاز: تاخیر < 200 میلیثانیه برای UX راحت. ML Kit V2 + NNAPI 30–80 میلیثانیه در هر فریم میدهد و فضای کافی برای ترجمه و رندر باقی میگذارد.
ورود خودکار دادهها — OCR برای استخراج دادهها از کارتهای ویزیت، کارتهای بانکی، مدارک هویتی. ML Kit متن را تشخیص میدهد، سپس پسپردازش ساختار را تجزیه میکند: نام، تلفن، ایمیل (کارت ویزیت) یا شماره کارت، تاریخ انقضا، CVV (کارتهای پرداخت). برای کارت ویزیت از عبارات منظم بعد از OCR استفاده کنید. برای کارتهای بانکی — مدلهای ML تخصصی (پرداختی، ~99% دقت).
// OCR + ترجمه AR (ساده شده)
let request = VNRecognizeTextRequest { req, _ in
guard let results = req.results as? [VNRecognizedTextObservation] else { return }
for observation in results {
let text = observation.topCandidates(1).first?.string ?? ""
let rect = observation.boundingBox
// ترجمه و رندر AR روی مستطیل
DispatchQueue.main.async {
overlayView.showTranslation(text, at: rect)
}
}
}
request.recognitionLevel = .fast
request.usesLanguageCorrection = false
OCR برای افراد با محدودیت بینایی — فناوری کمکی: برنامهها متن را از بستهبندیها، منوها، تابلوها میخوانند. از ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer) استفاده میکنند. نیاز کلیدی — بلادرنگ با تاخیر کم (< 100 میلیثانیه). Seeing AI (Microsoft) و Envision AI از این روش استفاده میکنند. برای برنامههای دسترسپذیری از حالت fast recognition استفاده کنید و بر اساس confidence فیلتر نکنید — هر متنی برای کاربر مهم است.
سوالات متداول
Text Recognition (OCR) — فناوری است که به برنامه اجازه میدهد متن را از عکسها و ویدئو "بخواند". دوربین گوشی هوشمند تصویر را میگیرد، شبکه عصبی روی دستگاه کاراکترها را تشخیص میدهد و متن قابل خواندن توسط ماشین را برمیگرداند. در برنامههای موبایل از OCR برای اسکن اسناد، ترجمه با دوربین، وارد کردن داده از کارت ویزیت و ایجاد رابطهای قابل دسترس برای افراد با محدودیت بینایی استفاده میشود.
ML Kit Text Recognition — بهترین انتخاب برای Android: دقت 96%، سرعت 10–30 میلیثانیه، 45 زبان، شتاب GPU از طریق NNAPI، متن را در هر جهتی پیدا میکند. Tesseract — جایگزین متنباز (دقت 90%، 100+ زبان، CPU)، مناسب برای دستگاههای بدون Google Play یا زبانهای نادر. برای 95% پروژهها ML Kit را انتخاب کنید — سریعتر، دقیقتر است و نیاز به پیشپردازش تصویر ندارد.
خیر، ML Kit Text Recognition، Apple Vision و Tesseract کاملاً on-device کار میکنند. ML Kit ممکن است مدل را در اولین راهاندازی دانلود کند (downloaded mode)، پس از آن آفلاین کار میکند. Apple Vision در iOS تعبیه شده است و به اینترنت نیاز ندارد. Tesseract کاملاً آفلاین است. Cloud OCR (Google Cloud Vision، AWS Textract) از طریق اینترنت کار میکنند اما در برنامههای بلادرنگ موبایل استفاده نمیشوند.
ML Kit Text Recognition V2 از 45+ زبان گروه لاتین و سیریلیک پشتیبانی میکند: انگلیسی، روسی، آلمانی، فرانسوی، اسپانیایی، ایتالیایی، پرتغالی، لهستانی، اوکراینی، رومانیایی، ترکی و دیگران. V1 (CJK) علاوه بر این از چینی، ژاپنی، کرهای پشتیبانی میکند. لیست کامل در مستندات TextRecognizerOptions موجود است. برای تشخیص عربی یا عبری از Tesseract استفاده کنید (>100 زبان).
روشهای اصلی: تراز کردن سند (اصلاح پرسپکتیو از طریق OpenCV)، بهبود کنتراست (CLAHE)، رفع تاری (unsharp mask)، نورپردازی خوب (continuous auto-exposure)، تثبیت دوربین (OIS/EIS). ML Kit خود اعوجاجهای پایه را پردازش میکند، اما برای اسناد با اعوجاج پرسپکتیو (>30 درجه) پیشپردازش دقت را 20–30% افزایش میدهد. برای ویدئو از حالت fast recognition استفاده کنید.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید