我正在尝试使用 Python 和 OpenCV 开发一个脚本,以检测扫描的仪器图上的一些突出显示区域,并使用 Tesseract 的 OCR 功能输出文本。我的工作流程是首先检测感兴趣区域的大体附近,然后应用处理步骤去除除文本块(线条、边框、噪声)之外的所有内容。然后将处理后的图像输入 Tesseract 的 OCR 引擎。
此工作流程适用于大约一半的图像,但由于文本接触边框而在其余图像上失败。我将在下面展示一些我的意思的例子:
步骤 1:通过使用 InRange 和荧光笔的颜色范围创建蒙版来查找感兴趣的区域。
第 2 步:绘制感兴趣区域的轮廓,裁剪并保存到文件。
--- 引用的代码从这里开始 ---
步骤 3:阈值图像并应用 Canny 边缘检测
步骤 4:轮廓边缘并使用 cv2.approxPolyDP 将它们过滤成圆形并查看顶点大于 8 的边缘。取第一或第二大轮廓通常对应于内边缘。
第 5 步:使用掩码和按位操作,轮廓内的所有内容都被转换为白色背景图像。膨胀和腐蚀用于对图像进行降噪并创建输入 OCR 引擎的最终图像。
import cv2
import numpy as np
import pytesseract
pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract'
d_path = "Test images\\"
img_name = "cropped_12.jpg"
img = cv2.imread(d_path + img_name) # Reads the image
## Resize image before calculating contour
height, width = img.shape[:2]
img = …Run Code Online (Sandbox Code Playgroud) 我正在尝试从扫描的技术图纸中提取文本。出于保密原因,我无法发布实际的绘图,但它看起来与此类似,但形状内有更多文本,因此更加繁忙。由于字母相互接触及其周围的边框/符号的问题,问题非常复杂。
我发现一篇有趣的论文正是这样做的,名为“Detection of Text Regions From Digital Engineering Drawings”,作者:Zhaoyang Lu。它位于付费专区后面,因此您可能无法访问它,但本质上它会尝试通过主要两个步骤擦除图像中非文本的所有内容:
1) 擦除线性分量,包括长短隔离线
2)根据笔画连通成分分析,擦除非文本笔画
什么样的 OpenCV 函数有助于执行这些操作?我宁愿不从头开始写一些东西来做这些,但我怀疑我可能不得不这么做。
我尝试使用基于模板的方法来尝试隔离文本,但由于图形之间的文本位置未完全规范化(即使在同一项目中),因此它无法检测第一个扫描图形之后的文本。