python 스 크 립 트 인증 코드 인식
저 는 주로 Python 의 PIL 라 이브 러 리 를 사용 합 니 다.
우선 이치 화 처 리 를 진행 하 다.그림 속 의 노 이 즈 색상 이 비교적 옅 기 때문에 한도 값 을 설정 하여 직접 걸 러 낼 수 있다.여기 서 제 가 설정 한 한도 값 은 150 이 고 픽 셀 이 150 이상 인 할당 값 은 1 이 며 작은 할당 은 0 입 니 다.
def set_table(a):
table = []
for i in range(256):
if i < a:
table.append(0)
else:
table.append(1)
return table
img = Image.open("D:/python/ /A"+str(i)+".jpg")
pix = img.load()
#
img1 = img.convert('L')
# 150, 1,
img2 = img1.point(set_table(150),'1')
처 리 된 그림 은 다음 과 같다.한도 값 에 따라 발생 하 는 다른 효과:
다음은 그림 을 분할 합 니 다.그림 의 모든 픽 셀 점 을 옮 겨 다 니 며 픽 셀 이 0 인 점 의 개수(jd)를 계산 합 니 다.인접 한 두 열 에 대해 서 는 그 중의 한 열 jd=0 이 고 다른 열 jd!=0.이 열 은 인증 코드 의 문자 경계 라 고 볼 수 있 고 이 를 통 해 인증 코드 를 분할 할 수 있 습 니 다.이렇게 분할 하면 비교적 좋 은 효 과 를 얻 을 수 있 고 분할 한 후에 얻 은 문자 그림 은 거의 템 플 릿 과 똑 같 을 수 있다.
(Width,Height) = img2.size
pix2 = img2.load()
x0 = []
y0 = []
for x in range(1,Width):
jd = 0
# print x
for y in range(1,Height):
# print y
if pix2[x,y] == 0:
jd+=1
y0.append(jd)
if jd > 0:
x0.append(x)
# ,
for a in range(1,Width):
if (y0[a] != 0)&(y0[a+1] != 0):
sta1 = a+1
break
분할 이 완 료 된 후에 식별 에 대해 현재 몇 가지 방법 이 있다.그림 의 모든 픽 셀 점 을 옮 겨 다 니 며 픽 셀 값 을 가 져 오고 문자열 을 가 져 올 수 있 습 니 다.이 문자열 을 템 플 릿 의 문자열 과 비교 하여 한 명 거리 나 편집 거리(즉 두 문자열 의 차이 점)를 계산 할 수 있 습 니 다.Python-Levenshtein 라 이브 러 리 로 구현 할 수 있 습 니 다.내 가 채택 한 것 은 비교적 특징 적 인 벡터 로 식별 한 것 이다.먼저 4 개의 세로 특징 벡터 를 설정 하여 0,2,4,6 열 에 있 는 픽 셀 값 이 0 인 점 의 개 수 를 계산 하고 템 플 릿 과 비교 하 며 한도 값 보다 작 으 면 이 문자 가 템 플 릿 과 같다 고 생각 합 니 다.식별 율 을 높이 기 위해 수직 특징 벡터 를 통 해 식별 에 성공 하지 못 하면 수평 특징 벡터 를 도입 하여 계속 식별 하고 원 리 는 수직 특징 벡터 와 같다.
또 국 지적 특징 을 통 해 식별 할 수 있다.이것 은 회전 방 해 를 넣 은 인증 코드 에 좋 은 효과 가 있다.내 가 쓴 스 크 립 트 의 식별 율 이 이미 요구 에 도 달 했 기 때문에 이것 을 사용 하지 않 았 다.
마지막 결 과 는 이렇다.
최종 적 으로 템 플 릿 라 이브 러 리 가 25 개 밖 에 없 는 상황 에서 식별 율 은 92%안팎(총 1 만 6 천 장의 인증 코드 를 테스트 했다)이다.좋아,인증번호 가 너무 간단 하 다 고 할 수 밖 에 없어.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.