五天完成项目-《基于Linux环境下的Cortex A53的手势识别智能家居》-第五天
视频监控和家电控制
- 《智能家居系列》
- 一、视频监控基础
- 1、摄像头
- 2、v4l2
- 3、Linux下的摄像头使用流程
- 4、烧写程序到开发板
- 5、运行程序 (先插上摄像头)
- 二、视频监控功能
- 1、监控源码分析
- 2、图片抓拍功能实现
- 3、抓拍图片的保存
- 4、浏览功能的实现
- 三、视频监控代码分析
- 1、实时监控
- 2、抓拍图片
- 3、浏览
- 四、家电控制
- 1、家电控制内容
- 2、LED控制方法
- 3、Linux下驱动的使用
- 三、整合项目
《智能家居系列》
五天完成项目-《基于Linux环境下的Cortex A53的手势识别智能家居》-前言
五天完成项目-《基于Linux环境下的Cortex A53的手势识别智能家居》-第一天
五天完成项目-《基于Linux环境下的Cortex A53的手势识别智能家居》-第二天
五天完成项目-《基于Linux环境下的Cortex A53的手势识别智能家居》-第三天
五天完成项目-《基于Linux环境下的Cortex A53的手势识别智能家居》-第四天
五天完成项目-《基于Linux环境下的Cortex A53的手势识别智能家居》-第五天
一、视频监控基础
1、摄像头
USB摄像头,支持YUYV格式。
YUV , JPG, RGB
2、v4l2
V4l2 : video for linux 2 Linux下对于音视频采集设备提供的函数接口。
3、Linux下的摄像头使用流程
1)把camera1_yuyv格式 文件夹放在共享文件夹
2)进入这个文件夹
3)编译源码 ==> make
4、烧写程序到开发板
5、运行程序 (先插上摄像头)
==》chmod 777 yuyv
==》./yuyv
二、视频监控功能
1、监控源码分析
lcd_draw_jpg(unsigned int x,unsigned int y,const char *pjpg_path,char *pjpg_buf,unsigned int jpg_buf_size,unsigned int jpg_half)
==》x : jpeg图片显示位置的起点横坐标
==》y : jpeg图片显示位置的起点纵坐标
==》pjpg_path : 显示的图片的名字
==》pjpg_buf : 显示的jpeg图片数据地址
==》jpg_buf_size : jpeg图片数据的大小
==》 jpg_half : 以四分之一大小 0:原图显示; 1:四分之一大小显示
2、图片抓拍功能实现
1)获取触摸屏点击的位置信息 -->判断是否点击抓拍
2)如果点击抓拍,把当前这一帧画面保存下来
Linux下的多线程编程:
软件可以”一心多用”。
在程序中创建多个线程去执行不同的工作。
进程 : 正在内存运行的程序
线程 : 进程的一部分,进程中专门工作的一部分,一个进程至少要有一个线程。
==》操作系统 : 一家公司
==》进程 : 一个部门
==》线程 : 部门里的员工
==》创建线程去做实时监控的工作,主线程就获取点击的坐标,判断点击的位置。
==》 创建线程 pthread_create()
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
Compile and link with -pthread.
==> thread : 存放线程ID
==> attr : 线程属性
==> start_routine : 线程执行函数
==> arg : 第三个参数的参数
3、抓拍图片的保存
在进行图片抓拍时,每次抓拍的图片不能都保存在同一个文件下,那么如何保存抓拍的文件,让抓拍的文件能够各自独立存储呢?那么就需要每次抓拍时提供不一样的图片文件名。
目前在各种图片抓拍设备进行图片保存时,通常采用的方法都是以 日期-时间命名。
例如 “2021-6-2-14:03:25.jpg” 。
1)Linux下查看当前系统时间 ==> date
==> 修改系统时间 : date -s “2021-6-2 14:13:45”
2)获取系统时间函数
#include <sys/time.h>
int gettimeofday(struct timeval *tv, struct timezone *tz);
==》tv : 时间结构体的地址
==》tz : NULL
struct timeval {
time_t tv_sec; /* seconds / //当前时间的秒数
suseconds_t tv_usec; / microseconds */ //当前时间的微秒数
};
==》例子:设计程序,获取当前的系统时间
时间格式转换: 把十进制的数字转换成 xxx年xxx月xxx日xx:xx:xx
==> gmtime_r()
struct tm *gmtime_r(const time_t *timep, struct tm *result);
1,在你的工作目录 (yuyv程序所在的位置) 下新建一个 Camera_pic 目录
2,修改yuyv.c --> 实现图片抓拍功能
4、浏览功能的实现
抓拍的图片如何进行浏览?
1)设计一种机制 --》打开/关闭 实时监控的显示
2)点击浏览时,把监控关闭,进入浏览界面
三、视频监控代码分析
1、实时监控
==> 摄像头循环采集视频画面,进行转码,显示在LCD上。
2、抓拍图片
==> 创建线程去实现实时监控功能,主线程获取用户点击的触摸屏坐标信息,判断点击的位置,进行抓拍图片,抓拍图片:将当前这一帧画面保存到文件。
3、浏览
==> 对抓拍的图片进行浏览。
==> 目录检索 : 获取一个目录下的文件信息
目录检索: opendir(); readdir(); closedir(); ==>man手册第3本手册
1)opendir() 打开目录
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);
==> name :需要检索的目录的名字
返回值:DIR * 目录流指针 (目录的文件描述符)
2)readdir() 读取目录下的文件信息 -->每次读取一个
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
==》dirp :目录流指针 (opendir的返回值)
返回值:文件结构体指针,失败返回NULL
On Linux, the dirent structure is defined as follows:
struct dirent {ino_t d_ino; /* inode number */off_t d_off; /* not an offset; see NOTES */unsigned short d_reclen; /* length of this record */unsigned char d_type; /* type of file; not supportedby all filesystem types */char d_name[256]; /* filename */};
==> linux下的文件名最多不能超过255个字符
==》例子:设计程序,读取目录 Camera_pic 目录下的文件信息并且打印
四、家电控制
1、家电控制内容
传统的家电控制包括:灯光,空调,热水器等家用电器,目前智能家居通常会添加窗帘,窗户,地暖等设备的开关。
==> 使用GEC6818上的LED模拟室内灯光,实现灯光的控制。
==> 使用蜂鸣器实现报警功能。
2、LED控制方法
在系统级的开发板上实现设备的控制使用与逻辑不同,一般需要使用专门的控制软件 --> 驱动
==> led控制 ==> LED驱动
3、Linux下驱动的使用
1)分析驱动源码
2)LED驱动安装使用
·下载 led.ko 到开发板
·安装驱动
==> chmod 777 led.ko
==> insmod led.ko
如果出现这个,那就说明开发板中存在这个驱动。 ==> Linux查看系统的驱动: lsmod
==> 卸载原本的LED驱动 ==> rmmod led
·测试程序
==> led_test.c ==> arm-linux-gcc led_test.c -o led_test
==> 烧写led_test 到开发板 chmod 777 led_test ./led_test
三、整合项目
五天完成项目-《基于Linux环境下的Cortex A53的手势识别智能家居》-第五天相关推荐
- 五天完成项目-《基于Linux环境下的Cortex A53的手势识别智能家居》-第四天
音视频播放功能 <智能家居系列> 一.音频播放 1.Linux下的音频播放实现 2.实现步骤 二.语音播报信息 三.视频播放 1.素材准备 2.实现步骤 四.项目框架搭建 <智能家居 ...
- linux使用gcc实现扫雷,基于linux环境下扫雷应用程序
基于linux环境下扫雷应用程序 (16页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 <网络操作系统>报告(应用程序开发) ...
- 基于linux环境pdf,基于Linux环境下的Snif论r设计与芸}瑰.PDF
基于Linux环境下的Snif论r设计与芸}瑰 基于Linux环境下的Snif论r设计与芸}瑰 李刍每莹周姆 铬编程技I:,夏‰骼r实现方法进行了棵耐 7IP.w.h 关键词嗅挺器,滑动窗口,'r(: ...
- linux系统连接校园无线网络,基于Linux环境下校园无线网络安全平台的设计与实现...
摘要: 无线网络具有灵活性和移动性,安装便捷,联网成本低,可以随时随地上网.校园网无线功能可以提供日常互联网连接外,还能够将校内的精品课资源,网络电子学习资源,OA系统的使用等都转移到移动设备上实现. ...
- Linux上运行扫雷,基于linux环境下扫雷应用程序.docx
总俶斜技誓魄 <网络操作糸统>掖告 (应用程序开发丿 题 目: 基于I inux平台GCC环境下扫雷应用程 序开发 姓 名: 李磊 学 院: 理学院 专 业: 网络工程 班 级: 092 ...
- 基于Linux环境下MySQL数据库的建立
文章目录 前言 数据库基本概念 数据组成 数据(DATA) 表 数据库 数据库类型 关系型数据库(SQL) 非关系型数据库(NoSQL) 时序型数据库(TSDB) MySQL数据库 概述 日志 安装数 ...
- springboot启动命令linux,springboot项目命linux环境下命令启动
测试环境:dev nohup java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.su ...
- Linux环境下——C语言聊天室项目
由于使用了多线程操作,客户端进入程序后请先随便注册一次用户后再进行使用. 本程序默认第一个用户即ID为1的用户为超级管理员. 由于线程阻塞,最后的踢人操作有阻塞,需要在被踢出在线链表后手动下线. 看了 ...
- Linux配置gdal变量环境,基于GDAL库的LINUX环境下的FY-3D和FY-4A遥感数据处理
王燕婷 摘要 基于GDAL库的功能和其开源.可对栅格空间数据操作的特点,将GDAL与C++语言的完美结合,可极大得发挥其在开发遥感图像处理软件中的优势,并可跨平台应用于不同操作系统下的遥感图像数据处理 ...
最新文章
- Cefsharp生成的项目在自己电脑上能打开,其他电脑上不行,提示找不到指定文件cefsharp.core.dll
- python是什么语言开发的-少儿编程有什么好处?儿童编程课程学习Python的4大原因...
- VS2008 Tips #004 – 您可以通过“浏览方式…”添加浏览器到 Visual Web Developer
- 中国金刚石线行业“十四五规划”与未来产销需求预测报告2021-2027年
- Codeup-问题 A: 最长公共子序列
- hive olap 数据仓库_数据仓库系统的实现和使用(含OLAP重点讲解)
- 深入kubernetes之Pod——一pod多容器
- 中国碳酸镁铝行业市场供需与战略研究报告
- 测量不确定度matlab,基于MATLAB用蒙特卡洛法评估测量不确定度简介,目录书摘
- 常用numpy模块用法总结
- hashmap的负载因子为什么是0.75而不是其他值或者1
- OFFICE技术讲座:T2B-NE/L2R-WN部分中文标点需要旋转
- 标记集合 java编译_深入理解Java虚拟机读书笔记-java编译期和运行期优化
- SAP MM物料管理系统功能详解
- JavaScript网页特效5则
- 玩转oj之1003题(地球人口承载力估计)
- 同步电路设计中CLOCK SKEW的分析
- Eterm协议中文汉字编码
- 信息检索——BM25算法实现(自己写)
- matlab坐标轴标注和特殊字体…