Điện thoại thông minh và máy ảnh kỹ thuật số hiện đại nhúng nhiều thông tin (chẳng hạn như kiểu máy ảnh, thời gian và thậm chí cả tọa độ GPS) trong mỗi bức ảnh họ chụp
Bạn có thể tìm thấy những thông tin này bằng cách nhấp chuột phải vào hình ảnh và chọn “Properties” (trong Windows và…
Siêu dữ liệu là “dữ liệu cung cấp thông tin về dữ liệu khác”. Nói một cách đơn giản Dữ liệu về dữ liệu là Siêu dữ liệu. Siêu dữ liệu có nhiều mục đích khác nhau. Nó giúp người dùng tìm thông tin liên quan và khám phá tài nguyên
“Bất kỳ hệ thống nào cũng chỉ tốt khi siêu dữ liệu mà nó nhập vào. ”
- Chris Bulock
Tôi hy vọng thuật ngữ siêu dữ liệu hiện đã rõ ràng, Bây giờ đến phần Siêu dữ liệu hình ảnh…Một lượng đáng kể dữ liệu ẩn được ghi lại bất cứ khi nào bạn chụp ảnh bằng máy ảnh kỹ thuật số hoặc điện thoại thông minh
Siêu dữ liệu ảnh là một tập hợp dữ liệu mô tả và cung cấp thông tin về quyền và việc quản lý ảnh. Dữ liệu này còn được gọi là siêu dữ liệu EXIF
Đây là một ví dụ về siêu dữ liệu hình ảnh trông như thế nào
Phần hộp màu đỏ là siêu dữ liệu hình ảnh
Trước tiên, chúng tôi sẽ phải cài đặt Thư viện hình ảnh gối Python. thêm hỗ trợ để mở, thao tác và lưu nhiều định dạng tệp hình ảnh khác nhau. Bạn có thể tải xuống bằng cách sử dụng “pip install gối” hoặc bằng cách kiểm tra nó trong tài liệu dựa trên hệ điều hành của bạn
Trong hướng dẫn này, bạn sẽ tìm hiểu cách trích xuất một số siêu dữ liệu hữu ích trong hình ảnh bằng thư viện Gối trong Python
Các thiết bị như máy ảnh kỹ thuật số, điện thoại thông minh và máy quét sử dụng tiêu chuẩn EXIF để lưu hình ảnh hoặc tệp âm thanh. Tiêu chuẩn này chứa nhiều thẻ hữu ích để trích xuất có thể hữu ích cho điều tra pháp y, chẳng hạn như kiểu dáng, kiểu thiết bị, ngày và giờ chính xác tạo hình ảnh và thậm chí cả thông tin GPS trên một số thiết bị
Xin lưu ý rằng có các công cụ miễn phí để trích xuất siêu dữ liệu như ImageMagick hoặc ExifTool trên Linux, mục tiêu của hướng dẫn này là trích xuất siêu dữ liệu bằng ngôn ngữ lập trình Python
Để bắt đầu, bạn cần cài đặt thư viện Gối
pip3 install PillowMở một tệp Python mới và làm theo
from PIL import Imagefrom PIL.ExifTags import TAGS
Bây giờ điều này sẽ chỉ hoạt động trên các tệp hình ảnh JPEG, lấy bất kỳ hình ảnh nào bạn đã chụp và kiểm tra nó cho hướng dẫn này
# path to the image or videoimagename = "image.jpg"# read the image data using PIL
image = Image.open(imagename)
Chúng tôi đã tải hình ảnh bằng phương pháp Image.open(). Trước khi gọi hàm getexif(), thư viện Gối có một số thuộc tính trên đối tượng hình ảnh, hãy in chúng ra
# extract other basic metadatainfo_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}")
Bây giờ, hãy gọi phương thức getexif() trên hình ảnh để trả về siêu dữ liệu hình ảnh
# extract EXIF dataexifdata = image.getexif()
Vấn đề với biến from PIL import Image
from PIL.ExifTags import TAGS0 bây giờ là tên trường chỉ là ID, không phải tên trường mà con người có thể đọc được, đó là lý do tại sao chúng ta sẽ cần từ điển TAGS từ PIL. Mô-đun ExifTags ánh xạ từng ID thẻ thành văn bản mà con người có thể đọc được
Đối với mỗi bức ảnh, có nhiều thứ hơn là bắt mắt. Hình ảnh được chụp bằng máy ảnh kỹ thuật số và điện thoại thông minh chứa thông tin phong phú (được gọi là siêu dữ liệu) ngoài các pixel có thể nhìn thấy
Siêu dữ liệu này có thể hữu ích trong nhiều trường hợp kinh doanh. Chẳng hạn, các hệ thống phát hiện gian lận cho yêu cầu bảo hiểm phân tích siêu dữ liệu của các bức ảnh đã gửi để kiểm tra xem người yêu cầu có chụp chúng trước khi xảy ra tai nạn hay không.
Trong bài viết này, chúng tôi khám phá cách sử dụng thư viện exif để đọc và chỉnh sửa siêu dữ liệu của hình ảnh kỹ thuật số
nội dung
(1)
(2)
(3)
(4)
(5)
Vui lòng kiểm tra tất cả các mã trong repo GitHub đi kèm
Siêu dữ liệu và Exif là gì?
Siêu dữ liệu đề cập đến tập hợp dữ liệu mô tả dữ liệu và bạn có thể coi nó là dữ liệu về dữ liệu. Siêu dữ liệu của ảnh bao gồm các thông tin như kiểu máy ảnh và ngày chụp
Siêu dữ liệu này được lưu trữ ở Exif (Định dạng tệp hình ảnh có thể trao đổi), một tiêu chuẩn định dạng cho các loại phương tiện khác nhau (e. g. hình ảnh, video, âm thanh) được chụp bởi các thiết bị như máy ảnh kỹ thuật số và điện thoại thông minh
Thư viện Python được sử dụng trong dự án này là exif, trùng tên với định dạng Exif
Đọc siêu dữ liệu hình ảnh
Chúng tôi bắt đầu bằng cách cài đặt exif với lệnh này
pip install exifĐối với bản demo này, đây là bức ảnh mà chúng tôi sẽ thực hiện
Hình ảnh của tác giả
Chúng tôi khởi tạo một lớp exif Image bằng cách đọc hình ảnh ở định dạng nhị phân trước khi kiểm tra xem nó có chứa bất kỳ siêu dữ liệu nào không. Nếu vậy, phương thức has_exif sẽ trả về True
Các ảnh khác nhau có các thuộc tính siêu dữ liệu khác nhau (còn gọi là thẻ Exif) do các thiết bị khác nhau được sử dụng để chụp chúng. Chúng ta có thể xem các thuộc tính hiện có cho một hình ảnh bằng phương pháp list_all()
Một tập hợp con của danh sách thuộc tính. Hình ảnh của tác giả
Để đọc giá trị của các thuộc tính cụ thể, chúng ta có thể sử dụng phương thức get(). Trong khi có các phương pháp khác, tôi thích get() hơn vì nó xử lý khéo léo các trường hợp thuộc tính không tồn tại bằng cách trả về Không (thay vì đưa ra lỗi)
Đầu ra của phương thức get(). Hình ảnh của tác giả
P. S. Kiểm tra Image_Metadata_Extraction_EXIF. sổ ghi chép ipynb cho chức năng trích xuất tất cả siêu dữ liệu của hình ảnh vào Khung dữ liệu Pandas
Ảnh của Mylene Tremoyet trên Bapt
Sửa đổi siêu dữ liệu hình ảnh
Bên cạnh việc đọc siêu dữ liệu, chúng ta có thể thực hiện một loạt các sửa đổi như thêm, cập nhật và xóa các thuộc tính
(i) Thêm siêu dữ liệu
Các thuộc tính mới hiện không có có thể được thêm vào để làm phong phú thêm siêu dữ liệu
Một điều quan trọng cần lưu ý là thuộc tính được thêm vào phải là thẻ EXIF được công nhận. Nếu không, việc bổ sung sẽ không diễn ra. Bạn có thể tìm thấy danh sách đầy đủ các thuộc tính hình ảnh được công nhận
Ví dụ: chúng ta có thể thêm thuộc tính bản quyền được công nhận. Sau khi gán một giá trị (Kenneth Leung 2021) cho thuộc tính bản quyền, phương thức get() sẽ cung cấp cho chúng ta giá trị mới này thay vì Không có
Tham gia Medium với liên kết giới thiệu của tôi - Kenneth Leung
Truy cập tất cả nội dung của tôi (và tất cả các bài báo trên Phương tiện) với giá chỉ bằng một ly cà phê
kennethleungty. trung bình. com
(ii) Cập nhật siêu dữ liệu
Chúng tôi cũng có thể cập nhật các giá trị hiện có của các thuộc tính siêu dữ liệu hình ảnh
Đầu ra sau khi cập nhật siêu dữ liệu. Hình ảnh của tác giả
(iii) Xóa siêu dữ liệu
Nếu chúng tôi muốn xóa các thuộc tính cụ thể thay vì cập nhật chúng, chúng tôi có thể làm như vậy với .delete()
Đầu ra sau khi xóa siêu dữ liệu. Hình ảnh của tác giả
Lưu siêu dữ liệu hình ảnh đã sửa đổi
Sau tất cả các sửa đổi, bước cuối cùng là lưu hình ảnh với siêu dữ liệu đã sửa đổi thành một tệp mới
Với cách trên, chúng tôi đã lưu hình ảnh đã sửa đổi bằng tên tệp có tiền tố là 'modified_' để hình ảnh gốc không bị ghi đè
gói nó lên
- Có nhiều thuộc tính thú vị khác để khám phá và bạn có thể tìm thêm chi tiết trên trang tài liệu exif
- Những gì chúng tôi đã làm cho đến nay là xử lý một hình ảnh duy nhất. Giá trị của gói exif được hiện thực hóa thông qua xử lý hàng loạt, trong đó việc trích xuất và sửa đổi siêu dữ liệu được thực hiện trên một tập hợp lớn các hình ảnh. Để xem quá trình xử lý hàng loạt đang hoạt động, hãy xem tập lệnh batch_process_metadata.py trong repo GitHub
- Một điều quan trọng cần lưu ý là sao lưu ảnh của bạn trước khi sử dụng thư viện này để tránh mất dữ liệu bất ngờ
Tôi hoan nghênh bạn tham gia cùng tôi trên hành trình học tập khoa học dữ liệu. Theo dõi trang Phương tiện này và xem GitHub của tôi để cập nhật nội dung khoa học dữ liệu thú vị hơn. Trong khi đó, hãy vui vẻ đọc và sửa đổi siêu dữ liệu hình ảnh