OCR技术与图像中营养信息的提取

在数字化时代,数据湖的构建已成为企业获取洞察力的关键。特别是在食品行业,从产品信息到营养成分的大量数据收集变得尤为重要。然而,许多营养成分信息是以图像形式存在,而非文本,这给传统的网络爬虫技术带来了挑战。本文将探讨如何利用光学字符识别(OCR)技术,特别是Tesseract和PyTesseract,来从图像中提取营养信息。

Tesseract与PyTesseract

OCR技术领域,Tesseract是一个领先的开源引擎,由Google拥有,遵循Apache 2.0许可协议。Tesseract最初由HP使用C语言开发,现在已经成为OCR领域的一个标准工具。随着Python语言的流行,社区开发了一个名为PyTesseract的包装器,它包含了原始项目的所有特性,并且可以在GitHub上找到,也可以通过Python Package Index (PyPI)使用。

表格理论

在项目初期,面临的挑战是如何从图像中读取营养成分表。这些表格中的文字常常被水平线和垂直线分隔,这给机器阅读带来了困难。目标是去除这些线条,只保留文字和数值,以减少机器的注意力分散。为了解决这个问题,采取了两个步骤。首先,使用水平和垂直核来识别线条的位置,生成二值化图像。这一步骤使用了OpenCV,这是一个完整的、非常流行的Python图像库。

def remove_lines(image, colors): gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) bin_image = cv2.threshold(gray_image, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1] h_contours = get_contours(bin_image, (25, 1)) v_contours = get_contours(bin_image, (1, 25)) for contour in h_contours: cv2.drawContours(image, [contour], -1, colors[0][0], 2) for contour in v_contours: cv2.drawContours(image, [contour], -1, colors[0][0], 2) return image

一旦识别出这些线条,如何从图像中删除它们呢?答案是K-means,这是一个无监督的机器学习算法,通常用于聚类。K-means不需要外部输入,只需要确定K值,即问题所需的聚类数量。

EAST — 高效准确的场景文本检测器

在这个阶段,还没有实现机器阅读,但使用了EAST,这是一个开源的场景文本检测器,其代码可以在GitHub上找到。在本项目中,EAST被用来进一步简化机器的工作,去除干扰,专注于图像文本。EAST本身只定位文本的位置,并不读取文本,这可以类比为一个文盲,他知道那里有文本,但不知道写了什么。

SymSpell

from nkocr import OcrTable text = OcrTable("paste_image_url_here") print(text) # or print(text.text)
  • tesseract-ocr/tesseract
  • sklearn.cluster.KMeans – scikit-learn 0.24.1 documentation
  • 1000x Faster Spelling Correction algorithm (2012)
  • OpenCV: OpenCV-Python Tutorials
  • A quick overview of the implementation of a fast spelling correction algorithm
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485