[전력계량기OCR인식] 2021/9/6 멘토링 2회차 - 기획서 피드백

September 06 2021

멘토링 내용

계획서에 대한 피드백

  • 전체적인 역할은 메인을 두는게 좋을 것. 파트에 대한 책임을 두고 해당 파트에 대해 마무리를 둘 사람이 있어야함

  • 이미지 처리
    • 이미지가 정사각형, 마름모꼴도 아닌 다양한 형태가 많음. bbox로 뽑는다고 하면 4개의 포인트를 transform으로 반듯한 형태로 변형을 시켜야함.
  • scan 이미지를 정면으로 변형시키는 프로젝트가 있으므로 참고하면 좋을 것임. 정면이미지로 변형을 안하면 문자가 깨질 것임.

  • 정면이미지를 추출하고 고정적인 부분과 변화하는 부분을 나누어서 ROI를 따로 추출하는 것이 좋음. 전처리단계에서 변동이 있는 부분을 잘라내기만 하면 실제 데이터가 디지털과 바코드이므로 잘라서 학습을 시키는 것이 이번 프로젝트에 적합한 학습모델이 될것임. JSON으로 저장하기에도 편할 것임.

  • 동적 문자영역과 정적 문자영역에 대하여 이미지를 따로 저장하여 모델링하는 것이 성능에 좋을 것임. 계획서의 파란색BOX ROI데이터를 이미지 뽑아서 학습을 해도 잘 안될 것임.

  • ocr은 CNN을 많이 쓰는데 ils 어쩌구에 모델 많으니 참고해볼것

주요객체 추출의 과정

노이즈 제거

  1. 이미지 블러링 GaussianBlur 이용한 노이즈를 제거합니다.
cv2.GaussianBlur(newImage, (5, 5), 0)
  1. 이미지 팽창(Image Dilation)
    • dilate 이용
    • 경계가 부드러워지고, 작은 구멍을 메꿀 수 있습니다
cv2.dilate(img, kernel, iterations=3)

좀 더 선명하고 부드러운 이미지를 얻을 수 있다

  1. 명암 조정
    • calcHist() : 영상의 히스토그램 구합니다.
    • histogram_stretching() : 명암비가 높아져서 일반적으로 보기 좋은 사진 형태로 바뀌게 됩니다.
      • calHist를 영상의 히스토그램을 구하고 어떠한 사진(어두운사진, 밝은 사진, 적정한 밝기의 사진) 이 들어와도 적정의 명암으로 조정하도록 하는 방법을 찾아봐야 할듯
  2. 이진화(otsu 알고리즘)

    • threshold 이용
     ret3, otsu_img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
    

주요 객체 좌표 추출

  1. 영역별 객체 분리

    • connectedComponentsWithStats
    • 영역별 객체마다 xy좌표와 가로 세로 길이를 구하여 주영역객체의 좌표 구해야합니다.
      • 주영역객체를 무엇으로 판단할지가 고민 -> 전력량계량기 의 가로세로 비율로 뽑아낼 것이 맞을지 해봐야할 것 같습니다.
    cnt, labels, stats, centroids = cv2.connectedComponentsWithStats(img)
    

투시변환

  • 기울기 보정을 하기 전에 투시변환을 해야함
  • 아직 공부하기 전이라 추가할 것임.

기울기 보정

  1. 이미지 외곽선 검출
    • Canny 이용
  2. 위, 아래부분의 직선 검출
    • Hough transform
  3. 이미지 이진화, 수평 기울기 보정, 문자영역 추출, 노이즈 처리, 선명도 보정, 글자 영역 추출

주요 객체 추출

  • 주요객체의 좌표를 추출한뒤 투시변환, 기울기 보정을 한 영상은 좌표가 변하였으므로 다시 객체 좌표를 추출하고, 주요객체 영상을 저장해야함

Leave a comment