0

这是一个难以破译的图像。我开始了一个项目,我想在谷歌地球专业版上拍一张坐标照片并展示它们,现在。它运行良好,但并非在所有表面上都会弄乱数字或向我显示乱码。这是我的代码。我能做些什么来改进数字检测?

它通过截取我的屏幕截图,裁剪并取出数字来工作。(我知道它现在可以无限执行,没问题)

from pynput import keyboard
from PIL import ImageGrab, Image, ImageEnhance, ImageFilter
import pyautogui
import pytesseract
import PIL.ImageOps 

pytesseract.pytesseract.tesseract_cmd = r"/usr/bin/tesseract"

h = 1280
w = 1024

leftc = 0.65*h
topc = 0.98*w
rightc = 0.808*h
bottomc = w-4

def on_press(key) :
    if key == keyboard.Key.shift: # handles if key press is shift
        image = ImageGrab.grab(bbox=(0,0,h,w))
        image = image.crop((leftc, topc, rightc, bottomc))
        image = image.resize((202,16),5)
        image.save('sc.png')
        image_to_text = pytesseract.image_to_string(image,lang='eng')
        print(image_to_text)

def on_release(key) :
    if key == keyboard.Key.shift:
        print()

def get_current_key_input() : 
    with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
        listener.join()

get_current_key_input()     
4

1 回答 1

0

我同意@furas 的观点,请务必阅读他建议的文档。另一方面,让这个答案成为您处理小图像的教程。要进行准确识别,您需要:


    1. 上采样
    1. 将数字居中
    1. 应用简单阈值。

对于小图像,上采样和居中对于使字符或数字能被人眼阅读并被 tesseract 识别是至关重要的。阈值化将使特征(字符和数字的笔划)可用。



采样
在此处输入图像描述
定心 在此处输入图像描述
临界点 在此处输入图像描述
正方体 44.429595° 经 26.108718"

代码

import cv2
import pytesseract

img = cv2.imread("dCbPd.png")
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
(h, w) = gry.shape[:2]
gry = cv2.resize(gry, (w*4, h*4))
gry = cv2.copyMakeBorder(gry, 40, 40, 40, 40, cv2.BORDER_CONSTANT, value=255)
thr = cv2.threshold(gry, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
txt = pytesseract.image_to_string(thr)
print(txt)
print("Pytesseract version: {}".format(pytesseract.get_tesseract_version()))
cv2.imshow("thr", thr)
cv2.waitKey(0)
于 2021-02-13T12:29:59.483 回答