一、MarkItDown介绍

        MarkItDown 是由 Microsoft AutoGen 团队开发的一个轻量级 Python 工具,专门用于将各种文件格式转换为 Markdown。MarkItDown 的核心功能是将各种文件格式转换为 Markdown,特别强调在转换过程中保留文档结构和内容的完整性。从官方介绍,支持的类型相当丰富:

        部署也简单,我是使用docker进行部署的,先下载源码,然后直接docker build即可:

        还是微软,很多开源项目,部署过程其实多少都会遇到报错问题,微软dockerfile都写的很完善,直接运行即可,这点确实做得很ok。

二、源码实测

        部署后运行实测,基于源码,如果是文档类,如word、excel、ppt、json、xml、csv和非图pdf(扫描件),效果相当可以;对于图片和扫描件的pdf,如果没接OpenAI,压根识别不出来,直接返回空,图片可能就返回个尺寸,音视频貌似是用了谷歌在线语音转文字接口,国内不翻直接报超时了:

        剩下的youtube和邮件国内没啥需求,暂时就不测试了。

三、代码的改进

        基于上面的测试结果,如果你能不限制用网络,那可以不需要继续往下看了,直接接入LLM大模型就好了。如果你想能够离线使用,并且功能最大化,可以使用以下解决方案:

        1. 常规的文档类文件用markitdown已有功能即可;

        2. 图片类接入本地OCR识别模块,可以使用RapidOCR,速度也相当不错,需要识别模型;

        3. 扫描类pdf也使用OCR识别,可以使用RapidOCRPDF,底层还是使用RapidOCR,与RapidOCR识别模型共用;

        4. 音视频使用whisper,执行录音转文字,需要识别模型。

        我在markitdown项目里,增加了一个server.py文件,里面实现了2个webapi接口,作用如下:

        1. /upload        POST        form-data        上传一个文件,返回对应的markdown内容;

        2. /get/{subpath}/{filename}        GET        获取已存在文件的markdown内容。

        然后在接口中,通过判断上传文件的类型,进行分类处理,如word、ppt、excel这些,保留markitdown的处理,图片类则转为RapidOCR识别,音视频转给whisper。

四、效果展示

1. word的转换效果

原始word:

转换结果:

2. pdf扫描件

原始扫描件内容

转换结果

3. 图片

原始图片:

识别结果:

4. 音频

转文字结果:

基本上正确。

5. 制作镜像

        最后,将上面整合的代码打包成了docker镜像,并且内置了部分的模型文件,打包出来将近有18G:

启动命令如下:

docker run -dti --privileged=true --name=md -p 8082:8082 -e JWT_CODE="666" -e LISTEN_PORT=8082 -v /home/mddata:/data --restart unless-stopped markitdown:1.0

-v /home/mddata:/data        是文件上传的保存位置。

支持的所有环境变量如下:

环境变量 说明
LISTEN_PORT 监听端口号,默认值8002
USING_STREAM_SIZE 使用流方式转换md内容的文件起始大小,默认值5242880B
MAX_FILE_SIZE 允许上传文件的最大值(字节),0不限,默认值0
OCR_MODEL_TYPE OCR模型类型,支持server和mobile,默认值mobile
OCR_MODEL_PATH OCR识别的配置文件(yaml文件)位置,如果不空,则优先会使用自定义配置,默认值为空
JWT_CODE 接口请求Header里需要携带Authorization的值,如果为空则不验证,非空需要一致接口才能被正确请求,默认值为空
FP16 音频转换使用16位浮点数进行计算,可以在一定程度上减少计算和存储开销,CPU如果不支持设置为False,默认值True
AUDIO_LANGUAGE 音频转换结果语言类型,默认值zh
AUDIO_MODEL_TYPE 音频转换使用的模型,支持small/medium/large-v3,默认值small
AUDIO_MODEL_PATH 音频转换使用的模型(pt文件)位置,如果不空,则优先会使用自定义的模型文件,默认值为空

        另外,支持限定上传文件的类型,只需要在/data目录下添加allow_type.json文件,格式如下(只允许上传jpeg、jpg、png和gif文件):

["image/jpeg",  "image/png",  "image/gif"]

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐