玩转LiteOS组件:Openexif
摘要:OpenExif是用于访问Exif格式的JPEG图像文件的面向对象的库。
本文分享自华为云社区《LiteOS组件尝鲜-玩转Openexif》,作者: W922 。
基本信息
Exif:Exchangeable image File Format。用于记录数码照片的属性信息和拍摄数据,例如厂商、分辨率、ISO、白平衡、饱和度、锐度等。然后将这些信息按照JPEG文件标准放在图像文件头部。
Exif实际上也是JPEG文件的一种,遵循JPEG标准,只是在头文件中增加了有关拍摄信息的内容和索引图。通俗来说Exif信息就是由数码相机在拍摄过程中采集一系列信息镶嵌在JPEG/TIFF文件内的一组参数。
OpenExif是用于访问Exif格式的JPEG图像文件的面向对象的库。该工具包允许在Exif文件中创建,读取和修改元数据,详情请参考Openexif。
LiteOS中提供对C++的支持,并提供Openexif Demo来演示如何使用Openexif。
目前暂时只支持以下开发板运行Openexif Demo:
- STM32F769
使能Openexif Demo
在LiteOS源码根目录下根据实际使用的开发板,拷贝tools/build/config/目录下的默认配置文件${platform}.config到根目录,并重命名为.config。
继续在LiteOS源码根目录下执行make menuconfig命令,按如下菜单路径使能C++支持和Openexif Demo。
Kernel --->
[*] Enable Extend Kernel
[*] C++ Support Demos --->
Media Demo --->
[*] Enable Openexif Demo
使能Openexif Demo后,LiteOS会去下载Openexif源码,并打入patch。
注意:
如需开启C++ thread特性,需要使能LOSCFG_LIB_CPP_EXTEND。并动态调整Task Defalut Stack Size的大小。
Kernel --->
Basic Config --->
Task --->
(4096)Task Defalut Stack Size
Lib --->
[*] Enable libc++ extend
使能LOSCFG_LIB_CPP_EXTEND后,LiteOS会去下载libstdc++源码。
保存退出后,LiteOS会从github上自动下载Openexif源代码,并从gitee上下载适配于LiteOS系统的patch包,并打入patch。 详细流程在components/download.sh文件中。
编译运行Openexif Demo
1.需要一张SD卡,并在SD卡中放入一张测试图片。
注意: 由于嵌入式设备内存有限,文件过大可能导致打开失败,大小限制在100kb以下即可。
2.修改demos/media/openexif/openexif_demo.cpp文件中DEMO_FILENAME为
放入SD卡的图片文件名。本Demo所用文件名为/fatfs/test.jpg,可根据实际自行修改。
#define DEMO_FILENAME "/fatfs/test.jpg"
3.使能Openexif Demo后,在LiteOS源码根目录下执行make clean; make
-j命令编译LiteOS工程,编译成功后会在out/${platform}/lib路径下生成openexif.a和openexif_demo.a文件,系统镜像文件为Huawei_LiteOS.bin。
注意: 选择不同开发板out路径会有不同。
4.烧录系统镜像文件到开发板中可以看到如下运行结果。
********Hello Huawei LiteOS******** LiteOS Kernel Version : 5.0.0
build data : Apr 20 2021 17:05:27 **********************************
osAppInit
cpu 0 entering scheduler
app init!
Hello, welcome to liteos demo!
Openexif demo task start to run.
file system mount success
"Exif" entries:
IFD: 0 Idx: 0
Tag# Type Count Value
282 5 1 72
283 5 1 72
296 3 1 2
531 3 1 1
34665 4 1 90
IFD: 0 Idx: 0
IFD: 34665 Idx: 0
Tag# Type Count Value
36864 7 4 [48,50,49,48]
37121 7 4 [1,2,3,0]
40960 7 4 [48,49,48,48]
40961 3 1 1
40962 4 1 0
40963 4 1 0
Openexif demo task finished. Huawei LiteOS #
可以看到Openexif Demo会去读取图片文件的元数据,并打印出来。
其他更多关于exif的信息请参考Exif。
结语
未来我们还会持续新增更多组件、开发板、架构、特性等。
感谢您的阅读,有任何问题、建议,都可以留言给我们,让我们一起进步: https://gitee.com/LiteOS/LiteOS/issues
更多学习内容,请关注IoT物联网社区
添加华为云IoT小助手微信号(hwc-iot),回复“阅读”获取更多资讯
玩转LiteOS组件:Openexif的更多相关文章
- 一起玩转玩转LiteOS组件:TinyFrame
摘要:TinyFrame是一个简单的用于解析串口(如 UART.telnet.套接字等)通信数据帧的库. 本文分享自华为云社区<LiteOS组件尝鲜-玩转TinyFrame>,作者:Lio ...
- 玩转LiteOS组件:玩转Librws
摘要:Librws是一个跨平台的websocket客户端,使用C语言编写. 本文分享自华为云社区<LiteOS组件尝鲜-玩转Librws>,作者: W922 . 本期小编为大家带来Lite ...
- 带你尝鲜LiteOS 组件EasyFlash
摘要:EasyFlash是一个开源的轻量级嵌入式闪存库. 本文分享自华为云社区<LiteOS组件尝鲜-玩转EasyFlash>,作者:Lionlace . 基本介绍 EasyFlash是一 ...
- 《微信小程序七日谈》- 第三天:玩转Page组件的生命周期
<微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 前两篇 ...
- 《微信小程序七日谈》- 第四天:页面路径最多五层?导航可以这么玩
<微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 微信小 ...
- openstack手动玩转
<一,preface Important Project Network> openstack or all most cloud env Network desgine is so m ...
- react初探(二)之父子组件通信、封装公共组件
一.前言 在组件方面react和Vue一样的,核心思想玩的就是组件,下面举两个组件常用的情景. 场景一:假如我们现在有一个页面包含表格以及多个弹框,这种时候如果将这个页面的业务代码写在一个组件中,那么 ...
- Vue.js之组件(component)
从结构上看,组件之于实例,就好比轮子之于汽车.从属性和方法来看,组件有实例的大部分方法,如果Vue实例是孙悟空,组件就好比实例的一个毫毛,变化多端却为Vue实例所用. 目录: 组件的注册 is的作用 ...
- vue - 组件的创建
组件的创建 vue的核心基础就是组件的使用,玩好了组件才能将前面学的基础更好的运用起来.组件的使用更使我们的项目解耦合.更加符合vue的设计思想MVVM. 那接下来就跟我看一下如何在一个Vue实例中使 ...
- vue.js组件(component)
简介: 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面 ...
随机推荐
- grafana 配置自定义dashboard
本文为博主原创,转载请注明出处: 1.配置数据源 配置完成后,点击Save And Test,如果配置正确,页面则显示如下: 2.配置dashboard 点击 A ...
- 标子查询优化和改写SQL案例
京华开发一哥们找我优化条报表SQL,反馈执行时间很慢需要 18s 才能出结果,安排. -- 原SQL SELECT 2 AS TYPE, to_char(a."create_time&quo ...
- Python 数据库应用教程:安装 MySQL 及使用 MySQL Connector
Python可以用于数据库应用程序. 其中最流行的数据库之一是MySQL. MySQL数据库 为了能够在本教程中尝试代码示例,您应该在计算机上安装MySQL. 您可以在 MySQL官方网站 下载MyS ...
- this.$router 与this.$route的区别
this.$router是Vue-Router的实例,需要导航到不同路由则用this.$router.push方法 this.$route为当前路由的跳转对象,包含当前路由的name.path.que ...
- 解密Prompt系列19. LLM Agent之数据分析领域的应用:Data-Copilot & InsightPilot
在之前的 LLM Agent+DB 的章节我们已经谈论过如何使用大模型接入数据库并获取数据,这一章我们聊聊大模型代理在数据分析领域的应用.数据分析主要是指在获取数据之后的数据清洗,数据处理,数据建模, ...
- python列表删除元素之del,pop()和remove()
del函数 如果知道要删除元素在列表中的位置,可以使用del语句: list_1 = ['one', 'two', 'three'] print(list_1) del list_1[0] print ...
- 一套开源、强大且美观的WPF UI控件库 - HandyControl
前言 今天给大家推荐一套开源.强大且美观的WPF UI控件库:HandyControl. WPF介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 Windows 应用.它提供了灵 ...
- 用友U8与MES系统API接口对接案例分析
企业数字化转型:轻易云数据集成平台助力 U8 ERP+MES 系统集成 为什么选择数字化转型? 领导层对企业资源规划(ERP)的深刻理解促使了数字化转型的启动. 采用精确的"N+5" ...
- ERP到底是什么?
ERP,全称企业资源计划,ERP系统主要是优化企业内部的业务流程,用信息化管控的方式进行一系列板块的管理,它可以看作是进销存系统的进阶版,主要针对供应链中下游. ERP的业务覆盖范围广,实际上它更加侧 ...
- ubuntu 20.04系统上安装teleport开源堡垒机
ubuntu 20.04安装部署teleport堡垒机 简介:Teleport是一款简单易用的开源堡垒机系统,具有小巧.易用的特点,支持 RDP/SSH/SFTP/Telnet 协议的远程连接和审计管 ...