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