使用 Python 中的 OCR、pytesseract 和 opencv 翻译图像内的文本并将翻译后的文本写回 img(相同位置)时出现问题

问题描述 投票:0回答:1

我正在做一个关于 python 中 OCR 翻译的项目。我正在尝试编写一个脚本,该脚本获取一个充满图像的网页,其中包含一些文本。通过 OCR,它将检测要翻译的文本,然后将翻译后的文本写在原始文本上。该项目专注于翻译网络漫画(准确地说是对话气球中的文本)。 我会尽力解释得更好,对不起我的英语。所以,我的想法是做一个 HTML 请求来获取网页的内容。然后将其转换为 PDF 文件。接下来将 PDF 拆分为多个 PNG。之后,圈出每个 PNG 以:1) 扫描图像以查找单词 2) 存储这些单词的位置 3) 获取这些单词并翻译它们 4) 获取翻译后的单词并使用存储的位置将它们放在原件上。在所有 PNG 的文本都被替换并翻译后,我会将它们合并到一个新的最终 pdf 中。我的问题是我不能做 OCR 部分。我也不知道如何存储原始文本位置,然后使用该位置在其上写一些东西。 作为 python 新手,我正在尽力而为。

我已经完成了 HTML 请求和转换成 PDF 文件部分:

import requests
from bs4 import BeautifulSoup
import pdfkit

url = "https://example.com"

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)

soup = BeautifulSoup(response.content, 'html.parser')

try:
    pdfkit.from_string(str(soup), 'page.pdf', configuration=pdfkit.configuration(wkhtmltopdf='C:/Program Files/wkhtmltopdf/bin/wkhtmltopdf.exe'), options={'enable-local-file-access': ''})
except IOError as e:
    print("Error:", e)
    pass

我也做了拆分成PNG的部分:

from pdf2image import convert_from_path

pdf_path = "page.pdf"

images = convert_from_path(pdf_path)
for i, image in enumerate(images):
    image.save("pages/page_{}.png".format(i), "PNG")

至于现在,一切正常。下一点是使用 OCR 跟踪文本并存储其位置,但我不知道该怎么做。我在网上搜索但找不到我需要的东西。所以,怀着最后的希望,我尝试了 OpenAI GPT3,看看这个著名的 AI 是否能找到一些东西。它给了我这个代码:

import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

img = cv2.imread("page_1.png")

text = pytesseract.image_to_string(img)

h, w, _ = img.shape
boxes = pytesseract.image_to_boxes(img)
for b in boxes.splitlines():
    b = b.split(' ')
    img = cv2.rectangle(img, (int(b[1]), h - int(b[2])), (int(b[3]), h - int(b[4])), (0, 0, 255), 2)

cv2.imshow("Image", img)
cv2.waitKey(0)

结果令人印象深刻,但这不是我需要的。它只会在字母和其他线条周围产生皱纹。 result of gpt script

所以我尝试修改代码。我也从头开始重写了它,但什么也没有。在它的帮助下,我能做的最好的事情就是在 img 上随机显示文本。 result of last script

我也已经完成了将来需要的翻译部分(是的,我正在尝试将英语翻译成意大利语):

from googletrans import Translator
def translate_text(text):
    translator = Translator(service_urls=['translate.google.com'])
    translated_text = translator.translate(text, dest='it').text
    return translated_text

接下来我将做“将多个 PNG 文件恢复为一个 PDF 文件”,但我认为我可以做到。如前所述,我的问题是 OCR 部分。有人可以帮我吗?

python opencv ocr translation python-tesseract
1个回答
0
投票

与其尝试从头开始,不如使用 OCR 应用程序通过一两个步骤完成转换。因此,发送 PDF 以进行从英语到意大利语的翻译看起来就像通过 Google 完成的一样。

然而,自动翻译存在很多问题,尤其是在 PDF 中,因为词序经常发生巨大变化,而源图像通常仍然存在。

因此,在发送源 PDF 时,需要先对图像进行编辑,因为稍后进行编辑会更加困难,因此根据需要剪切和粘贴翻译会更容易。

© www.soinside.com 2019 - 2024. All rights reserved.