使用Tesseract和Python进行OCR和语言翻译

使用Tesseract和Python进行OCR和语言翻译

这篇博客将介绍如何使用Tesseract、Python自动进行OCR和文本翻译。使用textblob,翻译文本就像单个函数调用一样简单。(textblob翻译底层调用translate.google.com会报超时等,用translators库实现翻译)

1. 效果图

原始图如下:包含英文文本
使用Tesseract和Python进行OCR和语言翻译_第1张图片

OCR及翻译效果图如下:
图片中的英文文本被正确识别,然后分别转默认西班牙语,转中文,转德语。
使用Tesseract和Python进行OCR和语言翻译_第2张图片

2. 原理

安装cv2
安装textblob
安装textblob后,需下载textblob用于自动分析文本的自然语言工具包(NLTK)语料库

pip install opencv-contrib-python
pip install -U textblob
python -m textblob.download_corpora

3. tb.translate()翻译报错解决

from textblob import TextBlob #导入TextBlob类——这个类能够自动分析一段文本中的标记、名词短语,甚至是语言翻译。实例化后可以调用TextBlob类的translate()执行自动文本翻译

text = u"おはようございます。"
text = 'good morning'
tb = TextBlob(text)
translated = tb.translate(to="zh")
print(translated)

查看tb.translate源码,会发现调用的是translate.google.com接口进行的翻译:

解决办法:https://stackoverflow.com/questions/52455774/googletrans-stopped-working-with-error-nonetype-object-has-no-attribute-group

pip install translators --upgrade

import translators as ts
ts.google(‘שלום’ , to_language = ‘es’)
‘Hola’

使用Tesseract和Python进行OCR和语言翻译_第3张图片

4. 源码

# 用Tesseract对输入的图像进行OCR,然后用textblob翻译文本。
# USAGE
# 支持转的语言:https://developers.google.com/translate/v2/using_rest#language-params
# python ocr_translate.py --image images/comic.jpg
# python ocr_translate.py --image images/comic.jpg --lang de

# from textblob import TextBlob #导入TextBlob类——这个类能够自动分析一段文本中的标记、名词短语,甚至是语言翻译。实例化后可以调用TextBlob类的translate()执行自动文本翻译
#
# text = u"おはようございます。"
# text = 'good morning'
# tb = TextBlob(text)
# translated = tb.translate(to="zh")
# print(translated)

# 导入必要的包
import argparse

import cv2
import pytesseract
import translators as ts  # 翻译文本
from textblob import TextBlob  # 导入TextBlob类——这个类能够自动分析一段文本中的标记、名词短语,甚至是语言翻译。实例化后可以调用TextBlob类的translate()执行自动文本翻译

# 构建命令行参数及解析
# --image 要进行OCR和翻译的输入图像的路径
# --lang 语言,要翻译的语言,默认西班牙语es
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,
                help="path to input image to be OCR'd")
ap.add_argument("-l", "--lang", type=str, default="es",
                help="language to translate OCR'd text to (default is Spanish)")
args = vars(ap.parse_args())

# 加载输入图像,转换颜色通道
image = cv2.imread(args["image"])
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 使用Tesseract OCR图像, 由于textblob包不知道如何处理文本中的换行符,所以用空格替换空行
text = pytesseract.image_to_string(rgb)
text = text.replace("\n", " ")

# 展示原始OCR的文本
print("ORIGINAL")
print("========")
print(text)
print("")

# 翻译文本为另一种语言
# 报错用translators库代替
# tb = TextBlob(text)
# translated = tb.translate(to=args["lang"])

# 可以看到默认原始语言from_language是auto自动检测的,然后转的to_langage可设置
# def google_api(self, query_text: str, from_language: str = 'auto', to_language: str = 'en', **kwargs) -> Union[str, list]:
translated = ts.google(text, to_language=args["lang"])

# 展示翻译后的文本
print("TRANSLATED")
print("==========")
print(translated)

参考

  • https://pyimagesearch.com/2021/09/20/language-translation-and-ocr-with-tesseract-and-python/
  • 原始图片来源:Explosm漫画生成器

你可能感兴趣的:(OCR,图像处理,Python,OpenCV,python,计算机视觉,opencv,tesseract,ocr,翻译)