camelot에서 점선을 실선으로 처리(허프 변환)
소개
camelot은 점선이 약하고 잘 실패하기 때문에 조사해 보면 아래의 참고 기사를 발견했습니다.
camelot은 opencv로 추출하고 있기 때문에 점선을 다시 쓰면 좋을 것 같습니다.
참고
Python을 사용하면 텍스트를 포함한 PDF의 해석은 간단하다・・・그렇게 생각하고 있던 시기가 나에게도 있었습니다
camelot에서 점선을 실선으로 처리
이 기사 옆의 점선 PDF를 사용하겠습니다.
허프 변환
OpenCV의 허프 변환에 의한 직선 검출
허프 변환으로 직선 추출
지바의 Go To Eat 가맹점 일람의 PDF
허프 변환으로 수평 직선만 추출
프로그램
import cv2
import numpy as np
import camelot
# パッチ作成
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 == y2、垂直の場合はx1 == x2のifでフィルタする
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
패치 적요 전
점선 부분이 반응하지 않기 때문에 세로로 결합되어 버리고 있다
패치 적요 후
Reference
이 문제에 관하여(camelot에서 점선을 실선으로 처리(허프 변환)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/barobaro/items/af850ac29dbc983eb39b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Python을 사용하면 텍스트를 포함한 PDF의 해석은 간단하다・・・그렇게 생각하고 있던 시기가 나에게도 있었습니다
camelot에서 점선을 실선으로 처리
이 기사 옆의 점선 PDF를 사용하겠습니다.
허프 변환
OpenCV의 허프 변환에 의한 직선 검출
허프 변환으로 직선 추출
지바의 Go To Eat 가맹점 일람의 PDF
허프 변환으로 수평 직선만 추출
프로그램
import cv2
import numpy as np
import camelot
# パッチ作成
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 == y2、垂直の場合はx1 == x2のifでフィルタする
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
패치 적요 전
점선 부분이 반응하지 않기 때문에 세로로 결합되어 버리고 있다
패치 적요 후
Reference
이 문제에 관하여(camelot에서 점선을 실선으로 처리(허프 변환)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/barobaro/items/af850ac29dbc983eb39b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
허프 변환으로 수평 직선만 추출
프로그램
import cv2
import numpy as np
import camelot
# パッチ作成
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 == y2、垂直の場合はx1 == x2のifでフィルタする
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
패치 적요 전
점선 부분이 반응하지 않기 때문에 세로로 결합되어 버리고 있다
패치 적요 후
Reference
이 문제에 관하여(camelot에서 점선을 실선으로 처리(허프 변환)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/barobaro/items/af850ac29dbc983eb39b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import cv2
import numpy as np
import camelot
# パッチ作成
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 == y2、垂直の場合はx1 == x2のifでフィルタする
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
점선 부분이 반응하지 않기 때문에 세로로 결합되어 버리고 있다
패치 적요 후
Reference
이 문제에 관하여(camelot에서 점선을 실선으로 처리(허프 변환)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/barobaro/items/af850ac29dbc983eb39b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(camelot에서 점선을 실선으로 처리(허프 변환)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/barobaro/items/af850ac29dbc983eb39b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)