문자형 인증번호(14)
1. 인증코드란 무엇인가
파충류를 개발하는 과정에서 흔히 볼 수 있는 반기어 조치, 검증 코드를 만날 수 있다.인증코드(CAPTCHA)는'Completely Automated Public Turing test to tell Computers and Humans Apart'(컴퓨터와 인간을 자동으로 구분하는 튜링 테스트)의 약자로, 사용자가 컴퓨터인지 사람인지를 구분하는 공공 전자동 프로그램이다.
2. 인증코드 종류
인증코드는 출시된 이래 끊임없이 발전해 왔다. 도형 인증코드는 다음과 같은 몇 가지로 나눌 수 있다.
2. 이미지 처리 라이브러리
pillow(https://www.jianshu.com/p/cd6f4e138af6
) 공식 문서:https://pillow.readthedocs.io/en/latest/installation.html
3. 단순 문자열 검증 코드의 처리
1. 그레이스케일
픽셀은 가장 작은 그림 단원으로 한 장의 그림은 많은 픽셀로 구성되고 한 픽셀의 색깔은 RGB 세 개의 값으로 표현되기 때문에 한 픽셀은 세 개의 색 벡터 행렬에 대응한다. 우리가 그림에 대한 처리는 바로 이 픽셀에 대한 조작이다.
그림의 그레이스케일은 화소점 행렬의 모든 화소점이 R=G=B를 충족시키는 것이다. 이때 이 값을 그레이스케일이라고 하는데 흰색은 255이고 검은색은 0그레이스케일로 일반 공식은 다음과 같다.
R=G=B = 사전 처리 RX0.3 + GX0.59 + B*0.11
from PIL import Image
image = Image.open('code.jpg')
im = image.convert('L')
2. 이치화
이미지의 2치화란 이미지의 픽셀 매트릭스에 있는 각 픽셀의 그레이스케일 값을 0(검정) 또는 255(흰색)으로 설정하여 전체 이미지를 검정색과 흰색만 보이는 시각적 효과를 2치화하는 것이다.
이치화 원리는 설정된 한도값을 이용하여 이미지 픽셀이 0인지 255인지 판단하는 것이다. 일반적으로 한도값보다 작은 픽셀은 0으로 변하고 큰 픽셀은 255로 변한다.
이 임계 그레이스케일 값은 한도값이라고 하는데 한도값의 설정이 매우 중요하다. 한도값이 너무 크거나 작으면 그림에 손상을 입힐 수 있다.
한도값을 선택하는 원칙은 가능한 한 그림 정보를 저장해야 할 뿐만 아니라 배경과 소음의 방해도 줄여야 한다는 것이다.
이치화의 장점: 데이터의 양을 한층 더 줄이고 그림의 정보를 최대한 보존하며 배경의 소음 방해를 최대한 줄인다.
상용 한도값 선택 방법은 다음과 같다. - 그레이스케일 평국값법: 127(0~255의 중수, (0+255)/2=127)의 평균값을 취한다. - - - - - - - 픽셀 매트릭스에 있는 모든 픽셀의 그레이스케일 값의 평균값을 계산하는 avg - - 교체법: 근사한 한도값을 추정값의 초기값으로 선택한 다음에 이미지를 분할하고 생성된 하위 이미지의 특징에 따라 새로운 한도값을 선택하여 새로운 한도값을 이용하여 이미지를 분할한다.여러 번의 순환을 거쳐 잘못 분할된 그림의 픽셀을 최소화합니다.
from PIL import Image
def to_value(img):
#
w, h = img.size
print(' %s, %s' % (w, h))
#
pixes = img.load()
total = []
for i in range(w):
for j in range(h):
total.append(pixes[i, j])
print(total)
#
avg = sum(total)//len(total)
# ( , )
for i in range(w):
for j in range(h):
if pixes[i, j] < avg:
pixes[i, j] = 0
else:
pixes[i, j] = 255
# return img.point(lambda x: 0 if x < avg else 255) img
img = Image.open('genimage.png')
# #
img = img.point(lambda x: 1.2*x)
#
img = img.convert('L')
to_value(img)
img.show()
3. 소음을 낮춘다
이치화 처리를 통해 전체 그림의 픽셀은 두 개의 값 0과 255로 나뉜다. 만약에 한 픽셀이 그림이나 방해 요소의 일부분이라면 그녀의 그레이스케일은 반드시 0(검은색)이고 만약에 한 점이 배경이라면 그 그레이스케일은 255(흰색)이어야 한다.
그래서 고립된 소음에 대해 그의 주위는 모두 흰색이거나 대부분 수점이 흰색이어야 하기 때문에 판단할 때 조건을 넓혀야 한다. 한 점이 검은색이고 인접한 점이 흰색인 점의 개수가 고정된 값보다 크면 이 점이 소음이다.
from PIL import Image
def noise_reduction(img):
w, h = img.size
pixes = img.load()
# 4
#
for i in range(w):
if pixes[i,0] == 0:
if pixes[i, 1] == 255:
pixes[i, 0] = 255
#
for i in range(w):
if pixes[i,h-1] == 0:
if pixes[i, h-2] == 255:
pixes[i, h-1] = 255
#
for i in range(h):
if pixes[0, i] == 0:
if [1, i] == 255:
pixes[0, i] = 255
#
for i in range(h):
if pixes[w-1, i] == 0:
if [w-2, i] == 255:
pixes[w-1, i] = 255
#
for i in range(1, w-1):
for j in range(1, h-1):
if pixes[i, j] == 0:
sum = pixes[i+1, j] + pixes[i, j+1] + pixes[i-1, j] + pixes[i, j-1] + pixes[i-1, j-1] + pixes[i+1, j-1] + pixes[i+1, j+1] + pixes[i-1, j+1]
if sum // 255 > 4:
pixes[i, j] = 255
return img
식별
문자인식은 구글 오픈 소스 프로젝트------
Tesseract OCR
를 사용할 수 있다.1. 도구 설치
1.1 Tesseract OCR 엔진 설치
github 주소:https://github.com/tesseract-ocr/tesseract/wiki
파이썬-Tesseract는 파이썬을 위한 광학 문자인식(OCR) 도구다.즉, 이미지에 포함된 텍스트를 식별하고 읽습니다.파이톤-tesseract는 구글
Tesseract OCR
엔진의python 봉인입니다.Pillow와 Leptonica 이미지 라이브러리에서 지원하는 모든 이미지 형식을 읽을 수 있기 때문에 Tesseract의 독립된 호출 스크립트로도 사용할 수 있습니다. jpeg, png,gif, bmp, tiff 등을 포함합니다.공식 문서:https://github.com/madmaze/pytesseract
설치:
pip install pytesseract
간단한 사용:
try:
from PIL import Image
except ImportError:
import Image
import pytesseract
# If you don't have tesseract executable in your PATH, include the following:
pytesseract.pytesseract.tesseract_cmd = r''
# Example tesseract_cmd = r'C:\Program Files (x86)\Tesseract-OCR\tesseract'
# Simple image to string
print(pytesseract.image_to_string(Image.open('test.png')))
# French text image to string
print(pytesseract.image_to_string(Image.open('test-european.jpg'), lang='fra'))
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.