Współrzędne tekstu w ramce na obrazie

Dec 18 2020

Chciałbym uzyskać współrzędne tekstu w ramce na obrazie. Akapity mają cienkie czarne obramowanie. Reszta obrazu zawiera zwykłe akapity i szkice.

Oto przykład:

Czy masz pojęcie, jakiego rodzaju algorytmów powinienem użyć w Pythonie z biblioteką obrazów, aby to osiągnąć? Dzięki.

Odpowiedzi

2 alecxe Dec 18 2020 at 18:02

Kilka pomysłów na wykrycie tekstu w ramce, który w dużej mierze sprowadza się do wyszukiwania ramek / prostokątów o znacznej wielkości:

  • znajduj kontury za pomocą OpenCV, analizuj kształty za pomocą algorytmu aproksymacji wielokątów (znanego również jako algorytm Ramera – Douglasa – Peuckera ). Możesz dodatkowo sprawdzić proporcje ramki ograniczającej, aby upewnić się, że kształt jest prostokątem, a także sprawdzić szerokość strony, ponieważ wydaje się, że jest to znana miara w Twoim przypadku. PyImageSearch napisał ten niesamowity artykuł:cv2.approxPolyDP()

    • Wykrywanie kształtu OpenCV
  • w powiązanym pytaniu pojawia się również sugestia, aby zajrzeć do Hough Lines w celu wykrycia linii poziomej, wykonując w ten sam sposób wykrywanie linii pionowych. Nie jestem w 100% pewien, jak niezawodne byłoby to podejście.


Po znalezieniu ramek następnym krokiem byłoby sprawdzenie, czy nie ma w nich tekstu. Wykrywanie tekstu to ogólnie szerszy problem i można to zrobić na wiele sposobów. Oto kilka przykładów:

  • zastosuj detektor tekstu EAST

  • PixelLink

  • tesseract (np. via pytesseract), ale nie jestem pewien, czy nie spowodowałoby to zbyt wielu fałszywych alarmów

  • jeśli jest to prostszy przypadek, gdy pola są puste lub nie, możesz sprawdzić średnie wartości pikseli w środku - np cv2.countNonZero(). za pomocą . Przykłady:

    • Jak zidentyfikować pusty prostokąt za pomocą OpenCV
    • Policz czarne piksele za pomocą OpenCV

Dodatkowe odniesienia:

  • pomysły dotyczące wykrywania czworokątów / prostokątów przy użyciu konwolucyjnych sieci neuronowych