fix: 加强病句过滤 + QQ跨窗口污染检测
1. 病句过滤增强: - 病句6:包含时间戳格式(16:29, 2026/7/29)的句子跳过 - 病句7:以数字开头且包含问号的句子跳过(如'1屏蔽?不想要的后缀。') - 病句8:包含引号包裹时间戳的句子跳过(如'"2026/7/29"') 2. QQ跨窗口污染检测: - 检测微信绿色像素(R:135-180, G:205-250, B:75-125) - 若QQ轮询截图中检测到大量绿色像素,判定为微信窗口,跳过本轮 - 防止QQ轮询截到微信内容被误处理 3. 像素检测优化: - QQ轮询增加绿色像素检测,避免截到微信窗口 - 微信轮询已有类似逻辑(绿色=自身消息)
This commit is contained in:
+39
@@ -1919,6 +1919,20 @@ class MessageMonitor:
|
||||
if re.search(r'修[??。]?\s*$', line) and not any(w in line for w in _q_words):
|
||||
logger.debug(f"[{platform}] OCR 过滤: 病句(修字碎片) line={line!r}")
|
||||
continue
|
||||
# 病句6:句子包含时间戳格式(如"16:29" "2026/7/29")
|
||||
# OCR 常把时间戳和用户消息拼接,如"认管理员密码多少?在嘲多改?"
|
||||
if re.search(r'\d{1,2}:\d{1,2}(?::\d{1,2})?|\d{4}[/-]\d{1,2}[/-]\d{1,2}', line):
|
||||
logger.debug(f"[{platform}] OCR 过滤: 病句(含时间戳) line={line!r}")
|
||||
continue
|
||||
# 病句7:句子以数字开头且包含问号(如"1屏蔽?不想要的后缀。")
|
||||
# 可能是 OCR 把消息编号和内容拼接
|
||||
if re.match(r'^\d+', line) and re.search(r'[??]', line):
|
||||
logger.debug(f"[{platform}] OCR 过滤: 病句(数字开头+问号) line={line!r}")
|
||||
continue
|
||||
# 病句8:句子包含引号包裹的时间戳(如'"2026/7/29"')
|
||||
if re.search(r'["""][^"""]*\d{4}[/-]\d{1,2}[/-]\d{1,2}[^"""]*["""]', line):
|
||||
logger.debug(f"[{platform}] OCR 过滤: 病句(引号包裹时间戳) line={line!r}")
|
||||
continue
|
||||
|
||||
texts.append(line)
|
||||
logger.debug(f"[{platform}] OCR -> {len(ocr_lines)} raw, {len(texts)} filtered, "
|
||||
@@ -2359,6 +2373,31 @@ class MessageMonitor:
|
||||
# 其它 = 背景/UI元素
|
||||
# ⭐ 核心原则:只要左半区无白色气泡 → 无用户消息 → 跳过
|
||||
|
||||
# ⭐ 跨窗口污染检测:QQ窗口无绿色气泡,若检测到大量绿色像素,说明截到了微信窗口
|
||||
def is_wechat_green(r, g, b):
|
||||
return 135 <= r <= 180 and 205 <= g <= 250 and 75 <= b <= 125
|
||||
left_green = right_green = 0
|
||||
for y in range(0, ch, step_y):
|
||||
for x in range(0, cw // 2, step_x):
|
||||
try:
|
||||
r, g, b = check.load()[x, y][:3]
|
||||
if is_wechat_green(r, g, b):
|
||||
left_green += 1
|
||||
except:
|
||||
continue
|
||||
for y in range(0, ch, step_y):
|
||||
for x in range(cw // 2, cw, step_x):
|
||||
try:
|
||||
r, g, b = check.load()[x, y][:3]
|
||||
if is_wechat_green(r, g, b):
|
||||
right_green += 1
|
||||
except:
|
||||
continue
|
||||
total_green = left_green + right_green
|
||||
if total_green >= 5:
|
||||
rlogger.debug(f"[qq] 像素检测: 检测到微信绿色像素(绿={total_green}), 判定为微信窗口, 跳过")
|
||||
return False
|
||||
|
||||
# 左半区有白色气泡 → 有用户消息,必须OCR
|
||||
if left_white >= 3:
|
||||
rlogger.debug(f"[qq] 像素检测: 有用户消息(左白={left_white}), 继续")
|
||||
|
||||
Reference in New Issue
Block a user