前言:项目需要直接读取大疆无人机JPG的位置和云台信息,对网上现有代码进行注释和个人解读
JPG作为复杂的图像数据很多人都知道存在一个叫做EXIF的数据规范,
在这个数据规范中,包含了相机数据、拍摄数据、厂家信息以及GPS信息这样很多个数据信息,其中已经有GPS信息,当然,这是按照EXIF信息元的标准来写入的,查相关资料还是比较充分,整个这个部分总体的概念就是一个像二叉树又不像二叉树的链表,从前到后整体是顺序存储的读取图片的EXIF,得到EXIF标签(dict类型)
代码及备注
b = b"x3cx2fx72x64x66x3ax44x65x73x63x72x69x70x74x69x6fx6ex3e"
a = b"x3cx72x64x66x3ax44x65x73x63x72x69x70x74x69x6fx6ex20"
aa=["x3cx72x64x66x3ax44x65x73x63x72x69x70x74x69x6fx6ex20"]
bb=["x3cx2fx72x64x66x3ax44x65x73x63x72x69x70x74x69x6fx6ex3e"]
#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"
最后
以上就是要减肥硬币最近收集整理的关于Python大疆相片/航片/照片的内容信息获取:以m300为例JPG的全部内容,更多相关Python大疆相片/航片/照片内容请搜索靠谱客的其他文章。
发表评论 取消回复