python 인증 코드 인식 튜 토리 얼 의 그 레이스 케 일 처리,이치 화,소음 감소 및 tesserocr 인식

머리말
파충류 가 돌아 갈 수 없 는 문 제 는 바로 인증 코드 입 니 다.현재 인증 코드 분 류 는 약 4 가지 가 있 습 니 다.
  • 이미지 클래스
  • 미끄럼 류
  • 클릭 클래스
  • 음성 류
  • 오늘 먼저 이미지 류 를 살 펴 보 자.이런 인증 코드 는 대부분이 숫자,자모의 조합 이 고 국내 에서 도 한 자 를 사용 하 는 것 이 있다.이 를 바탕 으로 소음,간섭 선,변형,중첩,서로 다른 글꼴 색상 등 을 추가 하여 식별 난이 도 를 높 인 다.
    이에 따라 인증 코드 인식 은 대체적으로 다음 과 같은 몇 가지 절차 로 나 눌 수 있다.
  • 그 레이스 케 일 처리
  • 대비 도 증가(옵션)
  • 이치 화
  • 소음 감소
  • 경사 교정 분할 문자
  • 훈련 고 설립
  • 식별
  • 실험 적 인 성격 이기 때문에 글 에서 사용 하 는 인증 코드 는 모두 프로그램 으로 생 성 되 는 것 이지 실제 사이트 인증 코드 를 대량으로 다운로드 하 는 것 이 아니 라 명확 한 결 과 를 알 수 있 는 데이터 세트 가 많다 는 것 이 장점 이다.
    실제 환경 에서 데 이 터 를 얻어 야 할 때 각 대형 플랫폼 과 결합 하여 데이터 세트 를 만들어 훈련 할 수 있다.
    인증 코드 생 성 여기 제 가 사용 할 게 요Claptcha ( 로 컬 다운로드이 라 이브 러 리 는 물론Captcha로 컬 다운로드이 라 이브 러 리 도 좋 은 선택 이다.
    가장 간단 한 순수 숫자,방해 없 는 인증 코드 를 만 들 기 위해 서 는 먼저 claptcha.py 의 285 줄drawLine 에서 수정 을 했 습 니 다.이 함 수 를 None 으로 되 돌려 주 고 인증 코드 를 만 들 기 시 작 했 습 니 다.
    
    from claptcha import Claptcha
    
    c = Claptcha("8069","/usr/share/fonts/truetype/freefont/FreeMono.ttf")
    t,_ = c.write('1.png')
    ubuntu 의 글꼴 경 로 를 주의 하고 인터넷 에서 다른 글꼴 을 다운로드 해서 사용 할 수도 있 습 니 다.인증 코드 생 성 은 다음 과 같 습 니 다:

    인증번호 에 변형 이 있 음 을 알 수 있다.이런 가장 간단 한 인증 코드 는 구 글 이 오픈 한 tesserocr 를 직접 사용 하여 식별 할 수 있다.
    우선 설치:
    
    apt-get install tesseract-ocr libtesseract-dev libleptonica-dev
    pip install tesserocr
    그리고 식별 을 시작 합 니 다.
    
    from PIL import Image
    import tesserocr
    
    p1 = Image.open('1.png')
    tesserocr.image_to_text(p1)
    
    '8069

    '
    이런 간단 한 인증 코드 에 대해 서 는 기본적으로 아무것도 하지 않 는 것 만으로 도 식별 율 이 높다 는 것 을 알 수 있다.관심 있 는 동료 들 은 더 많은 데이터 로 테스트 할 수 있 습 니 다.여 기 는 펼 치지 않 겠 습 니 다.
    다음은 인증 코드 배경 에 노 이 즈 를 추가 해 보 겠 습 니 다.
    
    c = Claptcha("8069","/usr/share/fonts/truetype/freefont/FreeMono.ttf",noise=0.4)
    t,_ = c.write('2.png')
    인증 코드 생 성 은 다음 과 같 습 니 다:

    식별:
    
    p2 = Image.open('2.png')
    tesserocr.image_to_text(p2)
    '8069

    '
    효 과 는 그런대로 괜찮다.다음 에 알파벳 숫자 조합 을 만 듭 니 다:
    
    c2 = Claptcha("A4oO0zZ2","/usr/share/fonts/truetype/freefont/FreeMono.ttf")
    t,_ = c2.write('3.png')
    인증 코드 생 성 은 다음 과 같 습 니 다:

    세 번 째 는 소문 자 o,네 번 째 는 대문자 O,다섯 번 째 는 숫자 0,여섯 번 째 는 소문 자 z,일곱 번 째 는 대문자 Z,마지막 하 나 는 숫자 2 다.사람의 눈 은 이미 무릎 을 꿇 었 다.그러나 현재 일반 인증 코드 는 대소 문자 에 대해 엄격하게 구분 하지 않 고 자동 식별 이 어떤 지 봅 시다.
    
    p3 = Image.open('3.png')
    tesserocr.image_to_text(p3)
    'AMOOZW

    '
    사람 이 무릎 꿇 은 컴퓨터 도 당연히 폐기 되 었 다.그러나 일부 간섭 이 작고 형태 변화 가 심각 하지 않 은 경우 tesserocr 를 사용 하 는 것 은 매우 간단 하고 편리 하 다.그리고 수 정 된 claptcha.py 의 285 줄drawLine 복원,방해 선 추가 상황 보기.
    
    p4 = Image.open('4.png')
    tesserocr.image_to_text(p4)
    ''
    방해 선 을 넣 으 면 전혀 식별 할 수 없 는데,방해 선 을 제거 할 방법 이 없 을 까?
    그림 이 흑백 으로 보이 지만 그 레이스 케 일 처 리 를 해 야 합 니 다.그렇지 않 으 면 load()함수 로 단일 값 이 아 닌 픽 셀 점 의 RGB 원 조 를 얻 을 수 있 습 니 다.다음 처리:
    
    def binarizing(img,threshold):
     """  image      、    """
     img = img.convert("L") #    
     pixdata = img.load()
     w, h = img.size
     #       ,        
     for y in range(h):
      for x in range(w):
       if pixdata[x, y] < threshold:
        pixdata[x, y] = 0
       else:
        pixdata[x, y] = 255
     return img
    처 리 된 그림 은 다음 과 같 습 니 다.

    이 를 통 해 알 수 있 듯 이 처리 한 후에 그림 이 많이 예화 되 었 고 그 다음 에 간섭 선 을 제거 하려 고 시도 했다.흔히 볼 수 있 는 4 인접 도 메 인,8 인접 도 메 인 알고리즘 이다.X 인접 도 메 인 알고리즘 이란 휴대 전화 구 궁 격 입력 법 을 참고 할 수 있다.버튼 5 는 판단 할 픽 셀 점 이 고 4 인접 도 메 인 은 상하 좌우,8 인접 도 메 인 은 주변 8 개의 픽 셀 점 을 판단 하 는 것 이다.만약 에 이 4 개 또는 8 개 점 중 255 의 개수 가 특정한 한도 값 보다 크 면 이 점 을 소음 으로 판단 하고 한도 값 은 실제 상황 에 따라 수정 할 수 있다.
    
    def depoint(img):
     """             """
     pixdata = img.load()
     w,h = img.size
     for y in range(1,h-1):
      for x in range(1,w-1):
       count = 0
       if pixdata[x,y-1] > 245:# 
        count = count + 1
       if pixdata[x,y+1] > 245:# 
        count = count + 1
       if pixdata[x-1,y] > 245:# 
        count = count + 1
       if pixdata[x+1,y] > 245:# 
        count = count + 1
       if pixdata[x-1,y-1] > 245:#  
        count = count + 1
       if pixdata[x-1,y+1] > 245:#  
        count = count + 1
       if pixdata[x+1,y-1] > 245:#  
        count = count + 1
       if pixdata[x+1,y+1] > 245:#  
        count = count + 1
       if count > 4:
        pixdata[x,y] = 255
     return img
    처 리 된 그림 은 다음 과 같 습 니 다.

    뭔 가..알 이 없 는 것 같은 데?!확실히 그렇다.예 를 들 어 그림 간섭 선의 너비 와 숫자 가 같 기 때문이다.간섭 선과 데이터 픽 셀 이 다른 경우,예 를 들 어 Captcha 가 생 성 한 인증 코드:

    왼쪽 에서 오른쪽으로 원 도,이치 화,간섭 선 을 제거 하 는 상황 은 전체적으로 소음 을 낮 추 는 효과 가 비교적 뚜렷 하 다.또한 소음 을 낮 추 는 것 은 여러 번 실행 할 수 있 습 니 다.예 를 들 어 제 가 위의 소음 을 낮 춘 후에 순서대로 소음 을 낮 추 면 아래 의 효 과 를 얻 을 수 있 습 니 다.

    다시 식별 하여 결 과 를 얻 었 다.
    
    p7 = Image.open('7.png')
    tesserocr.image_to_text(p7)
    '8069 ,,

    '
    또 사진 을 보면 실제 데이터 색상 은 노 이 즈 간섭 선과 확연히 다 르 기 때문에 이 점 에 따라 노 이 즈 를 직접 제거 할 수 있 으 므 로 여 기 는 말 하지 않 겠 다.
    첫 번 째 글 은 그림 을 그 레이스 케 일 처리,이치 화,소음 감소 방법 을 기록 하고 tesserocr 와 결합 하여 간단 한 인증 코드 를 식별 하 며 나머지 부분 은 다음 글 에서 여러분 과 함께 공유 합 니 다.
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기