当程序已经在运行且输出直接到终端时,传统方法无法事后捕获输出(详见 00bak/README.md)。本工具使用 OCR(光学字符识别) 技术,通过持续截图和文字识别来捕获终端输出。
.
├── terminal_ocr_capture.py # OCR捕获主程序
├── select_region.py # 交互式区域选择工具
├── test_printer.py # 测试脚本(持续打印)
├── requirements.txt # Python依赖
├── README.md # 本文件
└── 00bak/ # 旧方法测试记录(传统方法均不可行)
├── README.md # 详细测试记录
└── continuous_print.py # 旧版测试脚本
# 安装Python库
pip install -r requirements.txt
# 安装系统级OCR引擎
sudo apt-get install tesseract-ocr
# 安装中文语言包(如果需要识别中文)
sudo apt-get install tesseract-ocr-chi-sim
# 或者安装所有语言包
sudo apt-get install tesseract-ocr-all注意:如果只识别英文,可以跳过中文语言包的安装,并在运行时使用 -l eng 参数。
在一个终端窗口中运行测试脚本(模拟正在运行的程序):
python test_printer.py在另一个终端窗口中运行OCR捕获工具:
方法A:全屏捕获
python terminal_ocr_capture.py -o captured_output.txt方法B:选择特定区域(推荐)
- 先运行区域选择工具:
python select_region.py-
全屏会变暗,点击并拖拽选择终端窗口区域
-
按 Enter 确认,工具会输出完整命令,直接复制运行即可
方法C:手动指定区域
python terminal_ocr_capture.py -o captured_output.txt -r 100 100 800 600
# 参数:左上角X坐标 Y坐标 宽度 高度指定语言(如果只识别英文)
python terminal_ocr_capture.py -o captured_output.txt -l eng捕获的文本会实时保存到指定文件(如 captured_output.txt)。按 Ctrl+C 停止捕获。
主程序,持续截图并识别文字。
参数:
-o, --output: 输出文件路径(必需)-i, --interval: 截图间隔(秒),默认 0.5-r, --region: 截图区域X Y WIDTH HEIGHT(可选)-m, --monitor: 显示器索引,默认 1-l, --lang: OCR语言,默认chi_sim+eng(简体中文+英文)。可选:eng(仅英文)、chi_sim(仅简体中文)
示例:
# 全屏捕获,间隔1秒
python terminal_ocr_capture.py -o output.txt -i 1.0
# 捕获指定区域
python terminal_ocr_capture.py -o output.txt -r 0 0 1920 1080交互式区域选择工具,帮助确定终端窗口的坐标。
使用方法:
- 运行
python select_region.py - 全屏会变暗,显示红色十字光标
- 点击并拖拽选择终端窗口区域
- 按 Enter 确认,或按 Esc 取消
- 工具会输出完整的运行命令
测试脚本,模拟正在运行的程序,持续打印时间戳。
特点:
- 多线程并发打印
- 不同线程使用不同延迟
- 适合测试OCR捕获功能
运行:
python test_printer.py
# 按 Ctrl+C 停止- 截图:按设定间隔捕获屏幕或指定区域
- OCR识别:使用 Tesseract OCR 引擎识别文字
- 去重:与已保存文本对比,只保存新出现的行
- 保存:实时追加到输出文件
-
终端设置
- 使用清晰的等宽字体(如 Consolas, Monaco, DejaVu Sans Mono)
- 增大字体大小(至少 14pt,推荐 16-18pt)
- 使用高对比度配色(如黑底白字或白底黑字)
- 避免使用彩色文本(单色文本识别率更高)
-
图像预处理优化
- 程序已自动进行图像预处理:灰度化、放大2倍、增强对比度、二值化
- 这些处理有助于提高OCR识别率,特别是对中文文本
-
捕获设置
- 间隔建议 0.5-1.0 秒
- 太短:可能重复识别,增加CPU负担
- 太长:可能漏掉快速滚动的文本
-
区域选择
- 尽量精确选择终端窗口区域
- 避免包含其他窗口或UI元素
- 如果终端全屏,可以直接全屏捕获
- OCR 识别率受字体、大小、对比度影响
- 彩色文本可能影响识别(建议使用单色)
- 特殊字符(如表格边框)可能识别不准确
- 需要一定的CPU资源进行OCR处理
在 00bak/README.md 中记录了传统方法的测试结果:
- ❌ 读取
/dev/pts/N- 只能读键盘输入,无法读程序输出 - ❌ 读取
/proc/<pid>/fd/1- 已连接终端的文件描述符无法被其他进程读取 - ❌ 使用
strace- 需要 root 权限,且可能影响性能 - ✅ 使用
tee/script/tmux- 有效,但需要提前准备
OCR方法的优势:
- ✅ 不需要提前准备
- ✅ 不需要 root 权限
- ✅ 不需要修改运行中的程序
- ✅ 适用于任何已运行的程序
OCR方法的劣势:
⚠️ 需要一定的CPU资源⚠️ 识别率受显示质量影响⚠️ 无法捕获已滚出屏幕的历史内容
- 检查终端字体和大小
- 确保高对比度(黑底白字最佳)
- 尝试调整截图间隔
- 检查选择的区域是否准确
- 确认已安装 tesseract-ocr:
tesseract --version - 确认Python依赖已安装:
pip list | grep pytesseract - 检查是否有GUI权限(区域选择工具需要)
- 确认测试程序正在运行
- 检查选择的区域是否正确
- 尝试降低截图间隔
- 查看程序输出的状态信息
本项目仅供学习和研究使用。