2012-02-17 14 views
6

Mam na myśli aplikację, którą chcę produkować. Mamy tablice rozkładowe montowane na ścianie, które są podzielone na małe prostokąty za pomocą czarnych linii na białym tle. Magnetyczne plakietki są umieszczane w określonej partycji, aby wskazać, że ta osoba ma pracować w tej komórce. Ten system działa bardzo dobrze na komunikację między ludźmi, ale chciałbym automatycznie uzyskać automatyczne zapisywanie informacji o harmonogramie w bazie danych.Metody Open Source do przetwarzania obrazu OCR w czasie rzeczywistym?

Mam wizualizację systemu, w którym kamera jest ustawiona na stałe, koncentrując się na planszy. Okresowo kamera wykona zdjęcie tablicy. Chcę napisać kod do rozszyfrowania, które tagi są w jakim obszarze. Wymagałoby to trochę OCR lub rozpoznawania symbolu. Na każdej plakietce znajdują się duże liczby, których użyję do zidentyfikowania osoby, której nazwa jest taka.

Naturalnie przechodzę do Pythona przy rozwiązywaniu nowego problemu programistycznego. Znalazłem ten post ->python image recognition, który wygląda jak dobre miejsce do rozpoczęcia (z PIL i numpy).

Czy znasz dobry sposób na zrobienie tego?

Aktualizacja: Próbowałem SimpleCV i na razie wygląda dobrze.

+2

Można, jak sądzę, ułatwić sobie zadanie, dodając kod kreskowy do plakietek lub zapisując cyfry czcionką zaprojektowaną w celu ułatwienia rozpoznawania OCR. –

Odpowiedz

4

Jest to dość trudny problem, nawet jeśli wygląda na dość prosty. Ale możesz zrobić to o wiele łatwiej, robiąc pewne rzeczy na obraz, aby to ułatwić. Mam następujące sugestie:

  • Postaraj się, aby kamera patrzyła prosto na planszę za pomocą obiektywu w sposób rozsądny, tak aby minimalna deformacja obrazu na krawędziach i brak zniekształceń perspektywy.
  • Biorąc pod uwagę, że będziesz kręcić sporadyczne zdjęcie do analizy, uważam, że wydajność w żaden sposób nie stanowi problemu, więc rób zdjęcia w wysokiej rozdzielczości, z lampą błyskową lub z długim czasem naświetlania (ponieważ wszystko, co robisz, jest nieruchome), aby uzyskać najlepszą możliwą jakość obrazu.
  • Jeśli liczba różnych tagów, których się spodziewasz, nie jest zbyt duża, możesz łatwiej próbować dopasować obrazy referencyjne tych tagów na obrazku poprzez template matching niż używać pełnego OCR liczb. O wiele łatwiej jest pracować, jeśli Twój wizerunek jest wystarczająco dobry. The python opencv interface jest bardzo kompletny.
  • Mark o wysokiej wydajności ma dobry komentarz do pytania dotyczącego włączenia barcodes do tagów. Dodałbym opcję QR codes, ale to jest to samo. Oba są łatwe do wykrycia i istnieją dobre biblioteki, które pomogą ci je przeczytać.
  • Jeśli zdecydujesz, że potrzebujesz OCR, powinieneś zajrzeć do dostępnych pakietów OCR, a nie wypróbować własnego. Wypróbuj pytesser dla silnika tesseract lub OCRopuspython interface.
+0

Z mojego doświadczenia z bardzo podobną konfiguracją przechwytywania obrazów, flash jest często bardzo niepomocny, jeśli powierzchnia, którą próbujesz sfotografować, jest bardzo refleksyjna, ponieważ na przykład większość tablic jest, a lampa błyskowa znajduje się w tym samym miejscu, co aparat fotograficzny. Ale dobre oświetlenie, jakkolwiek by nie było, jest najbardziej użyteczne. –

+0

Tak, jeśli używasz lampy błyskowej, powinieneś ustawić pozycję, aby refleksy b nie stały się problemem. Generalnie powinieneś zacząć od tak dobrego obrazu, jak tylko potrafisz. –

+0

Podoba mi się pomysł kodów kreskowych lub kodów QR. Być może wyraźna granica dla każdego tagu z kodem kreskowym. –

2

Odkąd wspomniałeś, że chciałbyś użyć Pythona do tego problemu, być może mógłbyś spojrzeć na SimpleCV. Zapewni to łatwy sposób na pobranie obrazu z aparatu i wykonanie podstawowego przetwarzania obrazu.

0

Zdecydowanie zgadzam się z Jillem de Wittem, że OCR byłoby wyjątkowo trudnym zadaniem do analizy obrazu, które rozwijałoby się od zera. Odczyt kodów byłby lepszym rozwiązaniem, ale będzie to również trudne do zaprogramowania i wymagać będzie zaawansowanego lub nieco trudnego obrazowania, jak zauważyli inni. Jednak dla tej aplikacji naprawdę nie trzeba wdrażać OCR lub formalne kody kreskowe, QR lub inne kody 2d.

Ponieważ Twoja aplikacja jest ograniczona do ograniczonej liczby celów, być może możesz utworzyć własny prosty kod. Na przykład możesz umieścić od 0 do 4 dużych kropek w tablicy 2x2 po nazwie każdej osoby. Ten prosty przykład kodu jednoznacznie identyfikuje 16 unikalnych tagów, a funkcje będą znacznie łatwiejsze do obrazowania, ekstrakcji i dekodowania niż formalne kody. Dodaj linię lokalizatora, jeśli pozycja kodu nie jest spójna.

Powiązane problemy