Python Unix终端屏幕截图到文本

Python Unix终端屏幕截图到文本,python,opencv,python-tesseract,Python,Opencv,Python Tesseract,考虑到这可能是一项相当简单的任务,我想拍摄一个unix终端的屏幕截图,并将其转换为文本,或者尽可能接近从终端复制的文本。我一直在四处挖掘,图像到文本的常见选择似乎是cv2,用于清理和识别相关区域的纹理,然后用于将已识别区域转换为文本。下面的代码来自各种在线资源,但我不得不说,我不完全知道这些函数都在做什么,也不知道如何实现预期的输出 代码只是将整个屏幕截图标识为一个countour,以提供给tesseract,它的处理似乎是以列而不是行的形式进行的 有没有什么地方可以让我在每一条线周围画矩形,然

考虑到这可能是一项相当简单的任务,我想拍摄一个unix终端的屏幕截图,并将其转换为文本,或者尽可能接近从终端复制的文本。我一直在四处挖掘,图像到文本的常见选择似乎是cv2,用于清理和识别相关区域的纹理,然后用于将已识别区域转换为文本。下面的代码来自各种在线资源,但我不得不说,我不完全知道这些函数都在做什么,也不知道如何实现预期的输出

代码只是将整个屏幕截图标识为一个countour,以提供给tesseract,它的处理似乎是以列而不是行的形式进行的

有没有什么地方可以让我在每一条线周围画矩形,然后一行一行地传递给tesseract

**更新:**我更成功地将tesseact配置设置为“-psm 6”。然而,有些字母并没有完全正确地检测出来。我还需要做些什么来清理图像吗

#导入所需的软件包
进口cv2
导入pytesseract
pytesseract.pytesseract.tesseract_cmd=r'C:\Users\cdoyle5\AppData\Local\tesseract OCR\tesseract.exe'
img=cv2.imread(“term1.png”)
灰色=cv2.CVT颜色(img,cv2.COLOR\U BGR2GRAY)
ret,thresh1=cv2.阈值(灰色,0,255,cv2.THRESH_OTSU | cv2.THRESH_BINARY_INV)
rect_kernel=cv2.getStructuringElement(cv2.MORPH_rect,(20,20))
扩张=cv2.扩张(thresh1,rect_内核,迭代次数=1)
轮廓,层次=cv2.查找轮廓(扩张,cv2.RETR\u外部,cv2.CHAIN\u近似值\u无)
im2=img.copy()
打开(“text_from_terminal.txt”,“w+”)作为文件:
对于轮廓中的cnt:
x、 y,w,h=cv2.boundingRect(cnt)
矩形(im2,(x,y),(x+w,y+h),(0255,0),2)
#裁剪文本块以向OCR提供输入
裁剪=im2[y:y+h,x:x+w]
cv2.imshow(“裁剪”,裁剪)
cv2.等待键(0)
text=pytesseract.image_到_字符串(裁剪)
打印(“检测到:”,文本)
#将文本追加到文件中
file.write(文本+“\n”)
截图示例

预期产出

ubuntu@vps-f116ed9f:~$ls-轻轨
总数538160
-rw-rw-r--1 ubuntu Ubuntu508206724 10月17日07:23 splunk-8.1.0-f57c09e87251-Linux-x86_64.tgz
drwxr-xr-x 3 ubuntu 4096 11月1日21:17快照
-rw-rw-r--1 ubuntu 42847944 11月17日09:56 splunkforwarder-8.1.0-f57c09e87251-linux-2.6-x86_64.rpm
-rw-rw-r--1 ubuntu Ubuntu0 11月17日20:10测试
drwxrwxr-x 3 ubuntu ubuntu 4096 Dec 2 11:56 TM129VCE
-rw-rw-r--1 ubuntu ubuntu 226 Dec 8 16:34 Dockerfile
drwxrwxr-x 2 ubuntu 4096十二月28日23:27屏幕到文本
实际产出

ubuntu@v'ps-f116ed9f:5.:ls-1rt
总数53B1600
-rw-rw-r--
DRWXRIX
-rw-rw-r--
-rw-rw-r--
drwxrwxrix
-rw-rw-r--
drwxrwxrix
~>-Aw>-'>-Aw>-A
ubuntu
ubuntu
ubuntu
ubuntu
ubuntu
ubuntu
ubuntu
ubuntu 503206724
ubuntu 4 0 9 6
ubuntu 42B47944
ubuntu 0
ubuntu 4 0 9 6
ubuntu 2 2 6
4 0 9 6
ubuntu
十月
十一月
十一月
十一月
12月
12月
12月
17
17
17
2B
07:23
21:17
09:56
20:10
11:56
16:34
23:27
sp1unk-a.1.0-f57c09ea7251-Linux-xa6_64.tgz
断裂
sp1unkforwarder-a.1.0-f57c09ea7251-1inux-2.6-xa6_64.rpm
测试
TM129VCE
Dockerfile
屏幕到文本

据我所知,您希望将命令的输出保存在“text\u From\u terminal.txt”中,如果您希望这样做,那么您只需通过以下代码即可:-

import os

output = os.popen("ls -lrt").read()

with open("text_from_terminal.txt","w+") as file:
    file.write(output)

如果您想将某些命令的结果作为文本,请将其重定向到文件ie。
ls-lrt>output.txt
tesseract在白色背景上使用黑色文本效果更好。tesseract文档:在linux上,您可以使用
script output.txt
,然后将所有显示的文本保存在文件
output.txt
-直到您运行
退出
谢谢,我会尝试反转文本的图像以查看是否有任何改进。这个想法的原因是我工作的远程环境不允许从远程终端复制/粘贴到本地机器,也不允许sftp访问。所以我想看看是否可以从远程终端的屏幕截图中提取文本。不,这不是我想做的。正如我所说,我有一个unix终端的屏幕截图。我希望能够从该图像中提取文本。