【SVG 生成系列论文(四)】对 SVG 如何做数据增强?StarVector: Generating Scalable Vector Graphics Code from Images

72 篇文章 16 订阅
10 篇文章 0 订阅

本篇则详细介绍 StarVector 如何制作数据集的,以及文章提到的两个 SVG 相关工具。

不过截止2024-05-10,https://github.com/joanrod/star-vector 还并没有开源任何代码和数据集,估计是因为论文没中的缘故😂

SVG 的数据增强

作者引入了几种增强操作来对SVG进行处理,以便对图像进行轻微的修改,从而帮助模型学习生成更精确的结果。

  1. 为了使模型能够从图像中准确捕获颜色,并将其编码为十六进制代码,然后将其引入SVG元素的填充 (fill)属性中。

    例如这段 svg 代码中的 fill 就是十六进制,<path d="M0,0 L27,0 L25,37 L23,69 L21,72 L0,72 L-1,42 L-9,65 L-19,65 L-24,48 L-25,69 L-26,70 L-48,70 L-48,7 L-47,3 L-22,2 L-14,26 L-12,30 Z " fill="#292B59" transform="translate(215,213)"/>

  2. 对曲线的控制点进行旋转或添加噪声有助于模型学习准确捕捉边缘的位置或画笔 (Stroke) 的粗细:
  • 旋转:在一个角度范围内进行随机旋转。通过首先解析元素的颜色,然后在 RGB 值上添加小的高斯白噪声来进行颜色变化。

    高斯白噪声是一种常用的随机信号,具有以下特征:(1) 高斯分布:其取值服从正态分布,即平均值为0,标准差为1的正态分布。(2)白噪声:在频域上,它具有平均功率相等的频率分布,即在所有频率上的能量相等。
    在颜色中添加高斯白噪声意味着在RGB(红绿蓝)通道中加入具有高斯分布的随机值。这种噪声通常被用来模拟真实世界中的随机变化,例如摄像机传感器噪声或其他环境噪声。

  • 噪声:作者提出了曲线噪声,通过向贝塞尔曲线的控制点注入一小部分Perlin [ 1 ] ^{[1]} [1]噪声来实现。作者也尝试了添加高斯噪声,但结果不太自然。作者通过均匀地从0.01到0.05的区间中采样一个标量,并将其用于缩放噪声。

    Perlin noise 是一种用于生成自然、随机和连续的噪声的算法,由Ken Perlin在1985年设计。它最初被用于创建逼真的纹理和地形,但现在在计算机图形学、动画和游戏开发中被广泛应用。
    可以用 https://pypi.org/project/perlin-noise/ 库直接生成

直接将这些增强应用于 SVG 代码,这涉及解析 XML 代码并访问所定义的基元的属性和参数。作者使用 BeautifulSoup [ 2 ] ^{[2]} [2] 和SvgPathTools [ 3 ] ^{[3]} [3]库。一些基元使用以上增强方式进行了简化。

BeautifulSoup

Beautiful Soup 是一个用于从HTML和XML文档中提取数据的Python库。它提供了一种简单而灵活的方式来解析复杂的网页,并使得提取所需信息变得容易。以下是Beautiful Soup的一些主要特点:

  1. 解析HTML和XML:Beautiful Soup可以解析HTML和XML文档,使得您可以从网页中提取所需的数据。

  2. 简单易用:Beautiful Soup提供了简单而直观的API,使得从网页中提取数据变得容易。您可以使用类似于浏览器的选择器语法来查找和操作文档中的元素。

  3. 灵活性:Beautiful Soup可以处理各种不同类型的HTML和XML文档,并且在解析过程中能够处理不规范的标记和结构。

  4. 支持多种解析器:Beautiful Soup支持多种解析器,包括Python的内置解析器以及第三方解析器(如lxml和html5lib),使得您可以根据需求选择最适合您的解析器。

  5. Unicode支持:Beautiful Soup能够正确处理Unicode编码,使得您可以处理来自不同语言和地区的文档。

总之,Beautiful Soup是一个功能强大且易于使用的库,适用于从网页中提取数据的各种应用场景,包括网络爬虫、数据抓取、数据挖掘等。

因为 SVG 是一种基于 XML 的矢量图形格式,因此在 HTML 或 XML 文档中嵌入的 SVG 代码可以被 Beautiful Soup 正确解析和处理。

SvgPathTools

svgpathtools 是一组用于操作和分析 SVG 路径对象和贝塞尔曲线的工具集。其包含了一系列函数,旨在轻松读取、写入和显示 SVG 文件,以及大量几何导向的工具来转换和分析路径元素。

此外,子模块 bezier.py 包含了用于处理通用的 n 次贝塞尔曲线的工具,这些曲线存储为 n 元组。

一些包含的工具:

  • 读取、写入和显示包含路径(以及其他)SVG 元素的 SVG 文件
  • 将贝塞尔路径段转换为 numpy.poly1d(多项式)对象
  • 将多项式(标准形式)转换为它们的贝塞尔形式
  • 计算切线向量和(右手规则)法向量
  • 计算曲率
  • 将不连续的路径分割成连续的子路径
  • 高效地计算路径和/或路径段之间的交点
  • 找到路径或路径段的边界框
  • 颠倒路径段/路径的方向
  • 裁剪和分割路径和路径段
  • 平滑路径(即,平滑掉凹点,使路径可微分)
  • 从路径域到段域的过渡映射,以及反过来(T2t 和 t2T)
  • 计算封闭路径围成的面积
  • 计算弧长
  • 计算弧长的反函数
  • 将 RGB 颜色元组转换为十六进制颜色字符串,以及反向转换

[1] Perlin noise improve adversarial robustness. arXiv preprint arXiv:2112.13408, 2021
[2] https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
[3] https://github.com/mathandy/svgpathtools

### Java DRW to PDF Conversion Library or Tool For converting DRW files into PDF format using Java, several libraries and tools can facilitate this process. One approach involves utilizing a combination of libraries that handle vector graphics and PDF generation. The Apache Batik library offers robust support for handling SVG (Scalable Vector Graphics), which shares similarities with DRW as both are vector-based formats. By first converting the DRW file content into an intermediate format like SVG through custom parsing logic specific to the DRW structure, then leveraging Batik’s capabilities to render SVGs, one can proceed towards generating PDF output[^1]. Another option includes employing JFreeChart alongside iText. While primarily designed for charting purposes, JFreeChart supports various graphic outputs including shapes found within DRW drawings. After rendering these elements via JFreeChart, integrating them into a document created by iText allows for comprehensive control over layout and styling during the final transformation phase from drawn objects to fixed-layout pages suitable for viewing in Adobe Acrobat Reader or similar applications. A direct method would involve finding specialized software dedicated explicitly to CAD drawing conversions such as DWG TrueView combined with third-party APIs capable of translating between proprietary AutoCAD formats and open standards supported directly by popular PDF creation SDKs available on the market today. However, native Java solutions focusing specifically on DRW-to-PDF might not be widely advertised due to less common usage scenarios compared to other industry-standard exchange formats used across different engineering disciplines. ```java // Example code snippet demonstrating how you could use Apache Batik to convert SVG (as intermediary step after parsing DRW) to PDF. import org.apache.batik.transcoder.TranscoderInput; import org.apache.batik.transcoder.TranscoderOutput; import org.apache.batik.transcoder.image.PNGTranscoder; public class DrwToPdfConverter { public static void main(String[] args) throws Exception { // Assume 'drwContent' contains parsed data converted to SVG string representation String svgData = "<svg xmlns='http://www.w3.org/2000/svg'>...</svg>"; TranscoderInput inputSvgImage = new TranscoderInput(new java.io.StringReader(svgData)); OutputStream outStream = new FileOutputStream("output.pdf"); Writer outWriter = null; try{ PdfTranscoder pdfTranscoder = new PdfTranscoder(); TranscoderOutput outputPngImage = new TranscoderOutput(outStream); pdfTranscoder.transcode(inputSvgImage,outputPngImage ); } finally {if (outStream !=null ) outStream.close(); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值