Use ExifTool para extraer la información de la foto exif [bajo Windows] (información completa)

小叙:最近参与导师的地籍测量项目,无人机飞回来的照片和pos数据有点问题,博主做内业时接到把照片的经纬度、相机倾角等详细数据提取出来的任务,奈何到处找资料,头晕眼花后也没有得到满意的解决办法,最终终于在github上找到了一个炫酷的解决办法,地址与可获取信息如下:

https://github.com/CarletonArchives/ExifTool-Batch-Processor

Tabla 1. Los
Inserte la descripción de la imagen aquí
bloggers de información exif de imágenes disponibles tienen algunos problemas al configurar y depurar el entorno. En este artículo, clasificaremos y explicaremos los problemas en la depuración, y al mismo tiempo reescribiremos la parte del código de Python2 en la parte de Python3, y proporcionaremos Una solución al comando cmd.

1. Instalar y configurar el entorno Perl

Debido a que ExifTool está escrito en lenguaje Perl, es muy conveniente ejecutarlo en sistemas Mac y Linux, pero en la plataforma Windows, primero debe configurar el entorno. Aquí se recomienda descargar ActivePerl directamente desde el sitio web oficial de ActiveState, seleccione la última versión para descargar, la dirección de descarga del paquete de instalación Como sigue:

https://www.activestate.com/products/activeperl/downloads/

Una vez completada la descarga, haga doble clic para instalar, preste atención a la adición automática en la variable de entorno de la ruta de la computadora; si no hay una adición automática, debe agregar la ruta manualmente. Para el proceso de instalación detallado de Activeperl en el sistema de Windows, consulte el siguiente enlace, que no se repetirá aquí:

https://jingyan.baidu.com/article/9113f81b68e2ce2b3214c7f9.html

2. Descargue exiftool y configúrelo simplemente

1. Vaya al sitio web oficial de ExifTool y descargue el kit de herramientas.

Si usa la solución Python, descargue la Fig. 1 (1); si usa la solución cmd, puede descargar la Fig. 1 (1) / Fig. 1 (2), solo preste atención a la llamada del programa al ingresar la instrucción Solo el nombre.

https://sno.phy.queensu.ca/~phil/exiftool/
Sitio web oficial de ExifTool
https://sno.phy.queensu.ca/~phil/exiftool/exiftool_pod.html#reading_examples
Documentación de ayuda de ExifTool

Inserte la descripción de la imagen aquí
Fig. 1. Selección del kit de herramientas ExifTool

2.pl configuración del archivo

En este artículo, solo tenemos una descripción especial de la configuración del archivo en la Fig. 1 (1). Para la configuración del archivo en la Fig. 1 (2), consulte el blogger "Python Study Notes: Aplicación: Implementación de la descompresión por lotes de paquetes comprimidos (WinRAR, python, cmd) "Configuración del entorno WinRAR.exe y método de llamada, la dirección del blog es la siguiente:

https://blog.csdn.net/knkn123/article/details/83020382

Luego, comenzamos a hacer una modificación simple de ExifTool, primero descomprimimos el archivo "Image-ExifTool-11.34.tar.gz", cambia el nombre del archivo " exiftool " a " exiftool.pl " en la carpeta descomprimida , recuerda " exiftool " . pl "ruta del archivo, la ruta en la computadora del blogger es" D: \ Image-ExifTool-11.34 \ exiftool.pl ".
Inserte la descripción de la imagen aquí
Fig. 2. El resultado de la modificación simple de los archivos en la carpeta ExifTool

Tres, solución cmd

1. Comandos de la consola

win + R, ingrese cmd para abrir la consola, ingrese el siguiente código, ¡preste atención a los espacios!

perl D:\Image-Exiftool-11.34\exiftool.pl -csv -r E:\19040501\100MEDIA > E:\19040501\100MEDIA\data\meta\exif.csv

perl 【exiftool.pl路径+文件名】 -csv -r 【image文件路径】 > 【CSV文件数据路径+CSV文件名】

Presione Enter para ejecutar, el resultado se muestra en la Fig. 3, luego puede encontrar el archivo CSV de salida en la ruta correspondiente.
Inserte la descripción de la imagen aquí
Fig.3 .cmd resultado de ejecución

Archivo 2.bat

Use el archivo bat para resolver el problema de ingresar la ruta, ingrese el siguiente código en txt, guárdelo como un archivo de sufijo ".bat", póngalo en la carpeta de fotos, haga doble clic para ejecutar

perl D:\Image-Exiftool-11.34\exiftool.pl -csv -r *.jpg > exif.csv

Cuatro, solución Python

Gracias al código original compartido por Caitlin Donahue, el blogger ha realizado ciertas modificaciones al código interno para que se ejecute en el entorno Python3, y marcó los parámetros clave, la prueba personal y el funcionamiento perfecto.

import os
import sys
import platform
import errno

def usage_message():
    print("RunExifTool is a program to automatically run exiftool on a set of bags contained within a directory supplied by the user")
    print( "--------------------")
    print("Usage:")
    print("-h or --help to display this message")
    print("<python RunExifTool.py> with no arguments will prompt you for the directory you would like to analyze")
    print("<python RunExifTool.py <path to files to validate>> will run exiftool on the supplied directory")
    print("--------------------")
    print("Dependencies:")
    print("Must have exiftool installed on your computer")
    print("Must have perl version 5.004 or newer n your computer")

def main():
    #环境参数设置
    ExifTool_path = 'D:\\Image-ExifTool-11.34\\exiftool.pl' # 根据exiftool.pl文件的路径进行设置
    Image_bag_path = 'E:\\19040501\\' # 根据待处理图像的路径进行设置
    #store the original directory so we can navigate back to it at the end of the program
    original_location = os.getcwd()
    parent = ""
    exif = ""
    exifName = ""
    if len(sys.argv) == 2:
        if sys.argv[1] == "-h" or sys.argv[1] == "--help":
            usage_message()
        else:
            parent = sys.argv[1]
    if parent == "":
        #get file locations from the user
        print("Please enter the directory that holds the bags you would like to scan: ")
        #parent = input().strip()
        parent = Image_bag_path.strip()

    #check what os the user is running to account for terminal command differences
    if platform.system() == "Windows":
        exifName = "exiftool.pl"
    else:
        exifName = "exiftool"
    #make sure the directories are in the correct format
    parent = parent.strip().strip("'").strip('"')
    #navigate to the file that the user's exif program is located in
    #获取当前路径下的文件夹列表
    path_list = [x for x in os.listdir(parent)]

    for folder in path_list:
        full_folder_path = os.path.join(parent, folder).strip()
        if os.path.isdir(full_folder_path):
            print("--------------------------------------")
            print("Running exif tool on files in " + full_folder_path)
            print("--------------------------------------")
            meta_path = os.path.join(full_folder_path,"data","meta")
            print("--------------------------------------")
            print( "Making sure " + meta_path + " exists.")
            print( "--------------------------------------")
            try:
                os.makedirs(meta_path)
            #If an error is raised
            #ignore it if it is telling us the file already exists
            #raise the error if it is related to something else
            except OSError as exception:
                if exception.errno != errno.EEXIST:
                    raise
            full_folder_path = ('"' + full_folder_path + '"')
            meta_path = ('"' + meta_path + '"')
            print( "--------------------------------------")
            print( "Making xml file in " + meta_path)
            print("--------------------------------------")
            cmd = "perl {0} -csv -r {1} > {2}".format(ExifTool_path, full_folder_path.strip('"'), os.path.join(meta_path.strip('"'), "exif.xml").strip('"'))
            os.system(cmd)
            print("--------------------------------------")
            print( "Making csv file in " + meta_path)
            print( "--------------------------------------")
            cmd = "perl {0} -csv -r {1} > {2}".format(ExifTool_path, full_folder_path.strip('"'), os.path.join(meta_path.strip('"'), "exif.csv").strip('"'))
            os.system(cmd)
            print( "--------------------------------------")
            print("Run on " + full_folder_path + " complete")
            print("--------------------------------------")
    print("--------------------------------------")
    print("Run Complete")
    print("--------------------------------------")
main()
Publicado 8 artículos originales · ganó 16 · 40,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/knkn123/article/details/89178313
Recomendado
Clasificación