Python大疆相片/航片/照片的内容信息获取:以m300为例JPG

前言:项目需要直接读取大疆无人机JPG的位置和云台信息,对网上现有代码进行注释和个人解读

JPG作为复杂的图像数据很多人都知道存在一个叫做EXIF的数据规范,
在这个数据规范中,包含了相机数据、拍摄数据、厂家信息以及GPS信息这样很多个数据信息,其中已经有GPS信息,当然,这是按照EXIF信息元的标准来写入的,查相关资料还是比较充分,整个这个部分总体的概念就是一个像二叉树又不像二叉树的链表,从前到后整体是顺序存储的读取图片的EXIF,得到EXIF标签(dict类型)

代码及备注

b = b"\x3c\x2f\x72\x64\x66\x3a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x3e"
a = b"\x3c\x72\x64\x66\x3a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x20"

aa=["\x3c\x72\x64\x66\x3a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x20"]
bb=["\x3c\x2f\x72\x64\x66\x3a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x3e"]

#xml format to save EXIF的数据规范
# aa ['<rdf:Description ']
print("aa",aa)
# bb ['</rdf:Description>']
print("bb",bb)



# rb是读取二进制文件
img = open("DJI_202207301342_003/DJI_20220730141505_0001.JPG", 'rb')
# bytearray() 方法返回一个新字节数组
data = bytearray()
#标识符,
flag = False

for i in img.readlines():
    # 按行读取二进制信息,标签成对出现
    if a in i:
        flag = True
    if flag:
        #把第i行数据复制到新数组中
        data += i
    if b in i:
        break
print("data",data)

if len(data) > 0:
    data = str(data.decode('ascii'))
    print(data)
    #filter()函数用于过滤序列,过滤掉不符合条件的元素,返回符合条件的元素组成新列表。
    #filter(function,iterable) ,function -- 判断函数。iterable -- 可迭代对象
    #python允许用lambda关键字创造匿名函数。
    # 在 lambda 关键字之后、冒号左边为参数列表,可不带参数,也可有多个参数。若有多个参数,则参数间用逗号隔开,冒号右边为 lambda 表达式的返回值。
    #left--->right
    # judge condition 'drone-dji:' in x
    lines = list(filter(lambda x: 'drone-dji:' in x, data.split("\n")))
    print("lines",lines)
    dj_data_dict = {}
    for d in lines:
        # remove 'drone-dji:'
        d = d.strip()[10:]
        # k is name
        # v is value
        k, v = d.split("=")
        print(f"{k} : {v}")
        dj_data_dict[k] = v

结果

Version : "1.4"
GpsStatus : "RTK"
AltitudeType : "RtkAlt"
GpsLatitude : "+27.137487969"
GpsLongitude : "+102.926637049"
AbsoluteAltitude : "+1546.755"
RelativeAltitude : "+684.239"
GimbalRollDegree : "+180.00"
GimbalYawDegree : "-7.00"
GimbalPitchDegree : "-89.90"
FlightRollDegree : "-0.40"
FlightYawDegree : "+173.30"
FlightPitchDegree : "+13.70"
FlightXSpeed : "-0.3"
FlightYSpeed : "0.0"
FlightZSpeed : "-0.1"
CamReverse : "0"
GimbalReverse : "0"
SelfData : ""
RtkFlag : "50"
RtkStdLon : "0.01420"
RtkStdLat : "0.01224"
RtkStdHgt : "0.07425"
RtkDiffAge : "2.00000"
SurveyingMode : "1"
UTCAtExposure : "2022-07-30T06:15:26.334846"
ShutterType : "Mechanical"
ShutterCount : "100708"
CameraSerialNumber : "3XMDJBS001Y205"
LensSerialNumber : "01JY113G039P"
DroneModel : "Matrice 300 RTK"
DroneSerialNumber : "1ZNBJAB00C00MC"

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值