Optyczne rozpoznawanie znaków (OCR) to proces rozpoznawania znaków z obrazów przy użyciu technik widzenia komputerowego i uczenia maszynowego. Ta aplikacja referencyjna pokazuje, jak używać TensorFlow Lite do wykonywania OCR. Wykorzystuje połączenie modelu wykrywania tekstu i modelu rozpoznawania tekstu jako potoku OCR do rozpoznawania znaków tekstowych.
Zaczynaj
Jeśli jesteś nowy w TensorFlow Lite i pracujesz z systemem Android, zalecamy zapoznanie się z poniższą przykładową aplikacją, która może pomóc w rozpoczęciu pracy.
Jeśli korzystasz z platformy innej niż Android lub znasz już interfejsy API TensorFlow Lite , możesz pobrać modele z TF Hub .
Jak to działa
Zadania OCR są często podzielone na 2 etapy. Najpierw używamy modelu wykrywania tekstu do wykrywania ramek ograniczających wokół możliwych tekstów. Po drugie, wprowadzamy przetworzone ramki ograniczające do modelu rozpoznawania tekstu, aby określić określone znaki wewnątrz ramek ograniczających (musimy również wykonać niemaksymalną eliminację, transformację perspektywiczną itp. przed rozpoznaniem tekstu). W naszym przypadku oba modele pochodzą z TensorFlow Hub i są to modele skwantyzowane FP16.
Testy wydajności
Liczby testów wydajności są generowane za pomocą narzędzia opisanego tutaj .
Nazwa modelu | Rozmiar modelu | Urządzenie | procesor | GPU |
---|---|---|---|---|
Wykrywanie tekstu | 45,9 Mb | Piksel 4 (Android 10) | 181,93 ms* | 89,77 ms* |
Rozpoznawanie tekstu | 16,8 Mb | Piksel 4 (Android 10) | 338,33 ms* | nie dotyczy** |
* 4 wątki użyte.
** ten model nie mógł używać delegata GPU, ponieważ do jego uruchomienia potrzebujemy operacji TensorFlow
Wejścia
Model wykrywania tekstu akceptuje tensor 4-D float32
(1, 320, 320, 3) jako dane wejściowe.
Model rozpoznawania tekstu akceptuje tensor 4-D float32
o wartości (1, 31, 200, 1) jako dane wejściowe.
Wyjścia
Model wykrywania tekstu zwraca tensor kształtu 4-D float32
(1, 80, 80, 5) jako obwiednię i tensor kształtu 4-D float32
(1,80, 80, 5) jako wynik wykrywania.
Model rozpoznawania tekstu zwraca tensor kształtu 2D float32
(1, 48) jako indeksy mapowania do listy alfabetycznej „0123456789abcdefghijklmnopqrstuvwxyz”
Ograniczenia
Bieżący model rozpoznawania tekstu jest szkolony przy użyciu danych syntetycznych z angielskimi literami i cyframi, więc obsługiwany jest tylko język angielski.
Modele nie są wystarczająco ogólne do OCR na wolności (powiedzmy, przypadkowe zdjęcia zrobione aparatem smartfona w warunkach słabego oświetlenia).
Dlatego wybraliśmy 3 logo produktów Google tylko po to, aby zademonstrować, jak wykonać OCR za pomocą TensorFlow Lite. Jeśli szukasz gotowego do użycia produktu OCR klasy produkcyjnej, powinieneś rozważyć zestaw Google ML Kit . ML Kit, który wykorzystuje TFLite pod spodem, powinien wystarczyć w większości przypadków użycia OCR, ale są też przypadki, w których możesz chcieć zbudować własne rozwiązanie OCR za pomocą TFLite. Oto kilka przykładów:
- Masz własne modele TFLite do wykrywania/rozpoznawania tekstu, których chciałbyś użyć
- Masz specjalne wymagania biznesowe (tj. rozpoznawanie tekstów odwróconych do góry nogami) i musisz dostosować potok OCR
- Chcesz obsługiwać języki, których nie obejmuje ML Kit
- Twoje docelowe urządzenia użytkownika niekoniecznie mają zainstalowane usługi Google Play
Bibliografia
- Przykład wykrywania/rozpoznawania tekstu OpenCV: https://github.com/opencv/opencv/blob/master/samples/dnn/text_detection.cpp
- Projekt społeczności OCR TFLite autorstwa współtwórców społeczności: https://github.com/tulasiram58827/ocr_tflite
- Wykrywanie tekstu OpenCV: https://www.pyimagesearch.com/2018/08/20/opencv-text-detection-east-text-detector/
- Wykrywanie tekstu oparte na głębokim uczeniu za pomocą OpenCV: https://learnopencv.com/deep-learning-based-text-detection-using-opencv-c-python/