มีเครื่องมือในการตรวจสอบความสมบูรณ์ของไฟล์ของภาพหรือไม่?


21

บางครั้งเมื่อคุณดาวน์โหลดรูปภาพและการเชื่อมต่อหยุดกลางสตรีมคุณจะเหลือครึ่งหนึ่งของรูปภาพที่ดาวน์โหลด หากคุณพยายามที่จะดูมันคุณจะได้รับส่วนบนของภาพและส่วนล่างมักจะเป็นสีเทาหรือสีเขียวหรือสีอื่น ๆ กล่าวอีกนัยหนึ่งมันเสียหาย

มีวิธีการตรวจสอบหรือไม่ว่าภาพเสียหายหรือเป็นอย่างอื่น?

คำตอบ:


15

หากคุณกำลังพูดถึงไฟล์ JPEG แสดงว่ายูทิลิตี้jpeginfoเป็นสิ่งที่คุณต้องการอย่างแท้จริง มันสามารถตรวจสอบไฟล์สำหรับข้อผิดพลาด JPEG และข้อผิดพลาดประเภทต่างๆและส่งคืนรหัสข้อผิดพลาด (สิ่งที่มีประโยชน์ที่สุดสำหรับการเขียนสคริปต์) หรือเพียงแค่ลบไฟล์ที่มีข้อผิดพลาด

ฉันใช้สิ่งนี้เป็นส่วนหนึ่งของการถ่ายโอนไฟล์เริ่มต้นของฉันเพื่อให้แน่ใจว่าทุกอย่างที่คัดลอกไม่เป็นไรโดยไม่ต้องพึ่งพาการตรวจสอบด้วยตนเอง (หลังจากนั้นฉันตรวจสอบให้แน่ใจว่า checksums ของพวกเขาไม่เปลี่ยนแปลงเนื่องจากเป็นส่วนหนึ่งของการป้องกันสำรอง / bitrot ปกติของฉัน)

โปรแกรมดังกล่าวเป็นบรรทัดคำสั่งและมาเป็นซอร์สโค้ด แต่มันควรจะง่ายต่อการสร้างและใช้งานบนการกระจาย Linux หรือบน Mac ด้วยการตั้งค่าสภาพแวดล้อมการพัฒนาที่เหมาะสม ฉันแน่ใจว่าคุณสามารถทำได้บน Windows ด้วย Cygwin หรือ MinGW (ตัวอย่างเช่นแม้ว่าฉันจะไม่สามารถรับรองความถูกต้องได้ แต่บล็อกโพสต์นี้ดูเหมือนถูกต้องและมีการดาวน์โหลดที่คอมไพล์แล้ว) ในการสร้างด้วยตนเอง:

$ 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 ให้ตรวจสอบหน้านี้จาก American Society of Media Photographers เกี่ยวกับการตรวจสอบความถูกต้องของDNGหรือรายละเอียดการตรวจสอบความถูกต้องของข้อมูลซึ่งครอบคลุมการใช้ตัวแปลง DNG ของ Adobe เพื่อตรวจสอบรูปแบบ RAW ที่เป็นกรรมสิทธิ์ (น่าเสียดายนี่คือการใช้งาน GUI และไม่จำเป็นต้องเป็นสคริปต์ได้อย่างง่ายดาย)

หากคุณมีกล้องที่ให้ผลผลิต DNG รุ่น 1.2 ได้ดีกว่าเนื่องจากมีการตรวจสอบ MD5 ในตัวของข้อมูลภาพ น่าเสียดายที่นี่ดูเหมือนจะไม่ถูกจัดเก็บด้วยข้อมูลเมตาของภาพปกติหรืออย่างน้อย exiftool และ exiv2 ไม่รู้จักและพวกเขาอ่านไฟล์ 1.2 DNG โดยทั่วไป - ซึ่งหมายความว่าเท่าที่ฉันรู้ว่าการตรวจสอบ Adobe ในปัจจุบัน เครื่องมือเป็นวิธีเดียวที่จะใช้ประโยชน์จากสิ่งนั้นเช่นกัน


คุณรู้หรือไม่ว่าไบนารีของ Windows สำหรับ jpeginfo มีอยู่หรือไม่
โกง

1
การใช้เครื่องมือ jpeginfo โดย git clone ดูเหมือนจะไม่สามารถทำได้บน Windows เพราะดูเหมือนว่า 'aux' จะเป็นชื่อที่สงวนไว้ของ Windows และ git ไม่สามารถโคลนไดเรกทอรีดังกล่าวให้มีอยู่ได้
โกง

--- การสนทนาต่อจากโพสต์อื่นที่นี่; การขยายไฟล์ที่เก็บถาวรทำให้เกิดข้อผิดพลาดเนื่องจาก 'aux' การเปลี่ยนชื่อ 'aux' ในไฟล์เก็บถาวรช่วยในการคลายซิปแล้วเปลี่ยนชื่อกลับเป็น 'aux' ภายใน cygwin แก้ปัญหานั้นได้ แต่การทำงานจาก cygwin ทำให้เกิดข้อผิดพลาดมากมาย บางอย่างเกี่ยวกับ wrjpgcom.c: 87: 54: คำเตือน: การประกาศโดยนัยที่เข้ากันไม่ได้ของฟังก์ชัน 'exit' ในตัว [เปิดใช้งานโดยค่าเริ่มต้น] #define ERREXIT (msg) (fprintf (stderr, "% s \ n", msg), ออก (EXIT_FAILURE)) (เพียงหนึ่งในหลาย ๆ รายการ)
โกง

@ldigas ฉันสร้างไบนารี MinGW ซึ่งคุณสามารถหาที่mattdm.org/misc/jpeginfo-w32/jpeginfo.exe ฉันสร้างสิ่งนี้บน Linux เป็นปฏิบัติการที่คอมไพล์แล้วดังนั้นจึงยังไม่ได้ทดสอบ แต่ดูเหมือนว่าจะสร้างไม่เป็นไร ฉันไม่สามารถสัญญาว่าจะใช้งานได้ แต่ฉันสัญญาว่าจะเป็นเพียงรหัสอัปสตรีมและไม่มีไวรัสหรืออะไรเลย :)
mattdm

โหวตขึ้นเมื่อไม่กี่นาทีที่ผ่านมาสำหรับความพยายามของคุณ แต่ดูเหมือนว่าจะไม่สามารถทำงานได้ดีบน Windows jpeginfo -c any_jpeg_file.jpg ฉันให้ไว้ดูเหมือนว่าจะรายงานจุดสิ้นสุดก่อนกำหนดของไฟล์ JPEG JPEG datastream ไม่มีภาพ [ข้อผิดพลาด]
โกง

2

ImageVerifier ทำในสิ่งที่คุณต้องการ น่าเสียดายที่มันไม่สามารถดาวน์โหลดได้อีกต่อไปและการสนับสนุนได้ถูกยกเลิกในวันที่ 31 ธันวาคม 2017 (ดูIngestive และ ImageVerifier ที่ไม่มีขายอีกต่อไป )

คำตอบเก่าด้วยเหตุผลทางประวัติศาสตร์

ImageVerifier (สั้น ๆ สำหรับ IV) สำรวจลำดับชั้นของโฟลเดอร์เพื่อค้นหาไฟล์รูปภาพเพื่อตรวจสอบ มันสามารถตรวจสอบ TIFFs, JPEGs PSDs, DNGs และไม่ใช่ดิบ DNG (เช่น NEF, CR2)

IV ถูกออกแบบมาเพื่อประมวลผลภาพจำนวนมาก ลำดับชั้นของโฟลเดอร์ที่มี 100,000 ภาพหรือมากกว่านั้นจะไม่มีปัญหา ในการทดสอบครั้งเดียว IV จะใช้เวลา 14 ชั่วโมง

การตรวจสอบมีสองประเภทที่ IV ดำเนินการ: การตรวจสอบโครงสร้างและการตรวจสอบแฮช

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


ดูเหมือนว่าคุณมีความเกี่ยวข้องกับ ImageVerifier ถ้าเป็นเช่นนั้นคุณช่วยเปิดเผยเรื่องนี้ในคำตอบของคุณได้ไหม
ความจริงที่ถูกสาป

1
ฉันไม่ได้เกี่ยวข้องกับผลิตภัณฑ์เลย ฉันต้องตรวจสอบไฟล์ภาพบางส่วนหลังจากที่ NAS ขัดข้องและใช้เครื่องมือนี้ ฉันเพิ่งตัดข้อความจากเว็บไซต์เพื่อให้คำอธิบาย
Kez

FWIW - เหมาะสำหรับไฟล์กล้อง (jpgs และรูปแบบ RAW ต่างๆ - ใช้เป็นหลัก) แต่ไม่ดีสำหรับไฟล์ประเภทอื่น ๆ ที่ไม่มีตัวแปลงสัญญาณ ฯลฯ - ฟังก์ชั่นระบุตัวตนของ ImageMagick เป็นตัวเลือกอื่น
Kez

1

ถ้าไม่เกี่ยวกับการดาวน์โหลดภาพจากกล้องของคุณ แต่คอมพิวเตอร์กับคอมพิวเตอร์โอนแนวทางร่วมกันเพื่อความสมบูรณ์ของไฟล์มีchecksums

น่าเสียดายที่รูปแบบภาพ "ผู้ใช้ทั่วไป" ทั่วไป (jpeg, png, gif, …) นั้นไม่ได้ผ่านการตรวจสอบด้วยตนเอง แต่เมื่อฉันเข้าใจคำถามที่บอกเป็นนัยถึงการประมวลผลอัตโนมัติการรวมเครื่องมือตรวจสอบ ( CRC32 , MD5 , …) เข้ากับเวิร์กโฟลว์อาจเป็นทางออกที่ทำงานได้ img123.jpg → img123.jpg.md5วิธีการทั่วไปในการจัดเก็บการตรวจสอบคือการมีไฟล์ที่มีชื่อไฟล์เดียวกันเพียงกับส่วนขยายที่เพิ่มเช่น:

วิธีนี้มีประโยชน์เพิ่มเติมที่คุณสามารถตรวจสอบความสมบูรณ์ของ (เช่น) ไฟล์ sidecar หรือสิ่งอื่นที่คุณต้องการถ่ายโอนในกลไกที่คล้ายกัน และถ้าคุณเก็บไฟล์เช็คซัมไว้รอบ ๆ แม้ในอนาคต (และมันมีข้อเสียของการไม่รวมอยู่ใน PS, LR หรือเครื่องมือทั่วไปอื่น ๆ ในขอบเขตของความรู้ที่ จำกัด ของฉัน)


1
เป็นที่น่าสังเกตว่า DNG มีการตรวจสอบและสามารถตรวจสอบได้โดยตรงใน Lightroom
Hampus Nilsson

ฉันไม่ได้ตระหนักถึงสิ่งนั้น! ยอดเยี่ยม ทำให้รู้สึกเช่นกัน ฉันแก้ไขคำตอบเพื่อให้ชัดเจนยิ่งขึ้นฉันตั้งเป้าไปที่รูปแบบ "ผู้ใช้ปลายทาง" มากกว่ารูปแบบจดหมายเหตุแม้ว่าจะเป็นเรื่องดีที่ DNG ช่วยด้วย checksums
คอร์นีเลียส

ฉันใช้ "Advanced Checksum Verifier" (ACSV) โดย Irnis Haliullin เพื่อคำนวณไฟล์ MD5 checksum ที่คัดลอกไปยังสื่อสำรองข้อมูลพร้อมกับไฟล์ต้นฉบับ ACSV ทำงานเป็นชุดหรือแบบโต้ตอบ ความสมบูรณ์ของสำเนาสามารถตรวจสอบได้ตลอดเวลาโดยการคำนวณเช็คซัมอีกครั้งและเปรียบเทียบกับต้นฉบับ
Pierre

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% ในการตรวจจับไฟล์ที่มีส่วนหัว / เมทาดาทาที่ไม่สมบูรณ์ไฟล์ภาพที่ถูกตัดทอน (ที่เข้มงวด _ ระดับ> 0) และข้อผิดพลาด i / o อุปกรณ์

การตรวจสอบ mi มักจะไม่สามารถตรวจพบความเสียหายเล็กน้อยทั้งหมด - เช่นส่วนเล็ก ๆ ของไฟล์สื่อที่เขียนทับด้วยค่าที่ต่างกัน ในรายละเอียดฉันได้ทดสอบเข้มงวด _level 1 ด้วยการทดลองแบบสุ่มขนาดเล็กดำเนินการในรูปภาพ jpeg ขนาด 5MB เดียว:

เขียนทับส่วน (ช่วงเวลา) ของไฟล์รูปภาพด้วยศูนย์คุณต้องการขนาดช่วงเวลา = 1024KBytes เพื่อรับโอกาส 50% ในการตรวจจับความเสียหาย เขียนทับส่วน (ช่วงเวลา) ของไฟล์รูปภาพที่มีค่าสุ่มต่างกันคุณจะได้อัตราส่วนการตรวจจับประมาณ 85% สำหรับขนาดช่วงเวลาตั้งแต่ 4096bytes ถึง 1024Kbytes

ในกรณีที่คุณรู้วิธีสอน Pillow, Wand และ FFmpeg ให้เข้มงวดขึ้นเมื่อถอดรหัสโปรดบอกฉัน


0

คำตอบที่ได้รับการยอมรับหมายถึงการใช้ jpeginfo ซึ่งเป็นเครื่องมือที่เก่าและไม่ได้รับการบำรุงรักษาที่เขียนด้วยภาษา C (และยังไม่แยกส่วน / ขยายได้) นอกจากนี้เครื่องมือดังกล่าวดูเหมือนจะมองหาจุดข้อมูล EXIF ​​บางจุดเท่านั้น (อ่านผ่านซอร์สโค้ดประมาณ ~ 5 นาที)

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

FYI เครื่องมือนี้ได้รับการอัปเดตอย่างต่อเนื่อง (3 วันที่ผ่านมาเป็นอัปเดตล่าสุดตามคำตอบดั้งเดิมของฉันที่นี่) และปัจจุบันพวกเขามีการดาวน์โหลดสัปดาห์ละ 3,691,850 รายซึ่งอาจเป็นข้อบ่งชี้ที่ดี


โดยทั่วไปตัวระบุชนิดไฟล์ที่ใช้หมายเลขมายากลมักจะมุ่งเน้นไปที่ n ไบต์แรกดังนั้นจึงอาจไม่ช่วยไฟล์รูปภาพที่มีข้อผูกมัดบางส่วนซึ่งเป็นพื้นฐานของคำถามที่วางไว้ที่นี่ นั่นคือมันเป็นเรื่องธรรมดามากที่จะมี JPEG หรือ PNG ที่ POSIX file(ซึ่งทำงานในลักษณะเดียวกันนี้) จะรายงานอย่างถูกต้อง แต่จะไม่สามารถแสดงผลได้เนื่องจากข้อมูลส่วนใหญ่ขาดหายไป
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.