如何解决Python 无法从照片 Linux 中提取数字
Here is a hard to decypher image. 我开始了一个项目,现在我想在 google earth pro 上拍摄坐标照片并显示它们。它运行良好,但不是在所有表面上都会弄乱数字或显示乱码。这是我的代码。我可以做些什么来改进数字检测?
它的工作原理是截取我的屏幕截图,裁剪它并取出数字。(我知道它现在无限执行,这没问题)
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,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()
解决方法
我同意@furas 的观点,请务必阅读他建议的文档。另一方面,让这个答案成为您处理小图像的教程。要进行准确识别,您需要:
-
- 上采样
-
- 将数字居中
-
- 应用简单阈值。
对于小图像,上采样和居中对于使人眼可读和tesseract 可识别的字符或数字至关重要。阈值将使特征(字符和数字的笔画)可用。
Code:
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,cv2.BORDER_CONSTANT,value=255)
thr = cv2.threshold(gry,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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。