RAGFlow:安装与体验

news/2024/5/19 7:14:50

服务器需要有docker,或者直接访问官方提供的demo: https://demo.ragflow.io/

docker-compose安装

  • 需要确保 vm.max_map_count 不小于 262144 【更多】:
sysctl -w vm.max_map_count=262144  
  •  克隆仓库:
   $ git clone https://github.com/infiniflow/ragflow.git   
  • 进入 docker 文件夹,利用提前编译好的 Docker 镜像启动服务器:

   $ cd ragflow/docker   $ docker compose -f docker-compose-CN.yml up -d  

核心镜像文件大约 15 GB,可能需要一定时间拉取。请耐心等待。

体验

启动成功后,浏览器输入 http://服务器ip 或者直接访问官方demo https://demo.ragflow.io/

注册登录,进入后可以创建知识库,然后上传文档。

上传成功后,可以通过解析状态查看解析进度,也可以配置文档的parser解析方法,以更好的解析内容。

点击文档名称,可以进入文档详情,查看拆分的chunk,可以看到普通的文本是按照token拆分,还未实现按照段落语义拆分,差评。表格是单独抽取出来,独立存储的,将文档里的表格比较好的还原为了html表格,准确率尚可,这里好评。每个chunk有原文截图,点击后,右边的pdf预览,可以高亮当前的chunk所在区域,翻了下代码,使用的react-pdf-highlighter,体验挺好的一个组件。

DeepDoc CV模型

DeepDoc的模型应该是基于paddleOCR的模型去微调训练的,开源出来的模型是onnx格式的。

OCR识别

主要代码在ocr.py里,代码定义TextRecognizer 做文字识别,TextDetector 做文本框检测,OCR整合检测和识别功能,对外提供调用。

OCR的核心流程:

  • 创建 OCR 实例,load模型
  • 调用 __call__ 方法,传入图像数据。
    • 使用 TextDetector 进行文本检测,获取文本框坐标
    • 对每个文本框,使用 get_rotate_crop_image 方法进行旋转和裁剪
    • 使用 TextRecognizer 对裁剪后的图像进行文本识别
    • 过滤掉置信度低于阈值(0.5)的识别结果。
  • 返回最终的文本框坐标和识别结果。

版面分析

版面分析主要在recognizer.pylayout_recognizer.py里,定义了一个名为LayoutRecognizer 继承Recognizer的类,用于对文档图像进行板式分析,识别不同类型的区域,例如表格、标题、段落等。这里用的模型应该还是基于paddleocr里的版面分析模型去优化的。

先看Recognizer__call__ 方法,传入图像列表和置信度阈值:

def __call__(self, image_list, thr=0.7, batch_size=16):  res = []  imgs = []  for i in range(len(image_list)):  if not isinstance(image_list[i], np.ndarray):  imgs.append(np.array(image_list[i]))  else: imgs.append(image_list[i])  batch_loop_cnt = math.ceil(float(len(imgs)) / batch_size)  for i in range(batch_loop_cnt):  start_index = i * batch_size  end_index = min((i + 1) * batch_size, len(imgs))  batch_image_list = imgs[start_index:end_index]  inputs = self.preprocess(batch_image_list)  print("preprocess")  for ins in inputs:  bb = self.postprocess(self.ort_sess.run(None, {k:v for k,v in ins.items() if k in self.input_names})[0], ins, thr)  res.append(bb)  #seeit.save_results(image_list, res, self.label_list, threshold=thr)  return res

  • 先预处理,将图像列表转换为模型输入格式
  • 然后调用ort_sess执行onnx推理,最后postprocess,提取模型返回的布局信息,包括区域类型、坐标和置信度。

再看LayoutRecognizer__call__ 方法,这里是模型应用的工程代码部分,很多细节的小技巧,先上代码,里面加了一些注释:

def __call__(self, image_list, ocr_res, scale_factor=3,  thr=0.2, batch_size=16, drop=True):  # 可以过滤的垃圾数据  def __is_garbage(b):  patt = [r"^•+$", r"(版权归©|免责条款|地址[::])", r"\.{3,}", "^[0-9]{1,2} / ?[0-9]{1,2}$",  r"^[0-9]{1,2} of [0-9]{1,2}$", "^http://[^ ]{12,}",  "(资料|数据)来源[::]", "[0-9a-z._-]+@[a-z0-9-]+\\.[a-z]{2,3}",  "\\(cid *: *[0-9]+ *\\)"  ]  return any([re.search(p, b["text"]) for p in patt])  # 调用父类的模型识别  layouts = super().__call__(image_list, thr, batch_size)  # save_results(image_list, layouts, self.labels, output_dir='output/', threshold=0.7)  assert len(image_list) == len(ocr_res)  # Tag layout type  boxes = []  assert len(image_list) == len(layouts)  garbages = {}  page_layout = []  for pn, 

http://www.mrgr.cn/p/16736275

相关文章

文学作品|在线阅读

分享文字和音频类的文学作品,陶冶情操,宣传正能量。#wh-tab{font-size:20px;text-align:center;}a:link {text-decoration: none;}td{font-size: 16px;text-align:center;}td:empty:after{content:虚位以待;color:grey;} 前言 若有空,将古今中外的常见文学作品挂载在网络上,…

[转]ptp(precision time protocol)时钟同步

一、介绍1:什么是ptpPTP(Precision Time Protocol) 是一个通过网络同步时钟的一个协议。当硬件支持时,PTP 精度能达到亚微秒,比 NTP(Network Time Protocol)精度更高。 2:ptp应用场景1)数据中心数据中心需要NTP/PTP同步,以确保集群的时域运行。同步对于虚拟机计算是必不…

轨道交通巡检机器人的应用范围

在现代轨道交通系统的庞大网络中,无数的轨道、设备和设施交织在一起,如同一个精密的机器在高效运转。而在这背后,轨道交通巡检机器人正悄然登场,它们如同一个个智能的守护者,穿梭于各个场景之中。那么,这些…

3. SpringBoot 整合第三方技术

1. 整合Junit 一般来说是不需要进行处理的 ,因为在创建SpringBoot 工程时 ,会自动整合junit​的 要说怎么配置的话?也可以写一下相关的配置:以下就是SpringBoot 整合 Junit 相关步骤导入相关依赖 <dependency><groupId>org.springframework.boot</groupId&g…

5.5

推一下手机壁纸

内核workqueue框架

workqueue驱动的底半部实现方式之一就是工作队列&#xff0c;作为内核的标准模块&#xff0c;它的使用接口也非常简单&#xff0c;schedule_work或者指定派生到哪个cpu的schedule_work_on。 还有部分场景会使用自定义的workqueue&#xff0c;这种情况会直接调用queue_work和qu…

[转]IRIG-B码授时工作原理

在授时设备中有一种是B码授时的,但是大部分人不太清楚何为B码授时?这种类型的授时工作原理是怎么样? 首先我们要知道什么是B码,然后再介绍它的授时工作原理,B码是一种电力术语,它是IRIG-B码的通俗叫法,英文全称是inter-range instrumentationgroup-B,是在2020年公布的电…

环形链表的约瑟夫问题

typedef struct ListNode ListNode;//创建新节点ListNode* buyNode(int x){ListNode* node(ListNode*)malloc(sizeof(ListNode));if(nodeNULL){exit(1);}node->valx;node->nextNULL;return node;}//创建环形链表ListNode* createCircle(int n){ListNode* pheadbuyNode(1)…

my-room-in-3d中的电脑,电视,桌面光带发光原理

1. my-room-in-3d中的电脑&#xff0c;电视&#xff0c;桌面光带发光原理 最近在github中&#xff0c;看到了这样的一个项目&#xff1b; 项目地址 我看到的时候&#xff0c;蛮好奇他这个光带时怎么做的。 最后发现&#xff0c;他是通过&#xff0c;加载一个 lightMap.jpg这个…

2024 年12个好用的开源 Wiki 软件工具盘点

Wiki是一个集中式的、基于网络的平台,使员工可以轻松地访问和记录信息。简单来说,它是一个可靠信息的统一来源。在任何成功的公司中,部门间的知识共享是至关重要的。如果没有一个简单的信息交流方法,团队怎样才能有效合作呢?Wiki软件提供了一种创建、组织及在全公司范围内…

Qt模型视图代理之QTableView应用的简单介绍

往期回顾 Qt绘图与图形视图之绘制带三角形箭头的窗口的简单介绍-CSDN博客 Qt绘图与图形视图之Graphics View坐标系的简单介绍-CSDN博客 Qt模型视图代理之MVD(模型-视图-代理)概念的简单介绍-CSDN博客 Qt模型视图代理之QTableView应用的简单介绍 一、最终效果 二、设计思路 这里…

修改Ubuntu远程登录欢迎提示信息

无论何时登录公司的某些生产系统&#xff0c;你都会看到一些登录消息、警告或关于你已登录服务器的信息&#xff0c;如下所示。 修改方式 1.打开ubuntu终端,进入到/etc/update-motd.d目录下面 可以发现目录中的文件都是shell脚本, 用户登录时服务器会自动加载这个目录中的文件…

python web开发开源规范

Hello , 大家好。首先在五一假期给所有劳动者创造者们送上祝福&#xff0c; 本文聊聊我对python web开源相关的规范 PEP 8 Python编程风格指南:PEP 8是Python编程的官方风格指南&#xff0c;提供了关于代码格式、命名规范、注释等方面的建议。遵循PEP 8可以使代码更易于阅读和…

使用 Python 和 OpenCV 进行实时目标检测的详解

使用到的模型文件我已经上传了&#xff0c;但是不知道能否通过审核&#xff0c;无法通过审核的话&#xff0c;就只能 靠大家自己发挥实力了&#xff0c;^_^ 目录 简介 代码介绍 代码拆解讲解 1.首先&#xff0c;让我们导入需要用到的库&#xff1a; 2.然后&#xff0c;设…

讯飞听见软件介绍

讯飞听见是一款智能语音转文字软件,具有以下功能: • 实时语音转文字:支持录音实时转文字,准确率较高,且能自动区分角色和分段。 • 实时翻译:提供 8 国语种随时互译。 • 边录边拍:可以在录音的同时拍照记录,方便重点标记。 • 悬浮字幕:支持在观看视频时实时显示悬浮…

连接HiveMQ代理器实现MQTT协议传输

先下载MQTTX: MQTTX: Your All-in-one MQTT Client Toolbox 使用线上免费的MQTTX BROKER:The Free Global Public MQTT Broker | Try Now | EMQ 打开MQTTX&#xff0c;创建连接&#xff0c;点击NEW SUBSCRIPTION,创建一个主题&#xff0c;这里使用test/topic,在下面Json中填写…

Java线程与多线程

Java线程与多线程 一、Java线程相关概念1、程序、进程、线程、多线程2、串行、并行、并发3、多线程的特点及目的4、并发的三大特性5、同步、异步6、多线程技术使用场景7、线程安全与非线程安全8、立即加载与延迟加载9、公平锁与非公平锁 二、创建线程方法1、通过继承Thread类创…

2021-10-21 51单片机两位数码管显示0-99循环

缘由单片机两位数码管显示0-99循环-编程语言-CSDN问答 #include "REG52.h" #include<intrins.h> sbit K1 P3^0; sbit K2 P3^1; sbit K3 P3^2; sbit K4 P3^3; sbit bpP3^4; bit k1,wk10,wk20; unsigned char code SmZiFu[]{63,6,91,79,102,109,125,7,127,1…

链表经典算法OJ题目(2)

1.寻找链表的中间节点 题目链接&#xff1a;876. 链表的中间结点 - 力扣&#xff08;LeetCode&#xff09; 我们来直接介绍一个思路&#xff1a;快慢指针 快慢指针是指我们创建创建2个指针&#xff0c;一个为快指针&#xff0c;一个为慢指针&#xff0c;且快指针一次走的步数…

关于使用MyBatis-Plus 报错:java.sql.SQLSyntaxErrorException: Table ssm_db.book doesnt exist 的解决方案

问题描述解决方案 在yml文件中插入以下配置 mybatis-plus:global-config:db-config:table-prefix: tbl_