2017-12-24 30 views
-1

자릿수 만 포함 된 일반적인 보안 문자 이미지가 있습니다.보안 문자 또는 텍스트 판독기 이미지 : OCR-Python

Ex. enter image description here

이 이미지에서 을 추출하고 싶습니다.

나는 OCR-Python을 사용하여 약간의 라이브러리 & 코드를 시도했다. 그러나 그 반환 0

샘플 코드-1

from captcha_solver import CaptchaSolver 

solver = CaptchaSolver('browser') 
with open('captcha.png', 'rb') as inp: 
raw_data = inp.read() 
print(solver.solve_captcha(raw_data)) 

샘플 코드-2

from PIL import Image 

def p(img, letter): 
    A = img.load() 
    B = letter.load() 
    mx = 1000000 
    max_x = 0 
    x = 0 
    for x in range(img.size[0] - letter.size[0]): 
     _sum = 0 
     for i in range(letter.size[0]): 
      for j in range(letter.size[1]): 
       _sum = _sum + abs(A[x+i, j][0] - B[i, j][0]) 
     if _sum < mx : 
      mx = _sum 
      max_x = x 
    return mx, max_x 


def ocr(im, threshold=200, alphabet="abcdef"): 
    img = Image.open(im) 
    img = img.convert("RGB") 
    box = (8, 8, 58, 18) 
    img = img.crop(box) 
    pixdata = img.load() 

    letters = Image.open(im) 
    ledata = letters.load() 

    # Clean the background noise, if color != white, then set to black. 
    for y in range(img.size[1]): 
     for x in range(img.size[0]): 
      if (pixdata[x, y][0] > threshold) \ 
        and (pixdata[x, y][1] > threshold) \ 
        and (pixdata[x, y][2] > threshold): 

       pixdata[x, y] = (255, 255, 255, 255) 
      else: 
       pixdata[x, y] = (0, 0, 0, 255) 

    counter = 0; 
    old_x = -1; 

    letterlist = [] 

    for x in range(letters.size[0]): 
     black = True 
     for y in range(letters.size[1]): 
      if ledata[x, y][0] <> 0 : 
       black = False 
       break 
     if black : 
      if True : 
       box = (old_x + 1, 0, x, 10) 
       letter = letters.crop(box) 
       t = p(img, letter); 
       print counter, x, t 
       letterlist.append((t[0], alphabet[counter], t[1])) 
      old_x = x 
      counter += 1 

    box = (old_x + 1, 0, 140, 10) 
    letter = letters.crop(box) 
    t = p(img, letter) 
    letterlist.append((t[0], alphabet[counter], t[1])) 

    t = sorted(letterlist) 
    t = t[0:5] # 5-letter captcha 

    final = sorted(t, key=lambda e: e[2]) 
    answer = "" 
    for l in final: 
     answer = answer + l[1] 
    return answer 

print(ocr('captcha.png')) 

사람은 일반적인 보안 문자에서 얻을 수있는 기회/추출 텍스트 있었나요?

답변

0

기계 학습 (신경 네트워크) 모델을 사용하여 captcha를 해결할 수 있으며 거의 ​​항상 무료 OCR 또는 다른 방법보다 성능이 우수합니다.

다음은 좋은 출발점입니다. https://medium.com/@ageitgey/how-to-break-a-captcha-system-in-15-minutes-with-machine-learning-dbebb035a710

+0

그러나 Pyhon 2.7+ 버전과 호환되지 않는 것처럼 보입니다. 맞아? 파이썬 2.7에서 구현할 수있는 아이디어를 제게 제공해 주시겠습니까? 다시 한번 감사드립니다. –