Magika 是一款新颖的 AI 支持的文件类型检测工具,它依靠深度学习的最新进展来提供准确的检测。在底层,Magika 采用定制的、高度优化的 Keras 模型,该模型仅重约几 MB,即使在单个 CPU 上运行,也能在几毫秒内实现精确的文件识别。
在对超过 100 万个文件和超过 100 种内容类型(涵盖二进制和文本文件格式)的评估中,Magika 实现了 99% 以上的精确度和召回率。 Magika 被大规模使用,通过将 Gmail、云端硬盘和安全浏览文件路由到适当的安全和内容策略扫描仪来帮助提高 Google 用户的安全性。阅读我们的研究论文了解更多内容!
您可以使用我们的网络演示来尝试 Magika,无需安装任何东西,该演示在您的浏览器中本地运行!
以下是 Magika 命令行输出的示例:
有关更多背景信息,您可以阅读我们在 Google OSS 博客上发布的最初公告
重要的
我们即将发布一些新东西,并且它们已经准备好进行测试了!
支持 200 多种内容类型的新 ML 模型。
用 Rust 编写的新 CLI。这将取代以前用 python 编写的 CLI。更多信息请点击这里。 Rust 代码库也可用于用 Rust 编写的应用程序,请参阅文档。
Python 包 0.6.0rc1:此版本提供了支持 200 多种内容类型的新模型、用 Rust 编写的 CLI(取代了用 python 编写的旧版本)以及经过改进的 Python API(其中包含一些重大更改),请参阅文档和变更日志!如果您需要有关稳定版本的文档,请在此处浏览此存储库的最新稳定标签。
可作为用 Rust 编写的命令行工具、Python API、Rust API 和实验性 TFJS 版本(为我们的 Web 演示提供支持)。
在包含 100 多种内容类型的超过 2500 万个文件的数据集上进行了训练。
根据我们的评估,Magika 的平均精确度和召回率达到 99% 以上,优于现有方法。
超过 200 种内容类型(查看完整列表)。
模型加载后(这是一次性开销),每个文件的推理时间约为 5 毫秒。
批处理:您可以同时向命令行和API传递多个文件,Magika将使用批处理来加快推理时间。您可以同时调用 Magika,甚至可以处理数千个文件。您还可以使用-r
递归扫描目录。
接近恒定的推理时间,与文件大小无关; Magika 仅使用文件字节的有限子集。
Magika 使用每个内容类型的阈值系统来确定是否“信任”模型的预测,或者是否返回通用标签,例如“通用文本文档”或“未知二进制数据”。
支持三种不同的预测模式,调整对错误的容忍度: high-confidence
、 medium-confidence
和best-guess
。
它是开源的! (还有更多的事情即将发生。)
有关更多详细信息,请参阅 python 包和 js 包的文档(开发文档)。
入门
Python 命令行
Python API
实验性 TFJS 模型和 npm 包
安装
在 Docker 上运行
用法
开发设置
重要文档
已知限制和贡献
常见问题解答
其他资源
研究论文和引文
执照
免责声明
Magika 在 PyPI 上以magika
的形式提供:
$ pip 安装magika
如果您打算仅将 Magika 用作命令行,则可能需要使用$ pipx install magika
来代替。
git clone https://github.com/google/magika cd magika/ docker build -t magika . docker run -it --rm -v $(pwd):/magika magika -r /magika/tests_data
新的命令行是用 Rust 编写的,可以在magika
python 包中找到。
示例:
$ cd test_data/basic && magika -r *asm/code.asm:汇编(代码) batch/simple.bat:DOS批处理文件(代码) c/code.c:C源代码(代码) css/code.css:CSS源(代码) csv/magika_test.csv:CSV文档(代码) dockerfile/Dockerfile:Dockerfile(代码) docx/doc.docx:Microsoft Word 2007+ 文档(文档) epub/doc.epub:EPUB文档(文档) epub/magika_test.epub:EPUB文档(文档) flac/test.flac:FLAC 音频比特流数据(音频) handlebars/example.handlebars:车把源(代码) html/doc.html:HTML文档(代码) ini/doc.ini:INI配置文件(文本) javascript/code.js:JavaScript 源(代码) jinja/example.j2:Jinja 模板(代码) jpeg/magika_test.jpg:JPEG图像数据(图像) json/doc.json:JSON 文档(代码) Latex/sample.tex:LaTeX 文档(文本) makefile/simple.Makefile:Makefile源(代码) markdown/README.md:Markdown 文档(文本) [...]
$ magika ./tests_data/basic/python/code.py --json [ { "path": "./tests_data/basic/python/code.py", "result": { "status": "ok", "value": { "dl": { "description": "Python 源" , "扩展名": [ "py", "pyi" ]、“group”:“code”、“is_text”:true、“label”:“python”、“mime_type”:“text/x-python” }, "输出": { "描述": "Python 源", "扩展": [ "py", "pyi" ]、“group”:“code”、“is_text”:true、“label”:“python”、“mime_type”:“text/x-python” },“分数”:0.753000020980835 } } } ]
$ 猫 doc.ini |魔法师- -:INI配置文件(文本)
$magika--帮助 通过深度学习确定文件的内容类型 用法:magika [选项] [路径]... 参数:[路径]... 要分析的文件的路径列表。 使用破折号 (-) 从标准输入读取(只能使用一次)。 选项: -r, --递归 识别目录中的文件而不是识别目录本身 --不取消引用 按原样识别符号链接,而不是通过跟踪它们来识别其内容 - 颜色 无论终端支持如何,都可以进行彩色打印 --无颜色 无论终端支持如何,都打印无颜色 -s, --输出分数 除了内容类型之外,还打印预测分数 -i, --mime 类型 打印 MIME 类型而不是内容类型描述 -l, --标签 打印简单的标签而不是内容类型描述 --json 以 JSON 格式打印 --jsonl 以 JSONL 格式打印 --格式<自定义> 使用自定义格式打印(使用 --help 了解详细信息)。 支持以下占位符: %p 文件路径 %l 标识内容类型的唯一标签 %d 内容类型的描述 %g 内容类型组 %m 内容类型的 MIME 类型 %e 内容类型可能的文件扩展名 %s 文件内容类型的分数 %S 文件内容类型的分数(百分比) %b 如果被否决则模型输出(否则为空) %% 文字 % -h,--帮助 打印帮助(使用“-h”查看摘要) -V,--版本 印刷版
请参阅此处以获取更详细的文档。
示例:
>>> from magika import Magika>>> m = Magika()>>> res = m.identify_bytes(b"# 示例n这是一个 markdown 的示例!")>>> print(res.output.label)markdown
有关详细文档,请参阅 python 文档。
我们还为有兴趣在网络应用程序中使用的人们提供 Magika 作为实验包。请注意,Magika JS 实现性能明显较慢,每个文件预计花费 100 毫秒以上。
详细内容请参见js文档。
请参阅 python 文档中的“开发设置”部分。
有关 CLI 的文档
有关新 Rust CLI 的文档
有关不同语言的绑定的文档
支持的内容类型列表(对于 v1,更多内容类型即将推出)。
新模型支持的内容类型列表
有关如何解释 Magika 输出的文档。
常见问题解答
Magika 显着改进了最先进的技术,但总有改进的空间!可以做更多的工作来提高检测准确性、支持其他内容类型、绑定更多语言等。
此初始版本不针对多语言检测,我们期待看到来自社区的对抗性示例。我们也很乐意听取社区关于遇到的问题、误检测、功能请求、对其他内容类型支持的需求等的意见。
检查我们未解决的 GitHub 问题,了解我们的路线图上有哪些内容,请通过打开 GitHub 问题(首选)或向我们发送电子邮件([email protected])来报告错误检测或功能请求。
注意:请勿发送有关可能包含 PII 的文件的报告,该报告包含(一小部分)文件内容!
有关详细信息,请参阅CONTRIBUTING.md
。
我们在这里收集了一些常见问题解答。
Google 关于 Magika 公告的 OSS 博客文章。
网络演示:网络演示。
我们描述了我们如何开发 Magika 以及我们在研究论文中做出的选择。
如果您使用该软件进行研究,请将其引用为:
@misc{magika,title={{Magika:人工智能驱动的内容类型检测}},作者={{Fratantonio、Yanick 和 Invernizzi、Luca 和 Farah、Loua 和 Kurt、Thomas 和 Zhang、Marina 和 Albertini、Ange 和 Galilee 、Francois 和 Metitieri、Giancarlo 和 Cretin、Julien 和 Petit-Bianco、Alexandre 和 Tao、David 和 Bursztein、Elie}}、year={2024}、eprint={2409.13768}、archivePrefix={arXiv}、primaryClass={cs. CR},url={https://arxiv.org/abs/2409.13768}, }
请直接联系我们:[email protected]
阿帕奇2.0;有关详细信息,请参阅LICENSE
。
该项目不是 Google 官方项目。它不受 Google 支持,并且 Google 明确否认对其质量、适销性或特定用途适用性的所有保证。