gpt4 book ai didi

python - Unix 终端截屏转文本

转载 作者:行者123 更新时间:2023-12-05 06:54:39 26 4
gpt4 key购买 nike

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

该代码只是将整个屏幕截图标识为一个给 tesseract 的计数,它的处理似乎是按列而不是行来处理它。

有没有什么地方可以在每条线周围绘制矩形,然后逐行传递给 tesseract?

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

# Import required packages
import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r'C:\Users\cdoyle5\AppData\Local\Tesseract-OCR\tesseract.exe'
img = cv2.imread("term1.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh1 = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY_INV)
rect_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (20, 20))
dilation = cv2.dilate(thresh1, rect_kernel, iterations=1)
contours, hierarchy = cv2.findContours(dilation, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
im2 = img.copy()

with open("text_from_terminal.txt", "w+") as file:
for cnt in contours:
x, y, w, h = cv2.boundingRect(cnt)

cv2.rectangle(im2, (x, y), (x + w, y + h), (0, 255, 0), 2)
# Cropping the text block for giving input to OCR
cropped = im2[y:y + h, x:x + w]
cv2.imshow("cropped", cropped)
cv2.waitKey(0)
text = pytesseract.image_to_string(cropped)
print("detected: ", text)

# Appending the text into file
file.write(text + "\n")

屏幕截图示例 enter image description here

预期输出

ubuntu@vps-f116ed9f:~$ ls -lrt
total 538160
-rw-rw-r-- 1 ubuntu ubuntu 508206724 Oct 17 07:23 splunk-8.1.0-f57c09e87251-Linux-x86_64.tgz
drwxr-xr-x 3 ubuntu ubuntu 4096 Nov 1 21:17 snap
-rw-rw-r-- 1 ubuntu ubuntu 42847944 Nov 17 09:56 splunkforwarder-8.1.0-f57c09e87251-linux-2.6-x86_64.rpm
-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 17 20:10 test
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 ubuntu 4096 Dec 28 23:27 screen_to_text

实际输出

ubuntu@v'ps—f116ed9f: 5.: ls —1rt

total 5 3 B 1 6 0
—rw—rw—r——
drwxrixrix
—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

Oct
NOV
NOV
NOV
Dec
Dec
Dec

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

Snap
sp1unkforwarder—a.1.0—f57c09ea7251—1inux—2.6—xa6_64.rpm
test

TM129VCE

Dockerfile

screen_to_text


最佳答案

据我了解,您想将命令的输出保存在“text_from_terminal.txt”中,如果这是您想要的,那么您可以通过以下代码简单地执行此操作:-

import os

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

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

关于python - Unix 终端截屏转文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65485978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com