2016-08-26 19 views
11

Pracuję nad aplikacją, która polega na rozpoznawaniu czcionek na podstawie znaków swobodnych użytkowników w Androidzie Canvas.Rozpoznawanie czcionek Z bezpłatnego rysowania ręcznego

W tej aplikacji użytkownik jest proszony o podanie pewnych predefiniowanych znaków w ustalonej kolejności (A,a,B,c). Na tej podstawie jest jakiś sposób na pokazanie bardzo podobnej czcionki, która pasuje do pisania strony użytkownika.

Mam zbadane na ten temat znaleźć niektóre artykuły & artykułów, ale większość z nich rozpoznaje czcionki z przechwyconego obrazu. W takim przypadku mają one wiele problemów poprzez segmentowanie akapitów, pojedynczych liter i tak dalej. Ale w moim scenariuszu wiem, jaką literę rysuje użytkownik.

mam pewną wiedzę w OpenCV i uczenia maszynowego. Potrzebujesz pomocy, jak postępować z tym problemem.

+4

Więc, w zasadzie, pytasz, jak napisać aplikację, która może powiedzieć, czy moje pismo wygląda jak "Arial" lub "Tahoma" lub "Century Gothic" lub jedna z milionów (i liczących) istniejących czcionek ?! –

Odpowiedz

-1

Proponuję za pomocą OCR biblioteki tesseract. Bardzo dobrze rozwinięty i dojrzały. Posiada również wsparcie dla szkoleń z innymi językami, których możesz użyć do uczenia zestawu czcionek.

Podejście

Trening: -

  1. Take wszystkie 26 (według alfabetu) obrazów dla czcionek n. Trenuj tessaract powyżej 26 A, następnie 26 B i wkrótce.

Testowanie: -

  1. Weźmy zdanie odrębne i wszystkie znaki.
  2. Dla każdej postaci znajdź wynik pewności (obsługiwany w bibliotece) z Tesseract. Uwaga dla znaku "a, użyj wyszkolonego modelu dla wszystkich" a "z różnych czcionek.
  3. W przypadku wszystkich znaków znajdź najlepszą czcionkę, korzystając z niektórych danych (średnia, mediana itd.). Na przykład: Możesz zsumować wynik pewności dla każdej czcionki otrzymanej dla wszystkich znaków i użyć czcionki, która uzyskała maksymalny wynik.
+0

Downvote oznacza: "ta odpowiedź nie jest przydatna". Nie mój DV, ale zdecydowanie zgadzam się, że to nie jest użyteczne. Tesseract nie jest przeznaczony do używania z odręcznymi postaciami – Miki

+0

@Miki: Dziękuję za odpowiedź.Zobacz: http://stackoverflow.com/questions/12310287/tesseract-handwriting-with-dictionary-training. Ponadto, w przypadku OCR, rozpoznawanie pisma ręcznego online jest świetne (http://stackoverflow.com/questions/12393358/free-hand-character-recognition-in-android), ale tutaj już wiemy, że użytkownik napisał jaką postać. Jeśli funkcja rozpoznawania pisma w trybie online jest w stanie zarejestrować subtelną różnicę w kształtach postaci podczas pisania, byłaby znacznie lepsza, w przeciwnym razie myślę, że Tesseract jest drogą. Jestem otwarty na wszelkie myśli, które możesz mieć. Dziękuję Ci. – saurabheights

+0

Typo: Jeśli funkcja rozpoznawania pisma w trybie online jest w stanie ** przeanalizować ** subtelną różnicę w kształcie postaci podczas pisania, byłoby znacznie lepiej, w przeciwnym razie myślę, że Tesseract jest drogą. Subtelne różnice wymagałyby sprawdzenia struktury postaci, w której Tesseract jest dobry. – saurabheights

0

Można znaleźć ten artykuł bardzo interesujący: https://erikbern.com/2016/01/21/analyzing-50k-fonts-using-deep-neural-networks/

wydaje się całkiem prosta głęboka nauka uczenia nadzorowanego problem.

wygenerować mnóstwo losowo odkształconych próbek do liter każdego rodzaju czcionki docelowej, a trenować convnet o tym zestawie?

Ideałem byłoby mieć ogromny zbiór oznaczonego, pisma do danych czcionek, ale czuje się mało prawdopodobne.

Można również użyć wygenerowanego, progresywnego do kodu czcionki, aby pobrać kilka odręcznych próbek i przekształcić je tak, aby wyglądały bardziej jak wybrana czcionka jako zbiór danych.

To jest dobre miejsce na rozpoczęcie: https://github.com/fchollet/keras/blob/master/examples/mnist_cnn.py Rozpoznawanie liter cyfr za pomocą konektorów.

To jest trochę pracy, choć jeśli nie pracował z tych rzeczy wcześniej.

1

Nie jest dla mnie jasne, co chcesz osiągnąć za pomocą aplikacji, ale zakładam, że próbujesz wydrukować czcionkę z bazy danych czcionek, która najbardziej pasuje do pisma odręcznego użytkownika.

W uczeniu maszynowym byłby to problem z klasyfikacją. Numer klasy będzie równy liczbie różnych czcionek w bazie danych.

Można to rozwiązać za pomocą narzędzia Convolutional neural network, które są szeroko stosowane do zadań związanych z rozpoznawaniem obrazów i wideo. Jeśli nigdy nie zaimplementowałeś CNN, zanim zasugeruję, abyś sprawdził te zasoby, aby dowiedzieć się o Torch, który jest łatwym do uruchomienia zestawem narzędzi do implementacji CNN. (Oczywiście istnieje więcej Konstrukcje takie jak: Tensor Flow, Caffe, Lasagne ...)

Główną przeszkodą będzie musiał stawić czoła jest Neural Sieci potrzebują tysięcy obrazów (>100.000), aby odpowiednio je szkolić i osiągnąć zadowalające wyniki. Co więcej, potrzebujesz nie tylko obrazów, ale także prawidłowej etykiety dla każdego obrazu. Powiedzą, że potrzebujesz obrazu treningowego, takiego jak odręczny znak i odpowiadająca mu czcionka, którą najbardziej pasuje do Twojej bazy danych jako etykiety.

Sugeruję, aby przeczytać o tak zwanym transfer learning, który może dać ci początkowy impuls, ponieważ nie musisz samodzielnie konfigurować modelu CNN. Ponadto ludzie mają taki model do pokrewnego zadania, aby zapewnić sobie dodatkowy czas, ponieważ nie trzeba go trenować przez wiele godzin na GPU. (zob. CUDA)

Doskonałym zasobem na początek jest artykuł: How transferable are features in deep neural networks?, który może być pomocny z podanych powodów.

Aby uzyskać ton szkolenia i danych testowych można sprawdzić następujące otwarte zbiory danych, które zapewniają wszystkie rodzaje znaków, które mogą być pomocne dla zadania:

Aby uzyskać dostęp do wielu czcionek, a może nawet możliwość stworzenia kolejnych zestawów danych na własną rękę można rzucić okiem na Google Fonts.