Optik karakter tanıma (OCR), bilgisayarla görme ve makine öğrenimi tekniklerini kullanarak görüntülerden karakterleri tanıma sürecidir. Bu referans uygulaması, OCR yapmak için TensorFlow Lite'ın nasıl kullanılacağını gösterir. Metin karakterlerini tanımak için OCR ardışık düzeni olarak metin algılama modeli ve metin tanıma modelinin bir kombinasyonunu kullanır.
Başlamak
TensorFlow Lite'ta yeniyseniz ve Android ile çalışıyorsanız, başlamanıza yardımcı olabilecek aşağıdaki örnek uygulamayı keşfetmenizi öneririz.
Android dışında bir platform kullanıyorsanız veya TensorFlow Lite API'lerine zaten aşina iseniz, modelleri TF Hub'dan indirebilirsiniz.
Nasıl çalışır
OCR görevleri genellikle 2 aşamaya ayrılır. İlk olarak, olası metinlerin etrafındaki sınırlayıcı kutuları algılamak için bir metin algılama modeli kullanıyoruz. İkinci olarak, sınırlayıcı kutuların içindeki belirli karakterleri belirlemek için işlenmiş sınırlayıcı kutuları bir metin tanıma modeline besliyoruz (metin tanımadan önce ayrıca Maksimal Olmayan Bastırma, perspektif dönüştürme vb. yapmamız gerekiyor). Bizim durumumuzda, her iki model de TensorFlow Hub'dandır ve FP16 nicelenmiş modellerdir.
Performans karşılaştırmaları
Performans kıyaslama numaraları burada açıklanan araçla oluşturulur.
Model adı | Model boyutu | Cihaz | İşlemci | GPU |
---|---|---|---|---|
Metin Algılama | 45.9 Mb | Piksel 4 (Android 10) | 181.93 ms* | 89,77 ms* |
Metin Tanıma | 16.8 Mb | Piksel 4 (Android 10) | 338,33 ms* | Yok** |
* 4 iplik kullanılmıştır.
** çalıştırmak için TensorFlow operasyonlarına ihtiyacımız olduğundan, bu model GPU temsilcisini kullanamadı
girişler
Metin algılama modeli, girdi olarak (1, 320, 320, 3) bir 4-D float32
kabul eder.
Metin tanıma modeli, girdi olarak (1, 31, 200, 1) 4 boyutlu bir float32
kabul eder.
çıktılar
Metin algılama modeli, sınırlayıcı kutu olarak 4-D float32
şekil Tensörü (1, 80, 80, 5) ve algılama puanı olarak 4-D float32
şekil Tensörü (1,80, 80, 5) döndürür.
Metin tanıma modeli, '0123456789abcdefghijklmnopqrstuvwxyz' alfabe listesine eşleme indeksleri olarak 2 boyutlu bir float32
şekil tensörü (1, 48) döndürür.
sınırlamalar
Geçerli metin tanıma modeli , İngilizce harfler ve sayılar içeren sentetik veriler kullanılarak eğitilir, bu nedenle yalnızca İngilizce desteklenir.
Modeller, vahşi ortamda OCR için yeterince genel değil (örneğin, düşük aydınlatma koşullarında bir akıllı telefon kamerası tarafından çekilen rastgele görüntüler).
Bu nedenle, yalnızca TensorFlow Lite ile OCR'nin nasıl yapıldığını göstermek için 3 Google ürün logosu seçtik. Kullanıma hazır, üretim sınıfı bir OCR ürünü arıyorsanız, Google ML Kit'i düşünmelisiniz. Altında TFLite kullanan ML Kiti, çoğu OCR kullanım durumu için yeterli olmalıdır, ancak TFLite ile kendi OCR çözümünüzü oluşturmak isteyebileceğiniz bazı durumlar vardır. Bazı örnekler:
- Kullanmak istediğiniz kendi metin algılama/tanıma TFLite modelleriniz var
- Özel iş gereksinimleriniz var (ör. ters çevrilmiş metinleri tanımak) ve OCR ardışık düzenini özelleştirmeniz gerekiyor
- ML Kit kapsamında olmayan dilleri desteklemek istiyorsunuz
- Hedef kullanıcı cihazlarınızda mutlaka Google Play hizmetlerinin yüklü olması gerekmez
Referanslar
- OpenCV metin algılama/tanıma örneği: https://github.com/opencv/opencv/blob/master/samples/dnn/text_detection.cpp
- Topluluk katkıda bulunanlar tarafından OCR TFLite topluluk projesi: https://github.com/tulasiram58827/ocr_tflite
- OpenCV metin algılama: https://www.pyimagesearch.com/2018/08/20/opencv-text-detection-east-text-detector/
- OpenCV Kullanarak Derin Öğrenmeye Dayalı Metin Algılama: https://learnopencv.com/deep-learning-based-text-detection-using-opencv-c-python/