PYTHON

Cara Mengekstrak Metadata Gambar Dengan Python

Pendahuluan

Dalam tutorial ini, Anda akan belajar bagaimana Anda dapat mengekstrak beberapa metadata yang berguna di dalam gambar menggunakan library Pillow dengan Python. Perangkat seperti kamera digital, smartphone, dan pemindai menggunakan standar EXIF ​​untuk menyimpan gambar atau file audio. Standar ini berisi banyak tag yang berguna untuk mengekstrak yang dapat berguna untuk penyelidikan forensik, seperti merek, model perangkat, tanggal dan waktu yang tepat dari pembuatan gambar, dan bahkan informasi GPS pada beberapa perangkat. Harap dicatat bahwa ada alat gratis untuk mengekstrak metadata seperti ImageMagick atau ExifTool di Linux , tujuan dari tutorial ini adalah untuk mengekstrak metadata dengan bahasa pemrograman Python. Untuk memulai, Anda perlu menginstal perpustakaan pillow.

Install Library Pillow

pip3 install Pillow

Buka file Python baru dan ikuti:

from PIL import Image
from PIL.ExifTags import TAGS

Sekarang ini hanya akan bekerja pada file gambar JPEG , ambil gambar apa pun yang Anda ambil dan uji untuk tutorial ini.

# path untuk gambar atau video
imagename = "image.jpg"

# membaca data gambar menggunakan PIL
image = Image.open(imagename)

Kami memuat gambar menggunakan Image.open() metode. Sebelum memanggil getexif() fungsi, perpustakaan pillow memiliki beberapa atribut pada objek gambar, mari kita cetak:

# ekstrak metadata dasar lainnya
info_dict = {
    "Filename": image.filename,
    "Image Size": image.size,
    "Image Height": image.height,
    "Image Width": image.width,
    "Image Format": image.format,
    "Image Mode": image.mode,
    "Image is Animated": getattr(image, "is_animated", False),
    "Frames in Image": getattr(image, "n_frames", 1)
}

for label,value in info_dict.items():
    print(f"{label:25}: {value}")

Sekarang mari kita panggil getexif() metode pada gambar yang mengembalikan metadata gambar:

# ekstrak data EXIF
exifdata = image.getexif()

Masalah dengan exifdata variabel sekarang adalah bahwa nama bidang hanyalah ID, bukan nama bidang yang dapat dibaca manusia, itu sebabnya kita memerlukan kamus TAGS dari modul PIL.ExifTags yang memetakan setiap ID tag menjadi teks yang dapat dibaca manusia:

# mengulangi semua bidang data EXIF
for tag_id in exifdata:
    # dapatkan nama tag, alih-alih id tag manusia yang tidak dapat dibaca
    tag = TAGS.get(tag_id, tag_id)
    data = exifdata.get(tag_id)
    # memecahkan kode byte
    if isinstance(data, bytes):
        data = data.decode()
    print(f"{tag:25}: {data}")

Inilah keluaran saya:

Filename                 : .\image.jpg
Image Size               : (5312, 2988)       
Image Height             : 2988
Image Width              : 5312
Image Format             : JPEG
Image Mode               : RGB
Image is Animated        : False
Frames in Image          : 1
ExifVersion              : 0220
ShutterSpeedValue        : 4.32
ApertureValue            : 1.85
DateTimeOriginal         : 2016:11:10 19:33:22
DateTimeDigitized        : 2016:11:10 19:33:22
BrightnessValue          : -1.57
ExposureBiasValue        : 0.0
MaxApertureValue         : 1.85
MeteringMode             : 3
Flash                    : 0
FocalLength              : 4.3
ColorSpace               : 1
ExifImageWidth           : 5312
FocalLengthIn35mmFilm    : 28
SceneCaptureType         : 0
ImageWidth               : 5312
ExifImageHeight          : 2988
ImageLength              : 2988
Make                     : samsung
Model                    : SM-G920F
Orientation              : 1
YCbCrPositioning         : 1
XResolution              : 72.0
YResolution              : 72.0
ImageUniqueID            : A16LLIC08SM A16LLIL02GM

ExposureProgram          : 2
ISOSpeedRatings          : 640
ResolutionUnit           : 2
ExposureMode             : 0
FlashPixVersion          : 0100
WhiteBalance             : 0
Software                 : G920FXXS4DPI4
DateTime                 : 2016:11:10 19:33:22
ExifOffset               : 226
MakerNote                : 0100 
                                Z@P
UserComment              :
ExposureTime             : 0.05
FNumber                  : 1.9

Banyak hal yang berguna, dengan cepat googling Model, saya menyimpulkan bahwa gambar ini diambil oleh Samsung Galaxy S6, jalankan ini pada gambar yang diambil oleh perangkat lain dan Anda akan melihat bidang yang berbeda (mungkin lebih). Baiklah, kita sudah selesai. Semoga bermanfaat!

Sumber asli : thepythoncode