문서화 된 디지털 사진을 필터링하기 위해 PERL 스크립트를 작성하려면 어떻게합니까?

StackOverflow https://stackoverflow.com/questions/1623057

  •  06-07-2019
  •  | 
  •  

문제

어젯밤 잠자리에 들기 전, 나는 학습 Perl의 스칼라 데이터 섹션을 다시 탐색하고 다음 문장을 발견했습니다.

문자열에 문자를 가질 수 있다는 것은 원시 바이너리 데이터를 문자열로 생성, 스캔 및 조작 할 수 있음을 의미합니다.

Perl이 실제로 하드 디스크에 저장 한 사진을 String Adobe가 포함되어 있는지 확인할 수 있다는 아이디어가 즉시 나에게 부딪쳤다. 그렇게함으로써, 나는 그들 중 어느 쪽이 포토샵을 받았는지 알 수 있습니다. 그래서 나는 아이디어를 구현하려고 노력했고 다음 코드를 생각해 냈습니다.

#!perl
use autodie;
use strict;
use warnings;

{
    local $/="\n\n";
    my $dir = 'f:/TestPix/';
    my @pix = glob "$dir/*";

    foreach my $file (@pix) {
        open  my $pic,'<',  "$file";

        while(<$pic>) {
            if (/Adobe/) {
                print "$file\n";
            }
        }
    }
}

흥미롭게도 코드는 실제로 작동하는 것처럼 보이며 포토샵이 된 사진을 필터링하는 작업을 수행합니다. 그러나 문제는 다른 유틸리티에서 많은 사진을 편집한다는 것입니다. 나는 내가 거기에 갇힌 것 같아요. 디지털 사진이 편집되었는지 여부를 알 수있는 간단하지만 보편적 인 방법이 있습니까?

if (!= /the origianl format/) {...}

아니면 더 많은 조건을 추가해야합니까? 처럼

if (/Adobe/|/ACDSee/|/some other picture editors/)

이것에 대한 아이디어가 있습니까? 아니면 비참하게 제한된 프로그래밍 지식으로 인해 지나치게 단순화하고 있습니까?

항상 지침에 감사드립니다.

도움이 되었습니까?

해결책

Perl에서 가장 좋은 방법은 아마도일 것입니다 exiftool. 이를 통해 이미지에 포함 된 비 이미지 정보에 대한 액세스 권한이 있습니다. 그러나 다른 사람들이 말했듯이, 물론이 정보를 제거 할 수 있습니다.

다른 팁

이미지의 변경을 감지 할 방법이 전혀 없다고 말하지는 않지만 문제는 매우 어렵습니다.

답이 있다고 주장하는 유일한 사람은 닐 크라 에츠 박사, 누가 이미지의 디지털 방식으로 변경된 부분은 원래 부분과 다른 압축 오류율을 가질 것이라고 주장합니다. 그는 다른 품질 수준에서 JPEG를 다시 구하는 것이 이러한 차이점을 강조 할 것이라고 주장합니다.

나는 이것이 내 조사에서 사실이라는 것을 알지 못했지만 아마도 더 나은 결과를 얻을 수있을 것입니다.

아니요. 완벽하게 편집 된 이미지와 처음부터 그 방식이었던 이미지 사이에는 기능적 차이가 없습니다. 결국에는 결국 픽셀 한 봉지 일 뿐이며 다른 메타 데이터는 모두 제거하거나 위조 할 수 있습니다. 원하다.

이미지를 편집하는 데 사용되는 그래픽 프로그램의 이름은 이미지 데이터 자체의 일부가 아니라 메타 데이터라고하는 것입니다. 5월 이미지 파일에 저장되어 있지만 다른 사람들이 언급했듯이 필요하지 않으므로 (일부 프로그램을 저장하지 않을 수도 있고, 일부는 저장하지 않는 옵션을 허용하거나 신뢰할 수 없습니다. 이미지를 위조 한 경우, 당신은 메타 데이터도 있습니다.

따라서 귀하의 질문에 대한 답변은 "아니오, 사진이 편집되었는지 여부를 보편적으로 알 수있는 방법이 없지만 일부 이미지 편집 소프트웨어는 이미지 파일에 서명을 작성할 수 있으며 편집자의 부주의로 남겨집니다. .

PERL에서 이미지 처리에 대해 더 많이 배우는 경향이 있다면 CPAN이 제공하는 우수한 모듈을 살펴볼 수 있습니다.

  • 이미지 :: magick - 많은 수의 이미지 파일 형식을 읽고, 조작 및 쓰기
  • GD - 많은 수의 그래픽 프리미티브를 사용하여 색상 도면을 만들고 다양한 형식으로 도면을 방출합니다.
  • GD :: 그래프 - 차트 생성
  • GD :: Graph3d - GD 및 GD :: 그래프로 3D 그래프 생성

그러나 다양한 이미지 형식을 식별하는 데 사용할 수있는 다른 유틸리티가 있습니다. 더 많은 질문입니다 슈퍼 사용자, 그러나 다양한 유닉스 배포판의 경우 사용할 수 있습니다 file 다양한 유형의 파일을 식별하고 MacOSX의 경우 그래픽 변환기 나를 실망시키지 않았습니다. (수의사에서 디스크에 탔던 고양이의 산산이 부서진 골반의 기괴한 멀티 파일 엑스레이를 열 수도있었습니다.)

원래 형식이 무엇인지 어떻게 알 수 있습니까? 이미지가 수정되었는지 알 수있는 보장 방법이 없다고 확신합니다.

파일을 열 수 있으며 (내가 좋아하는 프로그래밍 언어 및 파일 시스템 API와 함께) 원하는 것을 해당 파일에 쓸 수 있습니다. 파일 형식으로 무언가를 망치지 않는 한, 당신은 그것이 일어난 일을 결코 알지 못할 것입니다.

도대체 이미지를 인쇄 한 다음 다시 스캔 할 수있었습니다. 원본에서 어떻게 말 하시겠습니까?

다른 사람이 말했듯이, 이미지가 닥터 트리했는지 알 수있는 방법이 없습니다. 기본적으로 알고 싶은 것은 현실적인 사진과 향상 또는 수정 된 사진의 차이점이라고 생각합니다.

이미지의 모든 픽셀을 분석하고 이미지가 의사가 있는지 여부를 결정하기 위해 매우 복잡한 작업을 수행하는 매우 복잡한 이미지 인식 알고리즘을 실행하는 옵션이 항상 있습니다. 이 솔루션에는 아마도 Doctored와 그로부터 배우지 않고 배우는 수백만 장의 사진을 검사하는 AI가 포함될 것입니다. 그러나 이것은 이론적 해결책이 더 많고 실용적이지 않습니다 ... 아마도 영화에서만 볼 수있을 것입니다. 개발하는 것은 매우 복잡하고 아마도 몇 년이 걸릴 것입니다. 그리고 당신이 이와 같은 일을 일으켰더라도, 아마도 항상 100% 정확하지 않을 것입니다. 나는 AI 기술이 여전히 그 수준에 있지 않으며 그것이 될 때까지 시간이 걸릴 수 있다고 생각합니다.

Exiftool의 공통적으로 알려지지 않은 기능을 사용하면 JPEG 양자화 테이블 (이미지 메타 데이터에 의존하지 않음)을 분석하여 원래 소프트웨어를 인식 할 수 있습니다. 많은 응용 프로그램에서 작성한 테이블을 인식합니다. 일부 카메라는 일부 응용 프로그램과 동일한 양자화 테이블을 사용할 수 있으므로 100% 솔루션은 아니지만 조사 할 가치가 있습니다. 다음은 두 이미지에서 Exiftool 실행의 예입니다. 첫 번째는 Photoshop에 의해 편집되었습니다.

> exiftool -jpegdigest a.jpg b.jpg
======== a.jpg
JPEG Digest                     : Adobe Photoshop, Quality 10
======== b.jpg
JPEG Digest                     : Canon EOS 30D/40D/50D/300D, Normal
    2 image files read

메타 데이터가 제거 된 경우에도 작동합니다.

변경 증거에 대한 실제 이미지 데이터를 분석하기 위해 다양한 기술 (압축 아티팩트, 카메라 데이터베이스 등의 서명 프로파일과 비교)을 사용하는 기존 소프트웨어가 있습니다. 이러한 소프트웨어에 액세스 할 수 있고 사용 가능한 소프트웨어가 이러한 분석 기능에 대한 외부 액세스를위한 API를 제공하는 경우, 해당 API와 인터페이스 할 Perl 모듈이 존재하고 그러한 모듈이 없으면 가능할 가능성이 높습니다. 아마도 다소 빨리 만들어 질 것입니다.

이론적으로, 기본 Perl에서 이미지 분석 코드를 직접 구현할 수는 있지만, 그렇게 한 사람은 아무도 모르지만 저수준과 프로세서 집약적 인 것을 쓰는 것이 더 나을 것으로 기대합니다. Perl이 아닌 완전히 컴파일 된 언어 (예 : C/C ++)에서.

http://www.impulseadventure.com/photo/jpeg-snoop.html작업이 거의 좋은 도구입니다

복제가 있었다면, 픽셀 밀도에 변화가 있습니다. 또는 때로는 농도가 나타납니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top