一連の画像のファイル整合性をチェックするツールはありますか?


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操作であり、必ずしも簡単にスクリプト化できるとは限りません。)

DNGの1.2バージョンをネイティブに出力するカメラを使用している場合、これにはさらに優れています。これには、画像データの組み込みMD5チェックサムが含まれています。残念ながら、これは通常の画像メタデータと一緒に保存されていないようです-または少なくともexiftoolとexiv2はそれを認識せず、一般に1.2 DNGファイルを読み取ります-私が知る限り、Adobeの検証ツールもそれを利用する唯一の方法です。


jpeginfoのWindowsバイナリがどこかに存在するかどうか知っていますか?
ルーク

1
git cloneでjpeginfoツールを使用することはWindowsでは不可能と思われます。「aux」はWindowsの予約名のようであり、gitは前述のディレクトリを存在するように複製できないからです。
ルーク

---ここで他の投稿からの会話を再開します。アーカイブを解凍すると、「aux」が原因でエラーが発生します。アーカイブ内で「aux」の名前を変更すると、解凍が容易になり、cygwin内で「aux」に名前を変更してその問題を解決しました。ただし、cygwinからmakeを実行すると、依然として多数のエラーが発生しました。wrjpgcom.c:87:54について何か:警告:組み込み関数 'exit'の暗黙の宣言に互換性がない[デフォルトで有効] #define ERREXIT(msg)(fprintf(stderr、 "%s \ n"、msg)、exit (EXIT_FAILURE))(多くの1つだけ)
ルーク

@ldigas mattdm.org/misc/jpeginfo-w32/jpeginfo.exeにあるMinGWバイナリを作成しました。Linuxでこれをクロスコンパイルされた実行可能ファイルとしてビルドしたので、テストしていませんが、問題なくビルドできたようです。私はそれが動作することを約束することはできませんが、私はそれがただ上流のコードであり、ウイルスや何もないことを約束します。:)
mattdm

数分前にあなたが行っている努力のためにこれを支持しましたが、それはWindowsではそれほどうまく機能しないようです。jpeginfo -c any_jpeg_file.jpgそれを提供しますが、JPEGファイルJPEGデータストリームの時期尚早の終了を報告するようですJPEGデータストリームには画像がありません[エラー]。
ルーク

2

ImageVerifierはあなたが望むことをしました。残念ながら、ダウンロードできなくなり、サポートは2017年12月31日に終了しました(IngestamaticおよびImageVerifierの販売終了を参照)。

歴史的な理由からの古い答え

ImageVerifier(略してIV)は、フォルダーの階層を走査して、検証する画像ファイルを探します。TIFF、JPEGを検証できます。PSD、DNG、および非DNG raw(NEF、CR2など)。

IVは、多数の画像を処理するように設計されています。100,000以上の画像があるフォルダ階層は問題ないはずです。1回のテスト実行で、IVは14時間実行されました。

IVが実行する検証には、構造チェックとハッシュチェックの2種類があります。

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


ImageVerifierに関連付けられているようですが、もしそうであれば、回答でこれを開示してください。
のろわれた真実

1
私は製品とはまったく関係ありません。NASがクラッシュした後、いくつかの画像ファイルを検証する必要があり、このツールを使用しました。サイトからテキストを貼り付けて説明を加えました。
ケズ

FWIW -などではなく、そのコーデックのない他のファイルタイプのために良い、ImageMagickのの-identify機能は別のオプションである-そのカメラのファイルのために良い(その主な目的とする用途のJPG、様々なRAW形式)
Kez

1

これがカメラから画像をダウンロードすることではなく、コンピューター間の転送である場合、ファイルの整合性に対する一般的なアプローチはチェックサムです。

残念ながら、私が知る限り、一般的な「エンドユーザー」の画像形式(jpeg、png、gifなど)は、それ自体では整合性チェックされません。しかし、自動処理を暗示するという質問を理解しているように、チェックサムツール(CRC32MD5など)をワークフローに統合することは、実行可能なソリューションになる可能性があります。チェックサムを保存する一般的な方法は、次のような拡張子を追加しただけで、同じファイル名のファイルを作成することですimg123.jpg → img123.jpg.md5

このアプローチには、(たとえば)サイドカーファイルの整合性や、同様のメカニズムで転送したいその他のファイルの整合性もチェックできるという利点もあります。また、今後もチェックサムファイルを保持する場合。(そして、私の限られた知識の範囲で、PS、LR、または他の一般的なツールに統合されないという欠点があります。)


1
DNGにはチェックサムが含まれており、Lightroomで直接検証できることに注意してください。
ハムスニルソン14年

私はそれを知りませんでした!優れた。理にかなっています。答えを編集して、アーカイブ形式よりも「エンドユーザー」形式を明確にすることを明確にしましたが、DNGがチェックサムに役立つのはいいことです。
コーネリアス14年

Irnis Haliullinの「Advanced Checksum Verifier」(ACSV)を使用して、元のファイルとともにバックアップメディアにコピーされるMD5チェックサムファイルを計算します。ACSVはバッチまたはインタラクティブで実行されます。コピーの整合性は、チェックサムを再計算し、オリジナルと比較することでいつでも検証できます。
ピエール

1

check_media_integrityを単純なpythonスクリプトcheck_mi.pyとして開発しました。GitHubからダウンロードできます。

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は、通常、すべての小さな損傷を検出することはできません。たとえば、異なる値で上書きされたメディアファイルの小さな部分です。詳細に、私はstrict_level 1を小さなランダム化実験でテストし、単一の5MB jpeg画像で実行しました:

画像ファイルの一部(間隔)をゼロで上書きする場合、50%の確率で損傷を検出するために間隔サイズ= 1024KBytesが必要です。画像ファイルの一部(間隔)を異なるランダムな値で上書きすると、4096バイトから1024Kバイトの範囲の間隔サイズで約85%の検出率が得られます。

Pillow、Wand、FFmpegをデコードする際により厳格にするよう指示する方法を知っている場合は、教えてください。


0

受け入れられている答えは、jpeginfoの使用に関するものです。jpeginfoは、Cで書かれた非常に古くメンテナンスされていないツールです(また、あまりモジュール化も拡張もできません)。また、このツールは特定のEXIFデータポイントを探すだけのようです(5分間ソースコードをざっと見てください)。

IMOは、file-typeと呼ばれる優れたツールで、非常に使いやすいです。基本的に、サンプルコードをコピーして貼り付け、コードの作成方法がわからない場合はファイル名を変更します。特定の既知のファイルタイプに関連付けられているマジックナンバーをチェックし、どの種類のファイルを扱っているかを知らせます。

私はまだこれ以上の保護層を探しています。たとえば、任意のデータがEXIFメタデータを超えて(または)格納されている場合、またはマジックナンバーの後に格納されている場合、セキュリティ上の問題が発生する可能性があります。セキュリティ対策を引き続き検討し、この回答を後で更新したいと考えています。

以下は、怠zyな人のためにWebページからコピーされたサンプルコードです。

// 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またはPNGを持つことは非常に一般的ですが、データの多くが実際に欠落しているためレンダリングに失敗します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.