Bir dizi görüntünün dosya bütünlüğünü kontrol etmek için bir araç var mı?


21

Bazen bir görüntü indirdiğinizde ve bağlantı orta akışta kesildiğinde, yarı indirilmiş bir görüntü kalır. Görüntülemeye çalışırsanız görüntünün üst kısmını alırsınız ve alt kısmı genellikle gri veya yeşil veya başka bir renk alır. Başka bir deyişle, bozuk.

Görüntünün bu şekilde hasar görüp görmediğini veya başka bir şekilde bozuk olup olmadığını kontrol etmenin bir yolu var mı?

Yanıtlar:


15

JPEG dosyaları hakkında konuşuyorsanız, jpeginfo yardımcı programı tam olarak aradığınız şeydir. Farklı JPEG hataları ve bozulma türleri için dosyaları kontrol edebilir ve bir hata kodu (komut dosyası oluşturma için en yararlı şey) döndürebilir veya sadece hatalı dosyaları silebilir.

Manuel kontrollere dayanmadan her şeyin iyi kopyalandığından emin olmak için ilk dosya aktarımımın bir parçası olarak kullanıyorum. (Bundan sonra, normal yedek / bitrot korumamın bir parçası olarak sağlama toplamlarının değişmediğinden emin olurum.)

Program komut satırıdır ve kaynak kodu olarak gelir, ancak herhangi bir Linux dağıtımında veya bir geliştirme ortamı düzgün bir şekilde kurulmuş bir Mac'te kolayca kurulmalı ve kullanılmalıdır. Cygwin veya MinGW ile Windows'ta bile yapabileceğinizden eminim. (Örneğin, bütünlüğünü garanti edemesem de, bu blog yazısı yasal görünüyor ve önceden derlenmiş bir indirme içeriyor.) Kendiniz oluşturmak için:

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

Bu jpeginfo, yerinde çalıştırabileceğiniz veya istediğiniz yere kopyalayabileceğiniz (muhtemelen kullanarak make install) bir komut oluşturmalıdır .

Sonra, şu şekilde çalıştırın:

$ ./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]

Burada, test1.jpg gayet iyi ve test2.jpg Sondan birkaç bayt sildim ve test3.jpg Üstbilgideki bazı rastgele baytları değiştirdim.

RAW dosyalarınız varsa, bu sayfayı DNG Doğrulaması ile ilgili Amerikan Medya Fotoğrafçıları Derneği'nden veya tescilli RAW formatlarını toplu olarak doğrulamak için Adobe'nin DNG dönüştürücüsünü kullanmayı kapsayan veri doğrulama ayrıntılarından bir tanesine göz atın. (Ne yazık ki, bu bir GUI işlemidir ve kolayca yazılabilir değildir.)

DNG'nin 1.2 sürümünü yerel olarak veren bir kameranız varsa, görüntü verisinin yerleşik bir MD5 sağlama toplamını içerdiği için bu daha da iyidir. Ne yazık ki, bu normal görüntü meta verileriyle depolanmış gibi görünmüyor - ya da en azından exiftool ve exiv2 bunu tanımıyor ve genel olarak 1.2 DNG dosyalarını okuyorlar - yani şu anda Adobe doğrulamasını bildiğim kadarıyla bundan faydalanmanın tek yolu aracıdır.


Jpeginfo için Windows ikili dosyalarının bir yerlerde var olup olmadığını biliyor musunuz?
Kale

1
Jpeginfo aracının git clone tarafından kullanılması Windows'ta mümkün görünmüyor, çünkü 'aux' Windows ayrılmış bir isim gibi görünüyor ve git yukarıda belirtilen dizini klonlayamıyor.
Kale

--- burada diğer gönderiden sohbete devam etmek; Arşivi açmak, 'aux' nedeniyle bir hata veriyor. Arşivdeki 'aux' olarak yeniden adlandırmak, unzipping ve sonra cygwin içinde 'aux' olarak yeniden adlandırmak bu sorunu çözdü. Ancak cygwin'den marka yapmak hala çok sayıda hatayla sonuçlandı; wrjpgcom.c hakkında bir şey: 87: 54: uyarı: yerleşik 'exit' işlevinin uyumsuz örtülü bildirimi [varsayılan olarak etkindir] #define ERREXIT (msg) (fprintf (stderr, "% s \ n", msg), exit (EXIT_FAILURE)) (birçok kişiden sadece biri)
Rook

@ldigas mattdm.org/misc/jpeginfo-w32/jpeginfo.exe adresinde bulabileceğiniz bir MinGW ikili dosyası oluşturdum . Ben Linux üzerinde bu inşa edilmiş bir çapraz derlenmiş yüzden test, ancak gibiydi değil, çalıştırılabilir inşa tamam. Çalışacağına söz veremem, ancak sadece yukarı akış koduna ve virüs veya herhangi bir şeye sahip olmadığına söz veriyorum. :)
mattdm

Yaptığınız çaba için bunu birkaç dakika önce oyladınız, ancak Windows'ta bu kadar iyi çalışmıyor gibi görünüyor. jpeginfo -c any_jpeg_file.jpg Bunu sağlıyorum, JPEG dosyasının erken sonu bildiriyor gibi görünüyor JPEG veri akışı hiçbir görüntü içermiyor [HATA].
Kale

2

ImageVerifier istediğini yaptı. Maalesef artık indirilemiyor ve destek 31 Aralık 2017'de durduruldu (bkz. Artık Ingestamatic ve ImageVerifier satılmıyor ).

Tarihsel nedenlerden dolayı eski cevap

ImageVerifier (kısaca IV), doğrulanması gereken görüntü dosyalarını arayan klasörlerin hiyerarşisini geçer. TIFF'leri, JPEG'leri doğrulayabilir. PSD'ler, DNG'ler ve DNG olmayan sıralar (örn., NEF, CR2).

IV, çok sayıda görüntüyü işlemek için tasarlanmıştır. 100.000 veya daha fazla resme sahip klasör hiyerarşileri sorun olmamalıdır. Bir test çalışmasında IV, 14 saat boyunca çalıştı.

IV'ün gerçekleştirdiği iki tür doğrulama vardır: Yapı kontrolü ve karma kontrolü.

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


ImageVerifier ile ilişkili olduğunuz anlaşılıyor, eğer öyleyse, lütfen cevabınızda bunu açıklayabilir misiniz?
lanet olası gerçekler

1
Ürünle hiç ilişkili değilim. NAS çökmesinden sonra bazı görüntü dosyalarını doğrulamam gerekiyordu ve bu aracı kullandım. Bir açıklama vermek için siteden metni yapıştırdım.
Kez

FWIW - Kamera dosyaları için iyi (jpgs ve çeşitli RAW formatları - birincil kullanım amacı), ancak codec'leri olmayan diğer dosya türleri için çok iyi değil. ImageMagick'in -identify işlevi başka bir seçenektir
Kez

1

Bu, fotoğraf makinenizden görüntü indirmekle değil, bilgisayardan bilgisayara aktarımla ilgili ise, dosya bütünlüğüne ilişkin ortak bir yaklaşım sağlama toplamlarıdır .

Ne yazık ki, bildiğim kadarıyla, yaygın "son kullanıcı" görüntü formatları (jpeg, png, gif,…) bütünlük açısından kontrol edilmez. Ancak, otomatik işleme anlamına gelen soruyu anladığım gibi, sağlama toplamı araçlarını ( CRC32 , MD5 ,…) iş akışına entegre etmek uygun bir çözüm olabilir. Sağlama saklamak için ortak bir yaklaşım gibi, sadece bir katma uzantılı, aynı adı taşıyan bir dosya sahip olmaktır: img123.jpg → img123.jpg.md5.

Bu yaklaşımın, (örneğin) sepet dosyalarının bütünlüğünü veya benzer bir mekanizmada aktarmak istediğiniz herhangi bir şeyi kontrol edebilmenizin ek bir avantajı vardır. Ve eğer sağlama toplamı dosyalarını gelecekte bile saklarsanız. (Ve sınırlı bilgim dahilinde PS, LR veya diğer yaygın araçlara entegre olmamanın dezavantajı var.)


1
DNG'nin bir sağlama toplamı içerdiğini ve doğrudan Lightroom'da doğrulanabileceğini belirtmek gerekir.
Hampus Nilsson

Farkında değildim! Mükemmel. Mantıklı da. "Son kullanıcı" biçimlerini arşiv biçimlerinden daha fazla amaçladığımı daha net hale getirmek için cevabı düzenledim, ancak DNG'nin sağlama toplamlarında yardımcı olması çok hoş.
Cornelius

Yedekleme ortamına kopyalanan MD5 sağlama toplamı dosyalarını özgün dosyalarla birlikte hesaplamak için Irnis Haliullin tarafından "Gelişmiş Sağlama Toplamı Doğrulayıcı" (ACSV) kullanıyorum. ACSV toplu veya etkileşimli olarak çalışır. Kopyanın bütünlüğü, sağlama toplamının yeniden hesaplanması ve orijinal ile karşılaştırılmasıyla her zaman doğrulanabilir.
Pierre

1

Check_media_integrity basit bir python betiği geliştirdim check_mi.py, GitHub'dan indirebilirsiniz:

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

Ben kılavuz giriş teklif:

check-mi, medya dosyalarının (resimler, video, ses) bütünlüğünü otomatik olarak kontrol eden bir Python 2.7 betiğidir. Tek bir dosyanın bütünlüğünü veya bir klasördeki ve alt klasörlerdeki dosya kümelerini yinelemeli olarak kontrol edebilirsiniz, son olarak isteğe bağlı olarak bozuk dosyaların listesini yollarıyla ve ayrıntılarıyla CSV biçiminde çıktısı alabilirsiniz.

Araç, ortak kütüphaneleri (Pillow, ImageMagik, FFmpeg) kullanarak dosya bütünlüğünü test eder ve medya dosyalarının kodunu ne zaman etkin bir şekilde çözebileceklerini kontrol eder. Uyarı, görüntü, ses ve video formatları kusurlara ve hasarlara karşı çok dayanıklıdır, bu nedenle araç tüm hasarlı dosyaları tespit edemez.

check-mi,% 100 güvenle, üstbilgi / meta veri kırık dosyaları, kesik görüntü dosyalarını (strict_level> 0 ile) ve aygıt g / Ç hatalarını tespit edebilir.

check-mi genellikle tüm küçük hasarları algılayamaz - örneğin, medya dosyasının farklı değerlerle üzerine yazılan küçük bir kısmı. Ayrıntılı olarak, tek bir 5MB jpeg resmi üzerinde yürütülen küçük bir randomize deney ile strict_level 1 test ettik:

Sıfırla görüntü dosyasının bir kısmının (aralık) üzerine yazılması, hasarı tespit etme şansını% 50 elde etmek için aralık boyutu = 1024 KB olmalıdır. Farklı rastgele değerlere sahip görüntü dosyasının bir bölümünün (aralığının) üzerine yazarak, 4096byte ile 1024Kbyte arasında değişen aralık boyutları için yaklaşık% 85 algılama oranı elde edersiniz.

Kod çözme sırasında Yastık, Değnek ve FFmpeg'e daha katı olmalarını bildirmenin yollarını biliyorsanız, lütfen bana söyleyin.


0

Kabul edilen cevap, C ile yazılmış gerçekten eski ve bakımsız bir araç olan jpeginfo kullanımını ifade eder (ve aynı zamanda çok modüler / genişletilemez). Ayrıca, bu araç sadece belirli EXIF ​​veri noktalarını arıyor gibi görünüyor ( ~ 5 dakika boyunca kaynak kodunu gözden geçirin ).

Dosya türü adı verilen daha iyi bir araç olan IMO'nun kullanımı çok kolaydır - temel olarak örnek kodlarını kopyalayıp yapıştırın ve nasıl kod yazacağınızı bilmiyorsanız dosya adını değiştirin. Bilinen bazı dosya türleriyle ilişkili sihirli sayıları kontrol eder ve ne tür bir dosyayla uğraştığınızı bilmenizi sağlar.

Hala bundan daha fazla koruma katmanı arıyorum. Örneğin, keyfi veriler EXIF ​​meta verilerinin ötesinde (veya içinde) saklanırsa veya sihirli sayılardan sonra saklanırsa, bu güvenlik sorunları oluşturabilir. Daha fazla güvenlik önlemine bakmaya devam edeceğim ve daha sonra bu yanıtı güncellemeyi umuyorum.

Tembel için web sayfalarından kopyalanan örnek kod:

// 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'}

Bilginize, bu araç sürekli olarak güncelleniyor (3 gün önce buradaki orijinal yanıtımdan son güncelleme yapıldı) ve şu anda haftalık 3.691.850 indirme var - bu muhtemelen iyi bir gösterge.


Tipik sihirli sayı tabanlı dosya türü tanımlayıcıları genellikle yalnızca ilk n bayta odaklanır, bu nedenle burada sorulan sorunun temelini oluşturan kısmen işlenmiş bir görüntü dosyası ile yardımcı olmayabilir. Yani, POSIX'in file(aynı şekilde çalışan) doğru raporlayacağı bir JPEG veya PNG'ye sahip olmak çok yaygındır , ancak verilerin çoğu aslında eksik olduğundan işlenemez.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.