Magika는 정확한 감지를 제공하기 위해 최신 딥 러닝 발전을 활용하는 새로운 AI 기반 파일 형식 감지 도구입니다. 내부적으로 Magika는 무게가 몇 MB에 불과하고 단일 CPU에서 실행되는 경우에도 밀리초 내에 정확한 파일 식별을 가능하게 하는 고도로 최적화된 맞춤형 Keras 모델을 사용합니다.
1백만 개 이상의 파일과 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으로 작성된 이전 CLI 대체), 몇 가지 주요 변경 사항이 포함된 개선된 Python API를 지원하는 새로운 모델을 제공합니다. 문서를 참조하세요. 그리고 변경 내역! 안정 릴리스에 대한 문서가 필요한 경우 여기에서 최신 안정 태그에서 이 저장소를 찾아보세요.
Rust, Python API, Rust API 및 실험적인 TFJS 버전(웹 데모를 지원함)으로 작성된 명령줄 도구로 사용할 수 있습니다.
100개 이상의 콘텐츠 유형에 걸쳐 2,500만 개 이상의 파일로 구성된 데이터 세트를 학습했습니다.
평가에 따르면 Magika는 평균 99% 이상의 정밀도와 재현율을 달성하여 기존 접근 방식보다 성능이 뛰어납니다.
200개 이상의 콘텐츠 유형(전체 목록 보기)
모델이 로드된 후(일회성 오버헤드) 추론 시간은 파일당 약 5ms입니다.
일괄 처리: 명령줄과 API에 동시에 여러 파일을 전달할 수 있으며 Magika는 일괄 처리를 사용하여 추론 시간을 단축합니다. 수천 개의 파일까지 동시에 Magika를 호출할 수 있습니다. 디렉토리를 재귀적으로 스캔하기 위해 -r
사용할 수도 있습니다.
파일 크기와 관계없이 거의 일정한 추론 시간. Magika는 파일 바이트의 제한된 하위 집합만 사용합니다.
Magika는 모델에 대한 예측을 "신뢰"할지 또는 "일반 텍스트 문서" 또는 "알 수 없는 바이너리 데이터"와 같은 일반 레이블을 반환할지 여부를 결정하는 콘텐츠 유형별 임계값 시스템을 사용합니다.
오류 허용 범위를 조정하는 세 가지 다른 예측 모드( high-confidence
, medium-confidence
, best-guess
를 지원합니다.
오픈 소스입니다! (그리고 아직 더 많은 것이 나오지 않았습니다.)
자세한 내용은 Python 패키지 및 js 패키지 설명서(dev docs)를 참조하세요.
시작하기
파이썬 명령줄
파이썬 API
실험적인 TFJS 모델 및 npm 패키지
설치
도커에서 실행
용법
개발 설정
중요한 문서
알려진 제한사항 및 기여
자주 묻는 질문
추가 리소스
연구논문 및 인용
특허
부인 성명
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 테스트_데이터/기본 && magika -r *asm/code.asm: 어셈블리(코드) 배치/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 오디오 비트스트림 데이터(오디오) handlerbars/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: 마크다운 문서(텍스트) [...]
$ magika ./tests_data/basic/python/code.py --json [ { "경로": "./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" }, "output": { "description": "Python 소스", "extensions": [ "py", "pyi" ], "group": "code", "is_text": true, "label": "python", "mime_type": "text/x-python" }, "점수": 0.753000020980835 } } } ]
$ 고양이 doc.ini | 마기카 - -: INI 구성 파일(텍스트)
$ magika --도움말 딥러닝을 통해 파일의 콘텐츠 유형을 결정합니다. 사용법: magika [OPTIONS] [PATH]... 인수: [PATH]... 분석할 파일의 경로 목록입니다. 표준 입력에서 읽으려면 대시(-)를 사용하십시오(한 번만 사용할 수 있음). 옵션: -r, --재귀 디렉터리 자체를 식별하는 대신 디렉터리 내 파일을 식별합니다. --비참조 내용을 따라가는 대신 심볼릭 링크를 있는 그대로 식별합니다. --그림 물감 단말기 지원 여부에 관계없이 컬러로 인쇄 --색상 없음 단말기 지원 여부에 관계없이 색상 없이 인쇄됩니다. -s, --출력-점수 콘텐츠 유형과 함께 예측 점수를 인쇄합니다. -i, --mime 유형 콘텐츠 유형 설명 대신 MIME 유형을 인쇄합니다. -l, --라벨 콘텐츠 유형 설명 대신 간단한 레이블을 인쇄합니다. --json JSON 형식으로 인쇄 --jsonl JSONL 형식으로 인쇄 --format <사용자 정의> 사용자 정의 형식을 사용하여 인쇄합니다(자세한 내용은 --help 사용). 다음 자리 표시자가 지원됩니다. %p 파일 경로 %l 콘텐츠 유형을 식별하는 고유 레이블입니다. %d 콘텐츠 유형에 대한 설명 %g 콘텐츠 유형의 그룹 %m 콘텐츠 유형의 MIME 유형 %e 콘텐츠 유형에 가능한 파일 확장자 %s 파일의 콘텐츠 유형 점수 %S 파일의 콘텐츠 유형 점수(%)입니다. %b 기각된 경우 모델 출력(그렇지 않은 경우 비어 있음) %% 리터럴 % -h, --help 도움말 인쇄('-h'로 요약 참조) -V, --버전 인쇄 버전
자세한 문서는 여기를 참조하세요.
예:
>>> from magika import Magika>>> m = Magika()>>> res = m.identify_bytes(b"# 예n이것은 마크다운의 예입니다!")>>> print(res.output.label)markdown
자세한 문서는 Python 문서를 참조하세요.
우리는 또한 웹 앱 사용에 관심이 있는 사람들을 위한 실험 패키지로 Magika를 제공합니다. Magika JS 구현 성능은 상당히 느리므로 파일당 100ms 이상을 소비해야 합니다.
자세한 내용은 js 문서를 참조하세요.
Python 문서의 "개발 설정" 섹션을 참조하세요.
CLI에 대한 문서
새로운 Rust CLI에 대한 문서
다양한 언어에 대한 바인딩에 대한 문서
지원되는 콘텐츠 유형 목록(v1의 경우 추가 예정)
새 모델에 지원되는 콘텐츠 유형 목록
Magika의 출력을 해석하는 방법에 대한 문서입니다.
자주 묻는 질문
Magika는 최신 기술에 비해 크게 향상되었지만 항상 개선의 여지가 있습니다! 감지 정확도를 높이고 추가 콘텐츠 유형에 대한 지원, 더 많은 언어에 대한 바인딩 등을 위해 더 많은 작업을 수행할 수 있습니다.
이 초기 릴리스는 다중 언어 탐지를 대상으로 하지 않으며 커뮤니티에서 적대적인 사례를 볼 수 있기를 기대합니다. 또한 발생한 문제, 잘못된 감지, 기능 요청, 추가 콘텐츠 유형에 대한 지원 필요성 등에 대해 커뮤니티로부터 듣고 싶습니다.
공개된 GitHub 문제를 확인하여 로드맵에 무엇이 있는지 확인하고 GitHub 문제를 열거나(권장) [email protected]으로 이메일을 보내 잘못된 감지나 기능 요청을 보고해 주세요.
참고: PII가 포함될 수 있는 파일에 대한 보고서를 보내지 마십시오. 보고서에는 파일 콘텐츠의 (작은) 부분이 포함되어 있습니다!
자세한 내용은 CONTRIBUTING.md
참조하세요.
여기에는 다양한 FAQ가 수집되어 있습니다.
Magika 발표에 관한 Google의 OSS 블로그 게시물입니다.
웹 데모: 웹 데모.
우리는 Magika를 개발한 방법과 연구 논문에서 우리가 내린 선택에 대해 설명합니다.
연구를 위해 이 소프트웨어를 사용하는 경우 다음과 같이 인용해 주세요.
@misc{magika, title={{Magika: AI 기반 콘텐츠 유형 감지}}, 작성자={{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은 품질, 상품성 또는 특정 목적에의 적합성에 대한 모든 보증을 명시적으로 부인합니다.