Python 3 는 tesserocr 를 사용 하여 알파벳 디지털 인증 코드 를 식별 합 니 다.

배경
최근 에 한 백 스테이지 의 댓 글 사이트 에서 댓 글 데 이 터 를 추출 하 는 수요 가 있 습 니 다.백 스테이지 관리 사 이 트 는 반드시 로그 인 과 관련 되 고 로그 인 하면 인증 코드 의 문 제 를 해결 해 야 합 니 다.인증 코드 는 백 엔 드 에서 생 성 되 고 그 생 성 규칙 을 모 르 기 때문에 이미지 인식 기술 을 통 해 인증 코드 를 식별 할 수 밖 에 없습니다!자 료 를 찾 아 보 니 Python 의 tesserocr 라 이브 러 리 가 많이 사용 되 는 것 같 아서 이 라 이브 러 리 에 대해 연 구 를 실시 하고 그 배경 사이트 인증 코드 의 식별 을 실현 했다.
준비 작업
1.tesserocr 설치
제 가 사용 하 는 Python 버 전 은 python 3.5 이기 때문에 모든 조작 은 python 3 을 기반 으로 합 니 다.python 2 친구 가 있 으 면 다른 튜 토리 얼 을 찾 아 보 세 요~~
우선 tesseract 를 다운로드 해 야 합 니 다.tesserocr 에 기본 지원 을 제공 합 니 다.공식 다운로드 경로:https://github.com/UB-Mannheim/tesseract/wiki이에 대응 하 는 시스템 버 전 을 선택 하면 dev 가 없 는 안정 적 인 버 전 을 선택 하여 다운로드 할 수 있 습 니 다.예 를 들 어 tesseract-ocr-setup-3.05.02-20180621.exe.그 다음 에 설치 할 때 Additional language data(download)를 선택 하고 사용 할 수 있 는 언어 tessdata 를 선택 하 십시오.예 를 들 어 간 체,번 체 중국어,수학 모듈 등 은 전체 선택 이 필요 없고 tessdata 를 다운로드 하 는 시간 이 비교적 길 습 니 다.
그 다음 에 python 3 에 대응 하 는 tesserocr 라 이브 러 리 를 설치 합 니 다.보통 라 이브 러 리 를 설치 하 는 방법 은 pip install tesserocr 를 사용 하 는 것 입 니 다.그러나"error:Microsoft Visual C+14.0 is required.Get it with"Microsoft Visual C++Build Tools"를 사용 합 니 다.이 때 는 Microsoft Visual C+Build Tools 를 직접 다운로드 하 는 것 이 아니 라 원본 whl 파일 로 설치 하 는 것 이 좋 습 니 다.tesserocr 의 whl 공식 파일 다운로드 경로:https://github.com/simonflueckiger/tesserocr-windows_build/releases,로 컬 환경 에 대응 하 는 whl 파일 을 다운로드 합 니 다.예 를 들 어 windows 64 비트 시스템,python 버 전 은 3.5 입 니 다.다운로드 후 cd 를 사용 하여 whl 파일 이 있 는 디 렉 터 리 로 이동 한 후"pip installetesserocr-2.2.2-cp35-cp35m-win"을 실행 합 니 다.amd 64.whl"로 쉽게 설 치 를 완료 할 수 있 습 니 다.

이 어 예 를 들 어 어떻게 사용 하 는 지 검증 합 니 다.우 리 는 인증 코드 그림 을 찾 았 습 니 다:image.jpg,로 컬 디스크 에 다운로드 하고 코드 로 검증 합 니 다.

import tesserocr
from PIL import Image
image=Image.open('image.jpg')
print(tesserocr.image_to_text(image))
의외 의 사고 가 발생 하지 않 으 면 첫 번 째 운행 이 항상 순 조 롭 지 못 하 다.내 가 만난 구 덩이 는 대부분 사람들 이 만 날 것 이 라 고 믿는다.대체적으로 오류 가 비슷 하 다.
Traceback (most recent call last):
File "G:\pythonSources\my12306/obtain_message\test.py", line 4, in
print(tesserocr.image_to_text(image))
File "tesserocr.pyx", line 2400, in tesserocr._tesserocr.image_to_text
런 타임 오류:init API 에 실 패 했 습 니 다.잘못된 tessdata 경로 일 수 있 습 니 다."로 컬 경로"
비교적 간단 하고 거 친 해결 방법 은 설 치 된 Tesseract-OCR 의 tessdata 폴 더 를 힌트 의 경로 로 복사 하 는 것 입 니 다.직접 측정 하 는 것 이 효과 적 입 니 다.
2.opencv 설치
인증 코드 는 최적화 처 리 를 해 야 하기 때문에 tesserocr 에 의 해 쉽게 식별 되 기 때문에 opencv 를 사용 하여 특수 한 처 리 를 해 야 합 니 다.opencv 를 설치 하 는 것 이 비교적 간단 하고 직접 pip install opencv-python 을 설치 하면 됩 니 다.
3.식별 과정
1.그림 을 흑백 으로 변환
내 가 데 이 터 를 얻 기 위해 올 라 가 야 하 는 이 백 스테이지 사이트 의 인증 코드 는 노란색 바탕 에 흰색 글자 이다.이런 색 차 가 비교적 작은 tesserocr 는 식별 하기 가 비교적 어렵 고 조금 만 시도 해 보 았 지만 대체적으로 잘 식별 되 지 않 았 다.그래서 우 리 는 먼저 그림 을 색 차 가 가장 큰 흑백 그림 으로 바 꿔 야 한다.초기 그림 은 다음 그림 참조:

먼저,그림 을 회색 으로 바 꾸 고 회색 그림 을 저장 하면 나중에 비교 하기 편리 하 며 회색 으로 변 한 그림 은 다음 과 같다.

회색 으로 변 한 후 픽 셀 점 의 색상 값 을 통 해 회색 부분의 배경 을 흰색 으로 바 꾸 고 흰색 의 구체 적 인 내용 을 검은색 으로 바 꾸 면 흰색 바탕 에 검은색 글자 의 흑백 그림 이 있 습 니 다.

흑백 그림 으로 처리 하 는 실현 코드 는 다음 과 같다.

img = Image.open(self.code_path)
#        
img_gray = img.convert('L')
img_gray.save('../images/code_gray.png')
#       
img_black_white = img_gray.point(lambda x: 0 if x > 200 else 255)
img_black_white.save('../images/code_black_white.png')
2.그림 노 이 즈 제거
사진 이 흑백 으로 전 환 된 후에 일부 잡 점 도 우리 의 주체 내용 에 따라 검은색 점 으로 변 했다.그러면 식별 효과 에 도 큰 영향 을 미 치기 때문에 이런 간섭 점 을 없 애 는 방법 을 강구 해 야 한다.여기 서 opencv 의 기능 을 빌려 야 합 니 다.opencv 를 사용 하여 소음 을 제거 하기 전에 먼저 그림 을 회색 값 화 와 이치 화 처리 해 야 합 니 다.구체 적 인 코드 는 다음 과 같 습 니 다.

# opencv  
img_cv = cv2.imread('../images/code_black_white.png')
#    
im = cv2.cvtColor(img_cv, cv2.COLOR_BGR2GRAY)
#    
cv2.adaptiveThreshold(im, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 21, 1)
기본적으로 처리 한 후에 소음 을 없 애 야 한다.소음 을 없 애 는 원리 도 비교적 간단 하 다.즉,그림 의 모든 픽 셀 점 을 옮 겨 다 니 며 상하 좌우 네 픽 셀 점 의 위 치 를 찾 는 색 이다.만약 에 이 네 개의 점 중 흰색 점 의 수량 이 2 보다 많 으 면 이 점 이 소음 점 이라는 것 을 설명 하고 이 점 의 색 을 흰색 점 으로 직접 배치 해 야 한다.테두리 위치 에 있 는 픽 셀 도 흰색 으로 직접 설정 합 니 다.주요 내용 은 보통 그림 중간 에 있 기 때 문 입 니 다.다음은 소음 을 처리 하 는 코드 입 니 다.

#     
def interference_point(img):
  filename = '../images/code_result.png'
  h, w = img.shape[:2]
  #          
  for y in range(0, w):
    for x in range(0, h):
      #        
      if y == 0 or y == w - 1 or x == 0 or x == h - 1:
        img[x, y] = 255
        continue
      count = 0
      if img[x, y - 1] == 255:
        count += 1
      if img[x, y + 1] == 255:
        count += 1
      if img[x - 1, y] == 255:
        count += 1
      if img[x + 1, y] == 255:
        count += 1
      if count > 2:
        img[x, y] = 255
  cv2.imwrite(filename, img)
  return img, filename
소음 처리 가 끝 난 후 매우 뚜렷 한 그림 이 나 왔 다.

이 럴 때 tesserocr 를 직접 사용 하여 식별 할 수 있 습 니 다.구체 적 인 식별 방식 은 다음 과 같 습 니 다.

tesserocr.image_to_text(img_result)
식별 테스트 결 과 는 다음 과 같다.

여러 차례 의 식별 검증 테스트 를 거 쳤 고 또한 이 인증 코드 의 글씨체 가 상대 적 으로 규범 적 이기 때문에 성 공률 이 상당히 높 습 니 다.가끔 실패 하 더 라 도 우 리 는 다시 시도 하면 성공 할 수 있 습 니 다.하하,거의 이 모양 입 니 다.본문 에 있 는 문 제 를 가리 키 는 것 을 환영 합 니 다~더 이상 말 하지 않 겠 습 니 다.저 는 새로 배 운 기술 로'나 쁜 일'을 하 겠 습 니 다!
Python 3 에서 tesserocr 를 사용 하여 알파벳 디지털 인증 코드 를 식별 하 는 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 Python 3 tesserocr 식별 알파벳 디지털 인증 코드 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!

좋은 웹페이지 즐겨찾기