我正在寻找一种方式,让python读取健康,以文本格式,然后执行一个命令(e.i。按下钥匙)。我在看一个由youtuber:(https://www.youtube.com/playlist?list=PLQVvvaa0QuDeETZEOy4VdocT7TOjfSA8a)制作的系列。他编程巨蟒捕捉他的屏幕和“阅读”车道,以实现自动驾驶汽车。我想以本系列第一部分的目标为基础,使用numpy、PIL和OpenCV来使用下面的代码捕获我的屏幕。
import numpy as np
from PIL import ImageGrab
import cv2
import time
last_time = time.time()
while(True):
screen = np.array(ImageGrab.grab(bbox=(0,0, 1360, 768)))
printscreen_numpy = np.array(printscreen_pil.getdata(),dtype='uint8')
print('Loop took {} seconds'.format(time.time()-last_time))
last_time = time.time()
cv2.imshow('window', cv2.cvtColor (screen, cv2.COLOR_BGR2RGB))
if cv2.waitKey(25) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break(可以忽略打印循环所需时间的代码)
但是,我不知道如何使用opencv或PIL来识别屏幕指定区域中的文本,也不知道在执行命令之后该做什么。
我所需要的只是一些建议,而不是一个完整的答案。任何帮助都是非常感谢的,谢谢。
发布于 2019-01-21 10:56:21
如果区域在屏幕上总是具有相同的坐标,则可以对其进行裁剪并裁剪所有数字。数字应该是非常精确的。如果要只读取数字(0-9),可以使用模板匹配算法。对于这个算法,每个帧上的数字看起来都应该非常相似。matching.html,您必须为所有数字创建参考图像,只需在裁剪图像上查找。
第二个解决方案:您可以使用opencv+tesseract(它包括一个非常精确的基于深度学习的文本识别模型)。https://www.pyimagesearch.com/2018/09/17/opencv-ocr-and-text-recognition-with-tesseract/
其他解决方案是获取具有阈值的数字(或字母)的形状,HSV颜色空间中的颜色范围(如果数字总是具有相同的颜色)或其他一些算法。然后,每一个数字,你可以除以七段(display)。然后检查每一个数字,如果这些段是空的或填充的。这些算法是基于pyImageSearch教程(https://www.pyimagesearch.com/2017/02/13/recognizing-digits-with-opencv-and-python/)的。
https://stackoverflow.com/questions/54282611
复制相似问题