[PYTHON] Gepunktete Linie als durchgezogene Linie mit Camelot verarbeiten (Huff-Konvertierung)

Einführung

camelot ist nicht gut in gepunkteten Linien und versagt oft. Als ich es nachgeschlagen habe, habe ich den folgenden Referenzartikel gefunden

Da Camelot mit opencv extrahiert wird, können Sie die gepunktete Linie anscheinend neu schreiben. Ich habe die gepunktete Linie mit Huff-Konvertierung extrahiert und mit der durchgezogenen Linie überschrieben, und es hat funktioniert.

Referenz

Die Verwendung von Python erleichtert das Analysieren von PDFs mit Text ... Ich hatte eine Zeit, in der ich so dachte

[Gepunktete Linie als durchgezogene Linie mit Camelot verarbeiten](https://needtec.sakura.ne.jp/wod07672/2020/05/03/camelot%e3%81%a7%e7%82%b9%e7%b7%9a % e3% 82% 92% e5% ae% 9f% e7% b7% 9a% e3% 81% a8% e3% 81% 97% e3% 81% a6% e5% 87% a6% e7% 90% 86% e3 % 81% 99% e3% 82% 8b /)

Ich werde das gepunktete PDF neben diesem Artikel verwenden

https://github.com/mima3/yakusyopdf/blob/master/20200502/%E5%85%B5%E5%BA%AB%E7%9C%8C.pdf

Huff-Konvertierung

Lineare Erkennung durch Huff-Konvertierung von OpenCV

data1.png

Geradextraktion mit Huff-Konvertierung

houghline.png

PDF der Liste der Mitgliedsgeschäfte von Go To Eat in Chiba

data1(1).png

Extrahieren Sie nur horizontale gerade Linien mit Huff-Konvertierung

houghline(1).png

Programm

import cv2
import numpy as np

import camelot

#Patch-Erstellung

def my_threshold(imagename, process_background=False, blocksize=15, c=-2):

    img = cv2.imread(imagename)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    edges = cv2.Canny(gray, 50, 150, apertureSize=3)

    lines = cv2.HoughLinesP(
        edges, rho=1, theta=np.pi / 180, threshold=80, minLineLength=3000, maxLineGap=50
    )

    for line in lines:
        x1, y1, x2, y2 = line[0]
        #Y1 wenn horizontal==y2, x1 für vertikal==Filtern nach x2 wenn
        cv2.line(img, (x1, y1), (x2, y2), (0, 0, 0), 1) 

    if process_background:
        threshold = cv2.adaptiveThreshold(
            gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, blocksize, c
        )
    else:
        threshold = cv2.adaptiveThreshold(
            np.invert(gray),
            255,
            cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
            cv2.THRESH_BINARY,
            blocksize,
            c,
        )
    return img, threshold

camelot.parsers.lattice.adaptive_threshold = my_threshold

tables = camelot.read_pdf("data.pdf", pages="all")

tables[0].df

Vor der Patch-Beschreibung

Da der gepunktete Linienteil nicht reagiert, ist er vertikal verbunden Screenshot_2020-11-04 Google Colaboratory(1).png

Nach Patchbeschreibung

Screenshot_2020-11-04 Google Colaboratory.png

Recommended Posts

Gepunktete Linie als durchgezogene Linie mit Camelot verarbeiten (Huff-Konvertierung)
Visualisieren Sie mit Cytoscape 2 Eisenbahnstreckendaten als Grafik
Verarbeiten Sie die Dateien im Ordner in der Reihenfolge mit dem Shell-Skript
Töte den Prozess mit sudo kill -9
[Python] Erstellen Sie ein Programm, das Zeilenumbrüche in der Zwischenablage löscht. + Als Verknüpfung mit Fenstern registrieren
Verarbeiten Sie den Inhalt der Datei der Reihe nach mit einem Shell-Skript
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
[Einführung in die Udemy Python3 + -Anwendung] 47. Verarbeiten Sie das Wörterbuch mit einer for-Anweisung
Ich habe GAN mit Keras gemacht, also habe ich ein Video des Lernprozesses gemacht.