Python无法提取TradingView截图中的Buy/Sell信号求解决
提取TradingView图表Buy/Sell信号的故障排查与修复方案
一、先确认基础环境配置
- 检查Tesseract OCR引擎路径是否正确配置,Windows系统需在代码中指定路径:
Linux/Mac系统需确保pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'tesseract已加入环境变量,或直接指定安装路径。 - 用
pip list确认依赖包版本:pyautogui、Pillow(注意不是PIL)、pytesseract、opencv-python需正常安装且版本兼容。
二、优化图像预处理流程
TradingView信号区域通常是深色背景+浅色文字,需针对性处理:
- 精准裁剪信号区域:
确保裁剪范围只包含Buy/Sell文字,避免无关区域干扰:screen = pyautogui.screenshot() # 替换为你实际的信号区域坐标(x1,y1为左上角,x2,y2为右下角) signal_img = screen.crop((150, 300, 400, 350)) - 灰度化+自适应二值化:
相比固定阈值,自适应阈值更适配不同光照下的文字:import cv2 import numpy as np # 转OpenCV格式 img_cv = cv2.cvtColor(np.array(signal_img), cv2.COLOR_RGB2BGR) # 灰度化 gray = cv2.cvtColor(img_cv, cv2.COLOR_BGR2GRAY) # 自适应二值化(反转颜色,让文字为白色背景为黑色) binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2) - 去噪处理:
用中值滤波消除小噪点:denoised_img = cv2.medianBlur(binary, 3)
三、调整Tesseract识别参数
针对Buy/Sell这类短文本,限制识别范围并优化分割模式:
# 配置参数:oem 3使用默认引擎,psm 8假设文字为单个词,白名单限制仅识别Buy/Sell custom_config = r'--oem 3 --psm 8 -c tessedit_char_whitelist=BuySell' signal_text = pytesseract.image_to_string(denoised_img, config=custom_config).strip() print("识别结果:", signal_text)
四、调试技巧
- 保存每一步预处理后的图像,比如
cv2.imwrite('debug_denoised.png', denoised_img),直观检查哪一步导致文字模糊或丢失。 - 手动截取信号区域的图片,用Tesseract命令行测试:
确认引擎本身能识别该文字,再排查代码问题。tesseract test_signal.png output --oem 3 --psm 8 -c tessedit_char_whitelist=BuySell
内容的提问来源于stack exchange,提问作者Ignasis
相关产品推荐
相关产品推荐

