当前位置: 首页 > news >正文

商城网站建设哪家效益快php网站开发实例教程代码

商城网站建设哪家效益快,php网站开发实例教程代码,数据网站建设成本,安徽科技学院论文#xff1a;https://arxiv.org/abs/2505.14059 代码#xff1a;github.com/bytedance/Dolphin 2025年5月#xff0c;字节开源了文档解析Dolphin#xff0c;让文档解析效率提升83%。本文将深入解析字节跳动最新开源的Dolphin模型#xff0c;先看理论再实战体验。 现实… 论文https://arxiv.org/abs/2505.14059 代码github.com/bytedance/Dolphin 2025年5月字节开源了文档解析Dolphin让文档解析效率提升83%。本文将深入解析字节跳动最新开源的Dolphin模型先看理论再实战体验。 现实世界中约80%的有价值信息都被囚禁在非结构化文档中——PDF学术论文、企业报告、技术文档、医疗记录。这些沉睡的数据资产如同被锁在保险柜中的黄金等待着被解放的钥匙。 一. 理论 1. 文档解析面临的挑战 文档解析表面上看似直观——将图像转换为可编辑文本。但深入分析后发现这是一个涉及计算机视觉、自然语言处理、布局分析、结构理解的多维度挑战 视觉复杂性从手写笔记到精美排版从单栏文本到多栏布局内容异构性文本、表格、公式、图表、化学结构式的混合出现结构层次性标题、段落、列表、脚注的层次关系语言多样性多语言混排、专业术语、数学符号质量差异性扫描质量、拍照角度、光照条件的不一致 2. 目前的解决方案 传统路径集成式专家系统——通过不同的算法模块组合和逻辑策略实现文档解析例如Paddle OCR技术框架如下图所示。 多个模型组合实现文档解析 优势每个专家模型在特定任务上精度较高 缺点如下 错误累积效应前一阶段的错误会被放大传递系统复杂度高需要维护多个模型和复杂的协调机制结构丢失风险在模型间传递过程中容易丢失全局结构信息效率瓶颈串行处理导致延迟累积 多模态视觉-语言大模型解决方案以Qwen2.5 VL、GPT-4V为代表采取一步到位的策略实现路径如下图所示。 视觉-语言多模态大模型实现文档解析 优势架构简洁能够利用大模型的泛化能力 缺点如下 效率困境自回归解码的串行特性导致处理速度慢结构丢失长序列生成过程中容易丢失布局信息资源消耗需要大规模模型才能达到可用精度控制困难难以精确控制输出格式和结构 3. Dolphin是如何实现的 Dolphin模型以322M的轻量级参数量在所有评测指标上都取得了最优性能处理效率方面Dolphin达到0.1729 FPS比第二名Mathpix0.0944 FPS快近2倍相比动辄数千亿参数的通用VLM和复杂的集成式方案Dolphin在保持轻量化的同时实现了专业文档解析的最佳效果 那么Dolphin是如何实现的呢下图展示了Dolphin的算法架构 Dolphin算法框架包含布局分析模块和并行解析模块 布局分析模块确定自然阅读顺序、识别元素块类别、检测元素块的bbox元素块包括段落、表格、图片、公式等。 # 伪代码示例 def stage1_layout_analysis(document_image):visual_features swin_transformer(document_image)layout_prompt Parse the reading order of this document.layout_sequence mbart_decoder(visual_features, layout_prompt)return structured_elements # [(type, bbox, reading_order), ...]元素内容解析模块根据元素的类别对应不同的提示词并对元素块进行并行解析从而实现元素级别的内容识别。 # 伪代码示例 def stage2_content_parsing(document_image, layout_elements):results []for element in layout_elements:cropped_region crop_image(document_image, element.bbox)task_prompt get_prompt_by_type(element.type)content mbart_decoder(cropped_region, task_prompt)results.append((element, content))return parallel_process(results) # 并行处理4. Dolphin设计亮点 共享编解码器同一个模型实现布局分析模块和元素内容解析模块。仅通过提示词差异化实现功能分化如下表所示 PROMPTS {layout: Parse the reading order of this document.,table: Extract table structure and content in HTML format.,paragraph: Extract text content preserving structure.,formula: Convert mathematical formula to LaTeX format. }元素块并行解析实现效率的提升 二. 实践 1. 获取代码并配置环境 # 获取代码 git clone https://github.com/ByteDance/Dolphin.git cd Dolphin# 配置环境 pip install -r requirements.txt2. 下载模型并测试 模型下载地址https://drive.google.com/drive/folders/1PQJ3UutepXvunizZEw-uGaQ0BCzf-mie 下载的模型放在./checkpoints目录下 测试代码脚本 python demo_page.py --config ./config/Dolphin.yaml --input_path ./demo/page_imgs/page_1.jpeg --save_dir ./results3. 结果可视化 # 更多精彩请关注微信公众号AIWorkshopLab import json from PIL import Image, ImageDraw, ImageFont import osdef draw_layout_on_image(img_path, layout_json_path, output_path):在图片上绘制layout信息Args:img_path: 图片路径layout_json_path: layout.json文件路径output_path: 输出图片路径# 1. 用PIL读取图片img Image.open(img_path)draw ImageDraw.Draw(img)# 2. 读取layout.json数据with open(layout_json_path, r, encodingutf-8) as f:layout_data json.load(f)# 定义不同label的颜色label_colors {tab: #FF0000, # 红色 - 表格cap: #00FF00, # 绿色 - 标题sec: #0000FF, # 蓝色 - 章节para: #FF00FF, # 紫色 - 段落pic: #FFFF00, # 黄色 - 图片fig: #FFFF00, # 黄色 - 图片list: #00FFFF, # 青色 - 列表formula: #FFA500, # 橙色 - 公式footnote: #800080, # 紫红色 - 脚注header: #008000, # 深绿色 - 页眉footer: #800000 # 深红色 - 页脚}# 尝试加载支持中文的字体font_large Nonefont_small None# 常见的中文字体路径列表chinese_font_paths [/usr/share/fonts/truetype/wqy/wqy-microhei.ttc,/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc, /usr/share/fonts/truetype/arphic/ukai.ttc,/usr/share/fonts/truetype/arphic/uming.ttc]# 尝试加载中文字体for font_path in chinese_font_paths:try:if os.path.exists(font_path):font_large ImageFont.truetype(font_path, 16)font_small ImageFont.truetype(font_path, 12)print(f成功加载字体: {font_path})breakexcept Exception as e:continue# 如果没有找到中文字体尝试使用英文字体if font_large is None:try:font_large ImageFont.truetype(/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf, 16)font_small ImageFont.truetype(/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf, 12)print(使用英文字体)except:print(警告: 无法加载任何字体将使用基本绘制方式)def safe_text_length(text, font):安全地计算文本长度处理编码错误try:if font:return draw.textlength(text, fontfont)else:# 简单估算中文字符按2个字符宽度英文按1个字符宽度chinese_chars sum(1 for char in text if ord(char) 127)english_chars len(text) - chinese_charsreturn chinese_chars * 12 english_chars * 6 # 估算宽度except UnicodeEncodeError:# 如果遇到编码错误使用简单估算chinese_chars sum(1 for char in text if ord(char) 127)english_chars len(text) - chinese_charsreturn chinese_chars * 12 english_chars * 6def safe_draw_text(x, y, text, fill, fontNone):安全地绘制文本处理编码错误try:if font:draw.text((x, y), text, fillfill, fontfont)else:draw.text((x, y), text, fillfill)except UnicodeEncodeError:# 如果遇到编码错误尝试只绘制ASCII字符ascii_text .join(char if ord(char) 128 else ? for char in text)draw.text((x, y), ascii_text, fillfill, fontfont if font else None)# 3. 遍历layout数据并绘制for item in layout_data:label item[label]bbox item[bbox] # [x1, y1, x2, y2]reading_order item[reading_order]text item.get(text, )# 获取颜色如果没有定义则使用默认颜色color label_colors.get(label, #808080)# 绘制边界框draw.rectangle(bbox, outlinecolor, width3)# 绘制label和reading_orderlabel_text f{label}({reading_order})# 计算文本位置在框的左上角text_x bbox[0]text_y bbox[1] - 20 if bbox[1] 20 else bbox[1] 5# 绘制背景矩形使文字更清晰try:if font_large:text_bbox draw.textbbox((text_x, text_y), label_text, fontfont_large)draw.rectangle(text_bbox, fillwhite, outlinecolor)safe_draw_text(text_x, text_y, label_text, color, font_large)except:# 如果出错使用简单方式绘制safe_draw_text(text_x, text_y, label_text, color)# 如果文本内容不为空且不是表格HTML显示部分文本内容if text and not text.startswith(table):# 截取前30个字符避免文本过长中文字符较宽display_text text[:30] ... if len(text) 30 else textdisplay_text display_text.replace(\n, ) # 替换换行符# 在框内显示文本内容content_x bbox[0] 5content_y bbox[1] 25# 简化文本处理避免复杂的换行逻辑导致编码错误if font_small:# 计算可用宽度available_width bbox[2] - bbox[0] - 10# 简单的文本截断避免复杂的分词逻辑max_chars max(1, available_width // 8) # 估算每个字符8像素宽度if len(display_text) max_chars:display_text display_text[:max_chars] ...# 绘制文本if content_y bbox[3] - 15: # 确保不超出框的底部safe_draw_text(content_x, content_y, display_text, black, font_small)else:safe_draw_text(content_x, content_y, display_text, black)# 4. 保存结果img.save(output_path)print(f结果已保存到: {output_path})def main():# 设置文件路径img_path ./test.pnglayout_json_path ./results/recognition_json/test.jsonoutput_path ./test_visualization.png# 检查文件是否存在if not os.path.exists(img_path):print(f图片文件不存在: {img_path})returnif not os.path.exists(layout_json_path):print(fJSON文件不存在: {layout_json_path})return# 创建输出目录如果输出路径包含目录output_dir os.path.dirname(output_path)if output_dir:os.makedirs(output_dir, exist_okTrue)# 执行绘制draw_layout_on_image(img_path, layout_json_path, output_path)if __name__ __main__:main()测试结果如下左图是输入图片右图是可视化结果。 博主思考Dolphin在文档解析精度和解析效率达到了SOTA代码架构简单是未来的发展趋势。虽然在复杂板式和竖排文字识别上还有些问题但是通过添加数据并适当加大模型应该是可以解决的。 感谢关注喜欢记得给博主点赞~
http://www.zqtcl.cn/news/591610/

相关文章:

  • 成都网站开发培训综合网站开发实训总结
  • 个人备案网站名称文学网站开发
  • 花钱做推广广告哪个网站好泗洪网页设计
  • 望牛墩镇网站建设公司网站建设企业熊掌号
  • 做网站一般会出现的问题静态网站的好处就是安全性好从而
  • 做海鲜代理在什么网站建筑网片钢筋网生产厂家
  • 万网网站建设方案书导购网站开发要多少钱
  • 做网站muse好还是DW好用wordpress %link
  • html5门户网站模版做投标需要知道什么网站
  • 合肥网站制作推广seo引擎搜索网站关键词
  • 陕西建设厅网站wordpress 不显示ip
  • 郑州外贸网站制作营销号视频生成器手机版
  • 绵阳市建设工程质量监督站网站wordpress的插件目录
  • 建设和管理环保网站西安做兼职网站设计
  • 在网站中写小说想要删除如何做婚纱摄影的网站怎么做
  • 重庆自适应网站建设wordpress添加icon文件
  • 目前小说网站排名适合网站设计的gif图片
  • 深圳建立网站wordpress 安装语言
  • 南京做中英文网站海南网站建设哪家专业
  • 做网站用jquerywordpress邮件有什么用
  • 上海网站建设免the 7 wordpress
  • 知名建站的公司微信企业app手机下载安装
  • 鹤山做网站羊毛网站建设视频
  • 图书类网站开发的背景建筑培训机构
  • 外贸网站建设制作wordpress管理员页面404
  • 北郊网站建设app网站开发哪里有
  • 像素人物制作网站网站开发的话术
  • 网站关键词怎么优化排名wordpress电子商城模板
  • 电子商务网站建设与维护能赚多少钱成交型网站建设
  • 到国外做网站网站是怎么回事中国一级建造师网官网