Closed dudskrla closed 2 years ago
전체 텍스트를 대상으로
띄어쓰기
# 접근1)
text_width = abs(point[0][0] - point[1][0])
text_length = len(text) # 공백 포함한 글자수
space = text_width // text_length
단, space 는 두 단어의 space에 대해 min() 연산한 결과로 나온 space로 따진다
높이 비율
# 접근1)
기준을 0.9 로 설정
텍스트 변경
한 글자씩 띄어쓰기하여 작성하고 있으나, 경우를 나누어서 곧바로 붙이는 것도 생각해보아야 할 듯
sep = "_:/.-@(),"
띄어쓰기(공백이 글자수에 포함되므로)에 영향을 미침
띄어쓰기를 고려하여 + 특수문자가 포함된 텍스트 합치기
위의 사진을 예시로 들면 ( . 을 기준으로 합쳐야 하는 경우)
앞 뒤 텍스트의 높이 차이가 나는 경우도 합치는 것을 목표로 하므로
ex. |가| |나| |다| → |가 나 다|
바로 다음(혹은 이전) 글자와 높이 비율이 0.95 (기준 설정 필요) 이상이면 + 시작 y좌표가 같으면 (or 약간의 오차 (기준 설정 필요) 를 고려하여) 하나의 카테고리로 생각하고 합친다
예를 들어, 회사명의 경우 00 0000 → 글자수가 똑같을 것이라고 (너비가 꼭 같다고) 가정할 수 없기 때문
띄어쓰기도 고려할 필요 없다
헤드와 텍스트 내용 합치기
ex. |fax.| |000-0000-0000| → |fax. 000-0000-0000|
분리된 텍스트 내용 합치기 → 고민
ex. |(0000)| |00시 00구 00동| → |(0000) 00시 00구 00동|
Problem 1) 잘못 합쳐진 내용은 분리 2) 합쳐지지 않은 내용은 합치기
Solution
문제의 방향을 한 가지로 제한하고자, 잘못 합쳐지는 일이 없도록 작은 단위부터 합쳐나가는 방식을 떠올렸습니다.
같은 단어에 포함되어야 하는 글자가 분리된 경우, 이를 합쳐줍니다
구현 내용
두 단어 사이의 간격이 한 단어의 세로 길이의 0.3 배 이하이면, 같은 단어 내에 포함된다고 가정하여 합쳐줍니다.
참고
차량 운행제한 공고 표지 설치규정 (단, 참고에서는 0.2배로 표기되었으나, 0.2배로 적용하면 합쳐지는 경우가 거의 없는 것으로 판단되어, 여기에서는 0.3배로 적용)
이름/회사명과 같이 한 글자씩 간격이 넓게 벌어진 경우, 이를 합쳐줍니다.
구현 내용
1) 이름/회사명에 해당하는지 확인 2) 두 단어 사이의 간격과 폰트 세로 길이의 비율 확인
위의 조건을 모두 만족하면, 하나의 단어로 합쳐줍니다. (단, 한 글자씩 곧바로 합치는 대신, 각 글자를 모아서 추후 한 번에 합쳐줍니다.)
같은 카테고리에 포함되어야 하는 단어가 분리된 경우, 이를 합쳐줍니다.
구현 내용
1) 두 단어 사이의 간격 <= 두 폰트 가로 길이 크기의 평균
위의 조건을 모두 만족하면, 하나의 카테고리로 생각하고 합쳐줍니다.
특수 문자 한 글자가 존재하는 경우, 이를 제거합니다.
Before (방법1)
**After (방법2)**
OCR API output 전처리
1) 원본 이미지 2) OCR API에서 나온 bbox를 반영한 이미지
해야 할 일
[x] bbox 수정
[x] text 수정
📑 참고 : line parsing notion site
하위 이슈
6