万物皆可MarkDown-微软开源MarkItDown项目实测
一、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"]
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)