PaddleOCR实现drawio架构图快速识别和转换,保持文字相对位置不变,便于后续调整。

随着人工智能技术的不断发展,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('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;').replace('"', '&quot;')
            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中粘贴')

原始图片
在这里插入图片描述

识别后的
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值