分类 杂糅随笔 下的文章

小写的希腊字母

小写LaTex命令
α\alpha
β\beta
γ\gamma
δ\delta
ε\varepsilon
η\eta
θ\theta
ι\iota
κ\kappa
λ\lambda
μ\mu
ν\nu
ξ\xi
ο\o
π\pi
ρ\rho
σ\sigma
τ\tau
υ\upsilon
φ\varphi
χ\chi
ψ\psi
ω\omega

大写的希腊字母

大写LaTex
Γ\Gamma
Δ\Delta
Θ\Theta
\Lambda
Ξ\Xi
\Pi
\Sigma
Υ\Upsilon
Φ\Phi
Ψ\Psi
Ω\Omega

图片版


目录

  • 软件方式
  • 在线方式
  • Python方式

    • 第一种:pyexiv2
    • 第二种:pyexif
  • 测试代码

47480-42mozxkheh1.png

软件方式

Download KUSO Exif Viewer 3.0 (softpedia.com)
https://www.softpedia.com/get/Multimedia/Graphic/Digital-Photo-Tools/KUSO-Exif-Viewer.shtml

优点:内容很全
缺点:效率低,非编程式

在线方式

EXIF信息查看器 (tuchong.com)
https://exif.tuchong.com/

优缺点同上

Python方式

两种库:

第一种:pyexiv2

安装

pip3 install pyexiv2

使用

from pyexiv2 import Image

img = Image(r'D:\DCIM\100MEDIA\DJI_0150.JPG')

img.read_xmp()
img.read_exif()

效果
22941-drh843ktqeu.png

缺点

1、缺少相机的视角FOV信息

第二种:pyexif

安装

pip3 install pyexif

还要额外安装一个工具:exiftool
Installing ExifTool
https://exiftool.org/install.html
81787-cogg5b0vhtv.png

使用

import pyexif
img = pyexif.ExifEditor('DJI_0150.JPG')
img.getDictTags()

效果
91236-k1nnzxn8ge.png

优点
1、包含了FOV等内容

测试代码

# -*- coding: utf-8 -*-
# @Time    : 2021/12/24 下午3:19
# @Author  : 小锋学长生活大爆炸
# @FileName: dji_exif.py
# @Software: PyCharm
# @Blog    : https://blog.csdn.net/sxf1061700625

import pyexif
import re


class DJIExif:
    def __init__(self):
        self.exif = None
        self.tags = None

    def setImage(self, imgPath) -> None:
        self.tags = None  # 更換圖片後需要重置緩存
        self.exif = pyexif.ExifEditor(imgPath)

    def getDictTags(self) -> dict:
        self.tags = self.exif.getDictTags()
        return self.tags

    def convertGPSToSexagesimal(self, ori) -> float:
        '''度分秒形式(40°45´42.757")轉爲六十進制(40.7618770°)'''
        pattern = re.compile(r'[0-9]\d?\.?\d*')
        matchObj = re.findall(pattern, ori)
        d, m, s = map(float, matchObj)
        return d + (m + s / 60) / 60

    def getGPS(self) -> dict:
        '''無人機的GPS坐標'''
        GPSLatitude = self.convertGPSToSexagesimal(self.tags['GPSLatitude'])
        GPSLongitude = self.convertGPSToSexagesimal(self.tags['GPSLongitude'])
        GPSLatitudeRef = self.tags['GPSLatitudeRef']
        GPSLongitudeRef = self.tags['GPSLongitudeRef']
        return {'latitude': GPSLatitude, 'longitude': GPSLongitude, 'latitudeRef': GPSLatitudeRef, 'longitudeRef': GPSLongitudeRef}

    def getFOV(self) -> float:
        '''相機的視角'''
        return float(self.tags['FOV'].split(' ')[0])

    def getRelativeAltitude(self) -> float:
        '''相對高度'''
        return float(self.tags['RelativeAltitude'])

    def getAbsoluteAltitude(self) -> float:
        '''絕對高度(海拔)'''
        return float(self.tags['AbsoluteAltitude'])

    def getGimbalDegree(self) -> dict:
        '''雲臺的3個姿態角度'''
        GimbalRollDegree = float(self.tags['GimbalRollDegree'])
        GimbalYawDegree = float(self.tags['GimbalYawDegree'])
        GimbalPitchDegree = float(self.tags['GimbalPitchDegree'])
        return {'roll': GimbalRollDegree, 'yaw': GimbalYawDegree, 'pitch': GimbalPitchDegree}

    def getDroneDegree(self) -> dict:
        '''雲臺的3個姿態角度'''
        FlightRollDegree = float(self.tags['FlightRollDegree'])
        FlightYawDegree = float(self.tags['FlightYawDegree'])
        FlightPitchDegree = float(self.tags['FlightPitchDegree'])
        return {'roll': FlightRollDegree, 'yaw': FlightYawDegree, 'pitch': FlightPitchDegree}

    def getDroneStatus(self):
        '''無人機的GPS坐標+三個角度+相機的視角+相對高度'''
        gps = self.getGPS()
        degree = self.getGimbalDegree()
        fov = self.getFOV()
        altitude = self.getRelativeAltitude()
        return {'gps': gps, 'degree': degree, 'fov': fov, 'altitude': altitude}


if __name__ == '__main__':
    img_path = '/home/sxf/Desktop/DJI_0150.JPG'
    exif = DJIExif()
    exif.setImage(img_path)
    tags = exif.getDictTags()
    print(tags)
    print(exif.getRelativeAltitude())
    print(exif.getAbsoluteAltitude())
    print(exif.getFOV())
    print(exif.getGimbalDegree())
    print(exif.getDroneDegree())
    print(exif.getGPS())
    print(exif.getDroneStatus())