一个崭新的开始

技术博客启航
     我要开始我的技术博客之旅,之所以写博客一是为了和网友交流,二是为了见证自己学习的历程,我不想任何事情都只有个开始,我想能够坚持下去就足够了,我是一个彻底的菜鸟,对一切都是懵懂的,但是我选择了优快云,我相信自己在这里可以学到很多知识。
非常好的问题! 你之前是 **用“崭新出厂.png”这张图作为模板** 来触发识别,现在你想改为: > ✅ **不依赖图片模板,而是直接识别屏幕上是否有“崭新出厂”这四个字**,然后触发 OCR。 --- ## ✅ 目标明确 > 不再使用图像匹配(template matching),改用 **文字识别(OCR)来检测关键词“崭新出厂”**,一旦发现,就去读取指定区域的信息。 --- ## ✅ 修改方案 我们需要: 1. **全屏或局部截图** 2. **用 Tesseract 识别其中的文字** 3. **判断是否包含“崭新出厂”** 4. **如果包含,则执行后续 OCR 动作** --- ### ✅ 最终精简修改版代码(支持文字触发) ```python import cv2 import numpy as np import mss import pytesseract import time # === 配置 === TESSERACT_CMD = r"C:\Program Files\Tesseract-OCR\tesseract.exe" # 修改为你的路径 TRIGGER_TEXT = "崭新出厂" SCREEN_REGION = {"top": 0, "left": 0, "width": 1920, "height": 1080} # 全屏搜索,可缩小范围提速度 OCR_REGIONS = { "价格": {"x": 70, "y": 380, "w": 48, "h": 27, "whitelist": "0123456789"}, "数量": {"x": 130, "y": 380, "w": 30, "h": 20, "whitelist": "0123456789"} } # === 设置 Tesseract 路径 === pytesseract.pytesseract.tesseract_cmd = TESSERACT_CMD def check_for_text(region, trigger_text): with mss.mss() as sct: # 截图 img = np.array(sct.grab(region)) gray = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY) # 可选:增强对比度 _, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) # OCR 中文 config = '--oem 3 --psm 6 -l chi_sim' # 使用简体中文模型 text = pytesseract.image_to_string(binary, config=config) return trigger_text in text def ocr_regions(regions): results = {} with mss.mss() as sct: for name, roi in regions.items(): x, y, w, h = roi['x'], roi['y'], roi['w'], roi['h'] img = np.array(sct.grab({"left": x, "top": y, "width": w, "height": h})) gray = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY) _, bin_img = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU) scale = 2 bin_img = cv2.resize(bin_img, None, fx=scale, fy=scale, interpolation=cv2.INTER_CUBIC) config = "--oem 3 --psm 6" if wl := roi.get("whitelist"): config += f" -c tessedit_char_whitelist={wl}" raw = pytesseract.image_to_string(bin_img, config=config).strip() cleaned = ''.join(filter(str.isalnum, raw)) or None print(f" [{name}]: {cleaned}") results[name] = cleaned return results # === 主循环 === print("🔍 开始监控文字:“崭新出厂”...") while True: if check_for_text(SCREEN_REGION, TRIGGER_TEXT): print(f"\n✅ 检测到文字: “{TRIGGER_TEXT}”,开始 OCR...") ocr_regions(OCR_REGIONS) time.sleep(2) # 防重复触发 else: print("⏳ 等待中...") time.sleep(1) ``` --- ## ✅ 关键改动说明 | 原功能 | 新功能 | |------|--------| | `cv2.matchTemplate` 找图 | ❌ 改为 `pytesseract` 找字 | | 依赖模板图存在 | ✅ 只需屏幕上有“崭新出厂”四字即可 | | 快速精准但不灵活 | ✅ 更灵活,适合无图标、纯文本场景 | --- ## ✅ 必要前提条件 1. **安装中文语言包** - 确保你安装了 `tessdata` 的 `chi_sim.traineddata` - 下载地址:https://github.com/tesseract-ocr/tessdata - 文件放入:`C:\Program Files\Tesseract-OCR\tessdata\chi_sim.traineddata` 2. **调整 `SCREEN_REGION` 提高效率** ```python # 示例:只检查左上角一小块区域(更快) SCREEN_REGION = {"top": 300, "left": 50, "width": 200, "height": 100} ``` 3. **提高识别率技巧** - 调整截图区域亮度/对比度 - 使用 `--psm 6` 或 `--psm 13` 控制段落模式 - 字体清晰、无干扰背景效果最佳 --- ## ✅ 进阶建议 如果你希望同时支持: - 图片触发 ✅ - 文字触发 ✅ 可以合并两个条件: ```python if match_template("templates/崭新出厂.png", 0.8) or check_for_text(region, "崭新出厂"): # 触发动作 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值