随着人工智能技术的不断发展,OCR技术也越来越成熟。PaddleOCR作为一款开源的OCR工具,不仅能够识别文字,还能够识别表格、公式、图像等多种形式的信息。在架构图转换方面,PaddleOCR也有着不可替代的作用。
一般画架构图会参照已有的模板,绘制过程往往需要手动输入文字,然后再手动调整文字的位置,这样不仅费时费力,而且容易出现误差。而PaddleOCR则可以通过识别架构图中的文字,自动转换为drawio能够识别的格式,并且能够保持文字的相对位置不变,大大提高了转换的效率和准确性。
具体操作步骤如下:
1.使用PaddleOCR对架构图进行文字识别,生成识别结果,并复制到剪切板。
2.将剪切板的结果粘贴到drawio中,自动转换为drawio能够识别的格式。
通过PaddleOCR的帮助,架构图转换变得更加简单、快捷、准确。不仅可以提高工作效率,还可以减少人为误差,为工程师们带来更好的使用体验。
import pyperclip, os
from paddleocr import PaddleOCR, paddleocr
def convert_to_mxGeometry(coords):
x_min = min([coord[0] for coord in coords])
y_min = min([coord[1] for coord in coords])
x_max = max([coord[0] for coord in coords])
y_max = max([coord[1] for coord in coords])
width = x_max - x_min
height = y_max - y_min
x = x_min + width/2
y = y_min + height/2
return f'<mxGeometry x="{x}" y="{y}" width="{width}" height="{height}" as="geometry"/>'
def test_convert_to_mxGeometry():
coords = [[29.0, 122.0], [216.0, 122.0], [216.0, 135.0], [29.0, 135.0]]
print(convert_to_mxGeometry(coords))
def ocr_to_mxGraphModel(img_path):
# 判断是否为图片
if not img_path.endswith(('.jpg', '.png', '.jpeg')):
return '请使用图片文件'
# 判断图片是否存在
if not os.path.exists(img_path):
return '图片不存在'
# 关闭DEBUG日志的打印
import logging
paddleocr.logging.disable(logging.DEBUG)
# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换
# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
ocr = PaddleOCR(use_angle_cls=True, lang="ch")
print('正在识别图片,请稍等...')
result = ocr.ocr(img_path, cls=True)
num, ret= 2, ['<mxGraphModel><root><mxCell id="0"/><mxCell id="1" parent="0"/>']
for line in result:
for word in line:
# xml转义字符
value = word[1][0].replace('&', '&').replace('<', '<').replace('>', '>').replace('"', '"')
ret.append(f'<mxCell id="{num}" value="{value}" style="rounded=0%3BwhiteSpace=wrap%3Bhtml=1%3B" vertex="1" parent="1">')
ret.append(convert_to_mxGeometry(word[0]))
ret.append('</mxCell>')
num += 1
# print(convert_to_mxGeometry(word[0]) , word[1][0])
ret.append('</root></mxGraphModel>')
print('识别完成')
# 拼接成xml
return ''.join(ret)
if __name__ == '__main__':
print('程序开始运行')
# 图片路径
img_path = R'C:\Users\Jack\Desktop\11.png'
# 识别图片,得到xml
xml = ocr_to_mxGraphModel(img_path)
# 复制到剪切板
pyperclip.copy(xml)
print('已复制到剪切板,请在draw.io中粘贴')
原始图片
识别后的