일련의 이미지의 파일 무결성을 검사하는 도구가 있습니까?


21

때때로 이미지를 다운로드 할 때 스트림 중간에 연결이 끊어지면 다운로드 된 이미지의 절반이 남습니다. 이미지를 보려고하면 이미지의 위쪽 부분이 표시되고 아래쪽 부분은 일반적으로 회색 또는 녹색 또는 다른 색으로 표시됩니다. 즉, 손상되었습니다.

그런 식으로 이미지가 손상되었는지 또는 다른 방식으로 손상되었는지 확인하는 방법이 있습니까?

답변:


15

JPEG 파일에 대해 이야기하고 있다면 유틸리티 jpeginfo 가 바로 당신이 찾고있는 것입니다. 다양한 유형의 JPEG 오류 및 손상이 있는지 파일을 검사하고 오류 코드 (스크립트에 가장 유용한 것)를 반환하거나 오류가있는 파일을 삭제할 수 있습니다.

수동 확인에 의존하지 않고 모든 것이 제대로 복사되도록하기 위해 이것을 초기 파일 전송의 일부로 사용합니다. (그 후, 나는 정상적인 백업 / 비 트로트 보호의 일부로 체크섬이 변경되지 않도록합니다.)

이 프로그램은 명령 줄이며 소스 코드로 제공되지만 모든 Linux 배포판 또는 개발 환경이 올바르게 설정된 Mac에서 쉽게 빌드하고 사용할 수 있어야합니다. Cygwin 또는 MinGW를 사용하여 Windows에서 할 수 있다고 확신합니다. (예를 들어, 무결성을 보증 할 수는 없지만 이 블로그 게시물 은 합법적 인 것으로 보이며 사전 컴파일 된 다운로드를 포함합니다.) 직접 빌드하려면 다음을 수행하십시오.

$ git clone https://github.com/tjko/jpeginfo.git
Cloning into 'jpeginfo'...
[...]
Checking connectivity... done
$ cd jpeginfo/
$ ./configure && make

이것은 jpeginfo당신이 제자리에서 실행하거나 원하는 곳에서 복사 할 수 있는 명령을 만들어야합니다 (아마도 사용 make install)

그런 다음 다음과 같이 실행하십시오.

$ ./jpeginfo -c *.jpg
test1.jpg 1996 x 2554 24bit Exif  P 6582168  [OK]
test2.jpg 1996 x 2554 24bit Exif  P 6582116  Premature end of JPEG file  [WARNING]
test3.jpg  Corrupt JPEG data: 1 extraneous bytes before marker 0xe2 1996 x 2554 24bit Exif  P 6582169  [WARNING]

여기서 test1.jpg는 완벽하고 test2.jpg 끝에서 몇 바이트를 삭제했으며 test3.jpg 헤더에서 임의의 바이트를 변경했습니다.

RAW 파일이있는 경우 DNG Validation 의 미국 미디어 사진가 협회 (American Society of Media Photographers ) 또는 Adobe의 DNG 변환기를 사용하여 독점적 인 RAW 형식을 일괄 검증하는 방법 에 대한 데이터 유효성 검사 세부 정보 에서이 페이지를 확인하십시오 . (불행히도 이것은 GUI 작업이며 반드시 쉽게 스크립팅 할 수있는 것은 아닙니다.)

1.2 버전의 DNG를 기본적으로 출력하는 카메라가 있다면 이미지 데이터의 내장 MD5 체크섬이 포함되어있어 훨씬 좋습니다. 불행히도 이것은 일반적인 이미지 메타 데이터와 함께 저장되지 않는 것 같습니다. 또는 최소한 exiftool 및 exiv2는이를 인식하지 못하며 일반적으로 1.2 DNG 파일을 읽습니다. 이는 현재 Adobe 검증을 알고있는 한 도구를 사용하는 유일한 방법입니다.


jpeginfo의 Windows 바이너리가 어딘가에 있는지 알고 있습니까?
Rook

1
'aux'는 Windows 예약 이름처럼 보이고 git은 위에서 언급 한 디렉토리를 복제 할 수 없으므로 git clone에서 jpeginfo 도구를 사용하는 것은 Windows에서 가능하지 않은 것 같습니다.
Rook

--- 다른 게시물의 대화를 다시 시작합니다. 아카이브를 압축 해제하면 'aux'로 인해 오류가 발생합니다. 아카이브 내에서 'aux'의 이름을 바꾸면 압축을 풀고 cygwin 내의 'aux'로 다시 이름을 바꾸면 문제가 해결되었습니다. 그러나 cygwin에서 make를 실행하면 여전히 수많은 오류가 발생했습니다. wrjpgcom.c : 87 : 54 : 경고 : 내장 함수 'exit'의 호환되지 않는 암시 적 선언 [기본적으로 활성화 됨] #define ERREXIT (msg) (fprintf (stderr, "% s \ n", msg), exit (EXIT_FAILURE)) (많은 것 중 하나)
Look

@ldigas 나는 mattdm.org/misc/jpeginfo-w32/jpeginfo.exe 에서 찾을 수있는 MinGW 바이너리를 만들었습니다 . 나는 이것을 리눅스에서 크로스 컴파일 된 실행 파일로 만들었으므로 테스트하지는 않았지만 제대로 빌드 된 것처럼 보였다 . 나는 그것이 작동한다고 약속 할 수는 없지만, 그것은 단지 업스트림 코드이며 바이러스 나 다른 것이 없다는 것을 약속합니다. :)
mattdm

몇 분 전에 노력한 결과로 찬성했지만 Windows에서는 그다지 잘 작동하지 않는 것 같습니다. jpeginfo -c any_jpeg_file.jpg 제공합니다. JPEG 파일의 조기 종료 JPEG 데이터 스트림에 이미지가 없습니다 [ERROR].
Rook

2

ImageVerifier가 원하는 것을 수행했습니다. 불행히도 더 이상 다운로드 할 수 없으며 2017 년 12 월 31 일에 지원이 중단되었습니다 ( Ingestamatic 및 ImageVerifier 더 이상 판매되지 않음 참조 ).

역사적 이유에 대한 오래된 답변

ImageVerifier (약간 IV)는 확인할 이미지 파일을 찾는 폴더 계층 구조를 순회합니다. TIFF, JPEG를 확인할 수 있습니다. PSD, DNG 및 DNG 이외의 원시 (예 : NEF, CR2)

IV는 많은 수의 이미지를 처리하도록 설계되었습니다. 이미지가 100,000 개 이상인 폴더 계층은 문제가되지 않습니다. 한 번의 테스트 실행에서 IV는 14 시간 동안 실행되었습니다.

IV가 수행하는 검증에는 구조 점검과 해시 점검의 두 가지 종류가 있습니다.

http://basepath.com/site/detail-ImageVerifier.php


ImageVerifier와 관련이있는 것 같습니다. 그렇다면 답변에이 내용을 알려주십시오.
저주 진리

1
나는 제품과 전혀 관련이 없습니다. NAS 충돌 후 일부 이미지 파일을 확인하고이 도구를 사용해야했습니다. 방금 사이트에서 텍스트를 붙여 넣어 설명을 제공했습니다.
Kez

FWIW-카메라 파일 (jpg 및 다양한 RAW 형식-기본 용도)에는 적합하지만 코덱이없는 다른 파일 형식에는 적합하지 않습니다. ImageMagick의 -identify 기능은 또 다른 옵션입니다
Kez

1

이것이 카메라에서 이미지를 다운로드하는 것이 아니라 컴퓨터에서 컴퓨터로 전송하는 것이 아니라면 파일 무결성에 대한 일반적인 접근 방식은 체크섬 입니다.

불행히도, 내가 아는 한 일반적인 "최종 사용자"이미지 형식 (jpeg, png, gif,…)은 자체적으로 무결성을 검사하지 않습니다. 그러나 자동화 된 처리를 암시하는 문제를 이해하면서 체크섬 도구 ( CRC32 , MD5 등)를 워크 플로에 통합하는 것은 실용적인 솔루션이 될 수 있습니다. 체크섬을 저장하는 일반적인 방법은 다음과 같이 확장자가 추가 된 동일한 파일 이름을 가진 파일을 갖는 것 img123.jpg → img123.jpg.md5입니다.

이 방법을 사용하면 사이드카 파일의 무결성 또는 유사한 메커니즘으로 전송하려는 다른 항목을 확인할 수도 있다는 추가 이점이 있습니다. 그리고 나중에 체크섬 파일을 보관하면됩니다. (그리고 그것은 제한된 지식 범위 내에서 PS, LR 또는 다른 일반적인 도구에 통합되지 않은 단점이 있습니다.)


1
DNG에는 체크섬이 포함되어 있으며 Lightroom에서 직접 확인할 수 있습니다.
Hampus Nilsson

나는 그것을 몰랐다! 우수한. 또한 말이됩니다. DNG가 체크섬에 도움이되는 것은 좋지만 아카이브 형식보다 "최종 사용자"형식을 목표로 명확하게하기 위해 답을 편집했습니다.
Cornelius

Irnis Haliullin의 "ACSV (Advanced Checksum Verifier)"를 사용하여 원본 파일과 함께 백업 매체에 복사 된 MD5 체크섬 파일을 계산합니다. ACSV는 일괄 또는 대화식으로 실행됩니다. 체크섬을 다시 계산하고 원본과 비교하여 사본의 무결성을 언제든지 확인할 수 있습니다.
Pierre

1

나는 check_media_integrity 간단한 파이썬 스크립트를 개발했다 .GitHub 에서 check_mi.py다운로드 할 수있다.

https://github.com/ftarlao/check-media-integrity

나는 가이드 소개를 인용한다 :

check-mi는 미디어 파일 (사진, 비디오, 오디오)의 무결성을 자동으로 확인하는 Python 2.7 스크립트입니다. 단일 파일의 무결성 또는 폴더와 하위 폴더의 파일 세트를 재귀 적으로 확인할 수 있습니다. 마지막으로 불량 파일 목록과 경로 및 세부 정보를 CSV 형식으로 출력 할 수도 있습니다.

이 도구는 공통 라이브러리 (Pillow, ImageMagik, FFmpeg)를 사용하여 미디어 파일을 효과적으로 디코딩 할 수있는시기를 확인하여 파일 무결성을 테스트합니다. 경고, 이미지, 오디오 및 비디오 형식은 결함 및 손상에 대해 매우 탄력적이므로 도구가 손상된 파일을 모두 감지 할 수 없습니다.

check-mi는 100 % 신뢰도로 헤더 / 메타 데이터가 손상된 파일, 잘린 이미지 파일 (strict_level> 0) 및 장치 I / O 오류를 발견 할 수 있습니다.

check-mi는 일반적으로 모든 사소한 손상 (예 : 다른 값으로 덮어 쓴 미디어 파일의 작은 부분)을 감지 할 수 없습니다. 세부적으로, 단일 5MB jpeg 사진에서 실행되는 작은 무작위 실험으로 strict_level 1을 테스트했습니다.

이미지 파일의 일부 (간격)를 0으로 덮어 쓰면 손상을 50 % 확률로 감지하기 위해 간격 크기 = 1024KBytes가 필요합니다. 다른 임의의 값으로 이미지 파일의 일부 (간격)를 덮어 쓰면 4096 바이트에서 1024KB 사이의 간격 크기에 대해 약 85 %의 탐지 비율을 얻습니다.

디코딩 할 때 필로우, 완드 및 FFmpeg를 더 엄격하게 지시하는 방법을 알고있는 경우 알려주십시오.


0

허용되는 답변은 jpeginfo를 사용하는 것으로, C로 작성된 실제로 오래되고 유지 관리되지 않은 도구입니다 (또한 모듈 형 / 확장 가능하지 않음). 또한 해당 도구는 특정 EXIF ​​데이터 포인트를 찾는 것 같습니다 ( ~ 5 분 동안 소스 코드 를 통해 훑어보기 ).

file-type 이라는 더 나은 도구 인 IMO 는 사용하기가 매우 쉽습니다. 기본적으로 예제 코드를 복사하여 붙여넣고 코딩 방법을 모르는 경우 파일 이름을 수정하십시오. 알려진 특정 파일 형식과 관련된 마법 번호를 확인 하고 처리중인 파일 종류를 알려줍니다.

나는 아직도 이것보다 더 많은 보호 계층을 찾고 있습니다. 예를 들어, 임의의 데이터가 EXIF ​​메타 데이터를 지나서 (또는 그 안에) 저장되거나 매직 번호 뒤에 저장되는 경우 보안 문제가 발생할 수 있습니다. 계속해서 더 많은 보안 조치를 검토하고 나중에이 답변을 업데이트 할 수 있도록 노력하겠습니다.

게으른 웹 페이지에서 복사 한 예제 코드는 다음과 같습니다.

// Node.js
const readChunk = require('read-chunk');
const fileType = require('file-type');

const buffer = readChunk.sync('unicorn.png', 0, fileType.minimumBytes);

fileType(buffer);
//=> {ext: 'png', mime: 'image/png'}

참고로,이 도구는 지속적으로 업데이트되고 있으며 (3 일 전 원래 답변으로 마지막 업데이트였습니다.) 현재 매주 3,691,850 개의 다운로드 횟수가 있습니다.


일반적인 매직 넘버 기반 파일 형식 식별자는 일반적으로 처음 n 바이트에만 초점을 맞추기 때문에 부분적으로 커밋 된 이미지 파일에는 도움이되지 않을 수 있습니다. 즉, POSIX file(동일한 방식으로 작동)가 올바르게보고하지만 JPEG의 많은 부분이 실제로 누락되어 렌더링되지 않는 JPEG 또는 PNG가 매우 일반적 입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.