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

236 篇文章 43 订阅
19 篇文章 1 订阅

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

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

1. 效果图

原始图如下:包含英文文本
在这里插入图片描述

OCR及翻译效果图如下:
图片中的英文文本被正确识别,然后分别转默认西班牙语,转中文,转德语。
在这里插入图片描述

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’

在这里插入图片描述

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)

参考

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序媛一枚~

您的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值