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”:“代碼”、“is_text”:true、“label”:“python”、“mime_type”:“text/x-python” }, "輸出": { "描述": "Python 來源", "擴充": [ "py", "pyi" ]、“group”:“代碼”、“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,--版本 印刷版
請參閱此處以取得更詳細的文件。
範例:
>>> 從 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={arXClass}、 CR},url={https://arxiv.org/abs/2409.13768}, }
請直接聯絡我們:[email protected]
阿帕契2.0;有關詳細信息,請參閱LICENSE
。
該項目不是 Google 官方項目。它不受 Google 支持,且 Google 明確否認對其品質、適銷性或特定用途適用性的所有保證。