2016-08-30 2 views
5

이미지를 텍스트로 변환 하시겠습니까? 나는 pytesseract를 사용하고 있으며 이것을 제외하고는 대부분 훌륭하게 작동합니다. 이상적으로는이 숫자들을 정확하게 읽는 것입니다. 최악의 경우 필자는 PIL을 사용하여 '/'의 왼쪽에있는 숫자가 0인지 판단 할 수 있습니다. 중간에 슬래시가 여기에 문제가 발생이미지에서 텍스트 읽기

enter image description here enter image description here

from PIL import Image 
from pytesseract import image_to_string 

myText = image_to_string(Image.open("tmp/test.jpg"),config='-psm 10') 
myText = image_to_string(Image.open("tmp/test.jpg")) 

다음, 왼쪽에서 시작하고 첫 번째 흰색 픽셀을 찾을 수 있습니다. 또한 PIL의 '. paste'를 사용하여 이미지 주위에 여분의 검정색을 많이 추가하려고했습니다. 시도해 볼 수있는 몇 가지 다른 PIL 트릭이있을 수 있지만,해야하지 않으면 차라리 그 경로를 선택하지 않을 것입니다.

config = '- psm 10'을 사용했지만 내 8은 때때로 ":", 임의의 문자는 다른 시간에 나옵니다. 제 0은 아무 것도없이 통과했습니다. 행이

C 참조 : -psm위한 pytesseract don't work with one digit image 10 개

_____________EDIT_______________ 추가 샘플 :

enter image description here 1BJ2I]

enter image description here DIS

enter image description here,536,913,632

enter image description here 20.I20

10 10.I'10 그래서 나는 지금 제대로 동작 일부 부두 변환을하고 있어요. 그러나 경향이 매우 오류를 찾습니다

def ConvertPPTextToReadableNumbers(text): 
    text = RemoveNonASCIICharacters(text) 
    text = text.replace("I]", "0") 
    text = text.replace("|]", "0") 
    text = text.replace("l]", "0") 
    text = text.replace("B", "8") 
    text = text.replace("D", "0") 
    text = text.replace("S", "5") 
    text = text.replace(".I'", "/") 
    text = text.replace(".I", "/") 
    text = text.replace("I'", "/") 
    text = text.replace("J", "/") 
    return text 

는 궁극적으로 생성

일반적으로
ConvertPPTextToReadableNumbers return text = 18/20 
ConvertPPTextToReadableNumbers return text = 0/5 
ConvertPPTextToReadableNumbers return text = 10/10 
ConvertPPTextToReadableNumbers return text = 20/20 
+0

'-psm 10', 당신은 시도 할 수있는 하나의 문자 인식을위한'PSM 7' (단일 텍스트 라인) 참조 : https://github.com/tesseract-ocr/tesseract/wiki/Command-Line -Usage – Gwen

+0

필자가 몇 가지 세부 사항을 생략했다. psm 10으로 한 것은 첫 번째 문자를 잘라내어 psm 10을 사용하려는 시도였다. 나는 때때로 첫 번째 문자를 성공적으로자를 수 있었지만 일관성이 없었다.제가 8 개를 모두자를 수있을지라도, 그것은 다른 것으로 해석 될 것입니다. 그리고 다른 등장 인물들도 통과하지 못했습니다. 0을 모두 자르더라도 공백으로 나타납니다. – LampShade

+0

psm 7을 사용하면, "0 \ 5"가 DIS로 일관되게 읽히며 솔직히 저의 최악의 경우에 충분할 것입니다. 나는 D에 대해서만 점검 할 수 있고 0 /임을 알게 될 것이다. 다른 사람이 더 좋은 해결책을 가지고 있다면, 차임을 할 자유를 느껴보십시오. "숫자로 모든 것을 해석하십시오." – LampShade

답변

2

말은, (정팔 포체 등) 대부분의 OCR 도구는 인쇄 된 텍스트의 고해상도 스캔 작업을위한 조정된다. 저해상도 또는 픽셀 화 된 이미지에서는 성능이 좋지 않습니다. 여기

두 가지 가능한 방법은 다음과 같습니다

  1. 이미지의 글꼴, 배경 및 레이아웃 당신이 전혀 정팔 포체를 필요로하지 않는, 완전하게 예측할 수있는 경우; 그것은 단지 문제를 복잡하게합니다. 인식해야 할 각 문자를 나타내는 이미지 라이브러리를 만들고 check whether parts of the image are equal to the reference image.

  2. 이 옵션을 사용할 수 없거나 너무 어려울 경우 the hq*x algorithms 중 하나를 사용하여 픽셀 화 된 이미지의 크기를 조정할 수 있습니다. 추가 된 세부 사항으로 인해 Tesseract가 문자를 안정적으로 인식 할 수 있습니다.

+0

정보를 제공해 주셔서 감사합니다. 글꼴과 크기가 일관되고 간격이 약간 변경됩니다. 현재의 구현이 문제가된다면 상류층으로 만들려고 노력할 것입니다. 상류층에 대한 유일한 관심사는 처리하는 데 오랜 시간이 걸릴 수 있다는 것입니다. 스크립트가 실시간이기 때문에 더 빠른 것을 선호합니다. – LampShade

관련 문제