OCR נייד: זיהוי טקסט בזמן אמת באמצעות מצלמה

זיהוי טקסט באמצעות מצלמת סמארטפון נכשל לעיתים קרובות בתמונות מטושטשות או בתאורה חלשה. אנו בונים פתרונות OCR לאפליקציות מובייל שמעבדים תמונות כראוי לפני הזיהוי. הצוות שלנו מספק את הפרויקט במפתח מלא—מבחירת אלגוריתמי עיבוד מקדים ועד לפריסה ותמיכה שוטפת, תוך הבטחת ביצועים אמינים גם עם המסמכים המורכבים ביותר.

פיתוח ותמיכה בכל סוגי היישומים הניידים:

יישומים ניידים למידע ובידור
אפליקציות חדשות, משחקים, מדריכים, קטלוגים מקוונים, אפליקציות מזג אוויר, אפליקציות כושר ובריאות, אפליקציות נסיעות, אפליקציות חינוכיות, רשתות חברתיות ומסנג'רים, חידונים, בלוגים ופודקאסטים, פורומים, אגרגטורים
יישומים ניידים למסחר אלקטרוני
חנויות מקוונות, אפליקציות B2B, מרקטפלייסים, בורסות מקוונות, שירותי קאשבק, בורסות, פלטפורמות דרופשיפינג, תוכניות נאמנות, משלוחי מזון ומוצרים, מערכות תשלום.
יישומים ניידים לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, ניהול פרויקטים, כלים לצוותי מכירות, ניהול פיננסי, ניהול ייצור, ניהול לוגיסטיקה ומשלוחים, ניהול משאבי אנוש, מערכות ניטור נתונים
יישומים ניידים לשירותים אלקטרוניים
פלטפורמות מודעות מסווגות, בתי ספר מקוונים, בתי קולנוע מקוונים, פלטפורמות שירות אלקטרוניות, פלטפורמות קאשבק, אירוח וידאו, פורטלים נושאיים, פלטפורמות הזמנות ותזמון מקוונות, פלטפורמות מסחר מקוונות

אלה הם רק חלק מסוגי היישומים הניידים שאנו עובדים איתם, ולכל אחד מהם עשויים להיות מאפיינים ופונקציונליות ספציפיים משלו, המותאמים לצרכים ולמטרות הספציפיות של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
OCR נייד: זיהוי טקסט בזמן אמת באמצעות מצלמה
בינוני
~2-3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית מובייל עבור FEEDME
    פיתוח אפליקציית מובייל עבור FEEDME
    971
  • פיתוח אפליקציית מובייל עבור XOOMER
    פיתוח אפליקציית מובייל עבור XOOMER
    869
  • פיתוח אפליקציית מובייל עבור RHL
    פיתוח אפליקציית מובייל עבור RHL
    1289
  • פיתוח אפליקציית מובייל עבור ZIPPY
    פיתוח אפליקציית מובייל עבור ZIPPY
    1143
  • פיתוח אפליקציית מובייל עבור Affhome
    פיתוח אפליקציית מובייל עבור Affhome
    1076
  • פיתוח אפליקציית מובייל עבור חברת FLAVORS
    פיתוח אפליקציית מובייל עבור חברת FLAVORS
    677

משתמש מכוון מצלמה לקבלה דהויה באור עמום. ללא עיבוד מקדים של התמונה, ספריות OCR סטנדרטיות מייצרות עד 50% שגיאות. הפתרון הוא החלת מתיחת ניגודיות (vImageContrastStretch ב-iOS, OpenCV באנדרואיד) ובינאריזציה בשלב הצילום. רק אז להזין את הפריים ל-VNRecognizeTextRequest או ML Kit Text Recognition. בניסיון שלנו, שרשרת זו מעלה את הדיוק מ-70% ל-98-99% על טקסט מודפס.

במשך יותר מחמש שנים, סיפקנו יותר מ-20 פרויקטי OCR לקמעונאות (תגי מחיר וקבלות), לוגיסטיקה (מעקב אחר שטרי מטען) ופינטק (אימות נתוני דרכון). לכל פרויקט היו סט מסננים ושלבי עיבוד משלו. טעות נפוצה היא לצפות מספריית ה-OCR לתוצאות מושלמות ללא התאמות. ללא עיבוד מקדים של התמונה ועיבוד תוצאות, הדיוק יורד ל-50–70%. לכן, השלב הראשון בכל פרויקט הוא איסוף דוגמאות מסמכים אמיתיות ובדיקתן.

מדוע עיבוד מקדים הוא קריטי לדיוק OCR

עיבוד מקדים הוא שלב מפתח הקובע את הדיוק הסופי. בתאורה חלשה או בטשטוש, אנו משתמשים ב:

  • שיפור ניגודיות באמצעות vImageContrastStretch (iOS) או OpenCV (אנדרואיד).
  • המרה לגווני אפור ולאחר מכן AdaptiveThreshold.
  • Sharpen CIFilter לפני הזנה ל-OCR.

עבור טקסט בכתב יד, מסגרות סטנדרטיות מציגות דיוק של 40–60%. במקרים כאלה, מודלים מותאמים אישית המבוססים על TensorFlow Lite עוזרים — זו משימה נפרדת הדורשת נתונים מתויגים ואימון.

כיצד פועלות מסגרות OCR מקוריות

iOS: Vision + VNRecognizeTextRequest

מאז iOS 13, מסגרת Vision יכולה לזהות טקסט במצב לא מקוון. VNRecognizeTextRequest תומכת בשני מצבים: .fast (משוער, מיידי) ו-.accurate (איטי יותר אך מדויק ב-15% עבור גופנים מורכבים). עבור גופנים מורכבים, מצב .accurate נותן שיפור דיוק של 15%.

func recognizeText(in image: UIImage) {
    guard let cgImage = image.cgImage else { return }
    let request = VNRecognizeTextRequest { [weak self] request, error in
        guard let observations = request.results as? [VNRecognizedTextObservation] else { return }
        let text = observations.compactMap { $0.topCandidates(1).first?.string }.joined(separator: "\n")
        DispatchQueue.main.async {
            self?.handleRecognized(text: text)
        }
    }
    request.recognitionLevel = .accurate
    request.usesLanguageCorrection = true
    request.recognitionLanguages = ["ru-RU", "en-US"] // порядок = приоритет
    let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
    try? handler.perform([request])
}

func recognizeText(in image: UIImage) { guard let cgImage = image.cgImage else { return } let request = VNRecognizeTextRequest { [weak self] request, error in guard let observations = request.results as? [VNRecognizedTextObservation] else { return } let text = observations.compactMap { $0.topCandidates(1).first?.string }.joined(separator: "\n") DispatchQueue.main.async { self?.handleRecognized(text: text) } } request.recognitionLevel = .accurate request.usesLanguageCorrection = true request.recognitionLanguages = ["ru-RU", "en-US"] // порядок = приоритет let handler = VNImageRequestHandler(cgImage: cgImage, options: [:]) try? handler.perform([request]) } עוזר עם שגיאות הקלדה, אך לפעמים "מתקן" קיצורים ומספרי פריטים — עבור מסמכים טכניים עדיף להשבית אותו.

אנדרואיד: ML Kit Text Recognition v2

usesLanguageCorrection תומך בלטינית, קירילית, סינית, יפנית וקוריאנית באמצעות מודולים נפרדים. הוא מוריד בשימוש ראשון (~5 MB ללטינית).

val recognizer = TextRecognition.getClient(
    TextRecognizerOptions.DEFAULT_OPTIONS // или RussianTextRecognizerOptions
)
val image = InputImage.fromBitmap(bitmap, 0)
recognizer.process(image)
    .addOnSuccessListener { visionText ->
        val fullText = visionText.textBlocks
            .joinToString("\n") { block -> block.text }
        handleRecognized(fullText)
    }
    .addOnFailureListener { e ->
        handleError(e)
    }

ML Kit מחזיר גם תיבות תחום (bounding boxes) עבור כל בלוק טקסט — שימושי להדגשת אזורים שזוהו בממשק המשתמש.

מצב חי: טקסט בזמן אמת מזרם וידאו

עבור שכבת-על חיה (טקסט מודגש ישירות בזרם הווידאו) ב-iOS אנו משתמשים ב-com.google.mlkit:text-recognition + val recognizer = TextRecognition.getClient( TextRecognizerOptions.DEFAULT_OPTIONS // или RussianTextRecognizerOptions ) val image = InputImage.fromBitmap(bitmap, 0) recognizer.process(image) .addOnSuccessListener { visionText -> val fullText = visionText.textBlocks .joinToString("\n") { block -> block.text } handleRecognized(fullText) } .addOnFailureListener { e -> handleError(e) } :

// Delegate метод AVCaptureVideoDataOutput
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
    guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }
    // Не запускаем новый запрос, если предыдущий ещё не завершён
    guard !isProcessing else { return }
    isProcessing = true
    let request = VNRecognizeTextRequest { [weak self] request, _ in
        defer { self?.isProcessing = false }
        // обработка результатов...
    }
    request.recognitionLevel = .fast // для live важна скорость
    try? VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:]).perform([request])
}

דגל AVCaptureSession הוא חובה — בלעדיו ב-30 FPS, תור הבקשות מצטבר והזיכרון גדל עד לקריסה.

באנדרואיד — CMSampleBuffer + // Delegate метод AVCaptureVideoDataOutput func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) { guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return } // Не запускаем новый запрос, если предыдущий ещё не завершён guard !isProcessing else { return } isProcessing = true let request = VNRecognizeTextRequest { [weak self] request, _ in defer { self?.isProcessing = false } // обработка результатов... } request.recognitionLevel = .fast // для live важна скорость try? VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:]).perform([request]) } . ML Kit מותאם לעבודה ישירה עם isProcessing ללא המרה ל-Bitmap.

פרמטר זיהוי סטטי זיהוי חי
מהירות עיבוד 100-200 אלפיות השנייה עד 30 אלפיות השנייה לפריים
דיוק עד 99% עד 95% (בשל פשרה על מהירות)
צריכת סוללה נמוכה בינונית (עיבוד רציף)
יישום סריקת מסמכים, קבלות הפניית מצלמה לכרטיסי ביקור, לוחיות רישוי

שיפור איכות הזיהוי בתנאים קשים

שיפור ניגודיות ובינאריזציה הם טכניקות סטנדרטיות. עבור מסמכים ספציפיים (למשל, קבלות דהויות), אנו מוסיפים מסננים מותאמים אישית.

טעויות אינטגרציה נפוצות:

  • שכחת דגל CameraX במצב חי → דליפת זיכרון.
  • השארת ImageAnalysis.Analyzer מופעל עבור טקסטים טכניים → משחית קיצורים.
  • אי בדיקת חפיפת תיבות תחום עם ממשק המשתמש → טקסט מוצג על גבי הממשק.

עיבוד תוצאות: מטקסט גולמי לנתונים מובנים

פלט OCR גולמי הוא זרם של מחרוזות. רוב המשימות דורשות מבנה:

  • קבלות: חילוץ שורות עם מחירים באמצעות regex, ניתוח הסכום הסופי.
  • כרטיסי ביקור: ImageProxy (iOS) או NSDataDetector (אנדרואיד) עבור טלפונים, אימיילים וכתובות.
  • דרכונים/מסמכים: אזור MRZ נקרא לפי תקן ICAO 9303, קיימים מנתחים.
  • לוחיות רישוי: משימה נפרדת — עדיף להשתמש במודלים ייעודיים (OpenALPR, PlateRecognizer API).

עבור טקסט קירילי באיכות ירודה, עיבוד מקדים עוזר: הגברת ניגודיות באמצעות Patterns, גווני אפור, vImageContrastStretch CIFilter לפני OCR.

השוואת מסגרות מקוריות

פרמטר Vision (iOS) ML Kit (אנדרואיד)
מצבים .fast, .accurate מודל בסיסי
שפות עד 15 בבקשה אחת מודולים: לטינית, קירילית, סינית, יפנית, קוריאנית
לא מקוון כן כן (מודל ~5 MB)
דיוק על מודפס ~98% ~97%
תיבות תחום כן כן
מהירות (Full HD) 100-200 אלפיות השנייה 80-150 אלפיות השנייה
לחצו לפרטים נוספים על טכניקות עיבוד מקדים

לתנאים קיצוניים, אנו משתמשים בסף אדפטיבי (למשל, Sharpen עם גודל בלוק 11) ופעולות מורפולוגיות להסרת רעש. שלבים אלה יכולים לשפר את הדיוק בעוד 10-15%.

תוצרים הנכללים בפיתוח

בהזמנת שירות זה, אתה מקבל:

  • אינטגרציה של Vision או ML Kit לתוך האפליקציה שלך.
  • כוונון פרמטרי זיהוי עבור סוג המסמך שלך.
  • מצב חי עם הדגשת טקסט על המצלמה (אופציונלי).
  • עיבוד נתונים: ניתוח קבלות, כרטיסי ביקור, מספרים.
  • תיעוד אינטגרציה ובדיקות.
  • תמיכה במהלך בדיקת App Store / Google Play.

תהליך העבודה

  1. הגדרת מקרי שימוש: סוגי מסמכים, שפות, צורך במצב חי או רק בתמונה סטטית.
  2. יישום לכידת תמונה (מצלמה + גלריה), עיבוד מקדים.
  3. אינטגרציית OCR: Vision/ML Kit מקורי או ענן (Google Vision API, AWS Textract) אם נדרש דיוק גבוה יותר למסמכים מורכבים.
  4. עיבוד תוצאות למשימה הספציפית: מבנה נתונים, regex, NER.
  5. בדיקה על דוגמאות אמיתיות בתנאי תאורה שונים.

הערכות לוחות זמנים

זיהוי טקסט סטטי בסיסי באמצעות מסגרת מקורית — 2-3 ימים (החל מ-$2,000). מצב חי עם שכבת-על + מבנה נתונים לסוג מסמך ספציפי — 1-2 שבועות (כ-$5,000–$8,000). תרחישים מורכבים עם מודלים מותאמים אישית — מחודש (תקציב $15,000+). צור קשר להערכה מדויקת לפרויקט שלך.

הדיוק המובטח שלנו על טקסט מודפס הוא 98% עם עיבוד מקדים; אנו מספקים אינטגרציה מוסמכת עם תוצאות מתועדות. ניסיון של למעלה מ-5 שנים מבטיח מסירת פרויקט אמינה.

קבל ייעוץ לפרויקט שלך — נבחר את הפתרון האופטימלי. צור קשר כדי לדון במשימה שלך ולהעריך את עלות פיתוח ה-OCR לאפליקציה שלך. הפתרון שלנו תומך ב-OCR רב-לשוני לא מקוון כולל רוסית, אנגלית, סינית ויפנית.