Python/Image vision

OCR 이미지 문자열 추출 (Tesseract)

noodle-dev 2020. 1. 20. 22:49
  • 로우레벨비전 ing.
    엣지 찾는게 아니라
    텍스트 찾기
  • 광학인식=OCR 라이브러리가 있다.
    tesseract=마블에 나오는 하이퍼큐브 같은거
    인쇄체에 대해서는 잘 돼.
    거의 다 이 테서랙트 사용함
  • 전처리를 잘 해야. binarization
  • 영어 인식률은 99%.
    한글보다 한자 인식률이 더 높아.

가장자리 검출 (Edge Detection)

1단계 : 노이즈 제거

2단계 : gradient 값이 높은 부분 찾기

3단계 : 최댓값이 아닌 픽셀의 값을 0으로 만들기

4단계 : Hyteresis Thresholding : 실제 엣지인지 아닌지 판단. maxValue, minValue

Canny

cv2.Canny(원본 이미지, 임계값1, 임계값2, 커널 크기, L2그라디언트)
canny = cv2.Canny(src, 100, 255)

임계값 : 엣지의 크기

임계값1은 임계값1 이하에 포함된 가장자리는 가장자리에서 제외합니다.

임계값2는 임계값2 이상에 포함된 가장자리는 가장자리로 간주합니다.

커널 크기Sobel 마스크의 Aperture Size를 의미합니다. 포함하지 않을 경우, 자동으로 할당됩니다.

L2그라디언트L2방식의 사용 유/무를 설정합니다. 사용하지 않을 경우, 자동적으로 L1그라디언트 방식을 사용합니다.

일관적으로 밝아지고 있는지의 정도도 고려함. 연결되어있지 않는 엣지는 제외

-> 노이즈에 덜 민감. 지저분한 노이즈 안 나와.

Sobel

cv2.Sobel(그레이스케일 이미지, 정밀도, x방향 미분, y방향 미분, 커널, 배율, 델타, 픽셀 외삽법)
sobel = cv2.Sobel(gray, cv2.CV_8U, 1, 0, 3)

정밀도는 결과 이미지의 이미지 정밀도를 의미합니다. 정밀도에 따라 결과물이 달라질 수 있습니다.

x 방향 미분은 이미지에서 x 방향으로 미분할 값을 설정합니다.

y 방향 미분은 이미지에서 y 방향으로 미분할 값을 설정합니다.

커널은 소벨 커널의 크기를 설정합니다. 1, 3, 5, 7의 값을 사용합니다.

배율은 계산된 미분 값에 대한 배율값입니다.

델타는 계산전 미분 값에 대한 추가값입니다.

픽셀 외삽법은 이미지를 가장자리 처리할 경우, 영역 밖의 픽셀은 추정해서 값을 할당해야합니다.

이미지 밖의 픽셀을 외삽하는데 사용되는 테두리 모드입니다. 외삽 방식을 설정합니다.

  • Tip : x방향 미분 값y방향의 미분 값의 합이 1 이상이여야 하며 각각의 값은 0보다 커야합니다.

Laplacian

cv2.Laplacian(그레이스케일 이미지, 정밀도, 커널, 배율, 델타, 픽셀 외삽법)
laplacian = cv2.Laplacian(gray, cv2.CV_8U, ksize=3)

cv2.Laplacian(그레이스케일 이미지, 정밀도, 커널, 배율, 델타, 픽셀 외삽법)를 이용하여 가장자리 검출을 적용합니다.

정밀도는 결과 이미지의 이미지 정밀도를 의미합니다. 정밀도에 따라 결과물이 달라질 수 있습니다.

커널2차 미분 필터의 크기를 설정합니다. 1, 3, 5, 7의 값을 사용합니다.

배율은 계산된 미분 값에 대한 배율값입니다.

델타는 계산전 미분 값에 대한 추가값입니다.

픽셀 외삽법은 이미지를 가장자리 처리할 경우, 영역 밖의 픽셀은 추정해서 값을 할당해야합니다.

이미지 밖의 픽셀을 외삽하는데 사용되는 테두리 모드입니다. 외삽 방식을 설정합니다.

  • Tip : 커널의 값이 1일 경우, 3x3 Aperture Size를 사용합니다. (중심값 = -4)