有张带文字的图片,文字不会变化,但是背景颜色会变化。py写一个函数:当前屏幕内是否有这样的图片,如果存在返回图像在屏幕上的坐标、图像是否有多个,如果不存在返回False。函数不使用Tesseract OCR引擎
时间: 2024-06-11 08:07:29 浏览: 149
Python实现调用另一个路径下py文件中的函数方法总结
这里提供一个基于PyAutoGUI的实现:
```python
import pyautogui
def find_image_with_text(image_path, text, tolerance=0, timeout=10):
"""
在当前屏幕内查找带文字的图片,返回图片在屏幕上的坐标和是否有多个
:param image_path: 带文字的图片路径
:param text: 图片上的文字
:param tolerance: 匹配的容差,值越大匹配的结果越松散
:param timeout: 查找超时时间,单位秒
:return: 若存在则返回图片在屏幕上的坐标和是否有多个,否则返回False
"""
# 加载图片
image = pyautogui.locateOnScreen(image_path, confidence=0.8)
if image:
# 找到图片后,遍历所有匹配的位置,搜索是否存在对应的文字
for match in pyautogui.locateAllOnScreen(image_path, confidence=0.8):
# 获取匹配位置的截图
screenshot = pyautogui.screenshot(region=match)
# 对截图进行颜色反转,方便文字识别
screenshot = pyautogui.invert(screenshot)
# 在截图中搜索文字
if text in pyautogui.imageToText(screenshot, lang='chi_sim+eng', allowlist='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', threshold=0.8-tolerance):
# 找到对应的文字后,返回图片坐标和是否有多个
return match, len(list(pyautogui.locateAllOnScreen(image_path, confidence=0.8))) > 1
# 超时未找到,返回False
return False
```
使用示例:
```python
# 查找当前屏幕中是否存在名为"image_with_text.png",且图片上包含"Hello World"文字的图片
result = find_image_with_text("image_with_text.png", "Hello World")
if result:
print("图片坐标:", result[0])
if result[1]:
print("存在多个图片")
else:
print("只存在一个图片")
else:
print("未找到图片")
```
需要注意的是,该函数的文字识别功能依赖于Pytesseract,因此需要先安装好相应的依赖。如果您使用的是Windows系统,可以参考以下步骤安装:
1. 安装Tesseract OCR引擎
在Tesseract OCR的官网上下载对应版本的安装包,并进行安装。
2. 安装Pytesseract
打开命令行终端,执行以下命令:
```
pip install pytesseract
```
3. 配置Pytesseract
在函数中使用Pytesseract时,需要指定Tesseract OCR引擎的安装路径。可以在代码中添加以下语句:
```python
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
```
将路径改为您自己的Tesseract OCR引擎安装路径即可。
阅读全文