视频监控和家电控制

  • 《智能家居系列》
  • 一、视频监控基础
    • 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的手势识别智能家居》-第五天相关推荐

  1. 五天完成项目-《基于Linux环境下的Cortex A53的手势识别智能家居》-第四天

    音视频播放功能 <智能家居系列> 一.音频播放 1.Linux下的音频播放实现 2.实现步骤 二.语音播报信息 三.视频播放 1.素材准备 2.实现步骤 四.项目框架搭建 <智能家居 ...

  2. linux使用gcc实现扫雷,基于linux环境下扫雷应用程序

    基于linux环境下扫雷应用程序 (16页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 <网络操作系统>报告(应用程序开发) ...

  3. 基于linux环境pdf,基于Linux环境下的Snif论r设计与芸}瑰.PDF

    基于Linux环境下的Snif论r设计与芸}瑰 基于Linux环境下的Snif论r设计与芸}瑰 李刍每莹周姆 铬编程技I:,夏‰骼r实现方法进行了棵耐 7IP.w.h 关键词嗅挺器,滑动窗口,'r(: ...

  4. linux系统连接校园无线网络,基于Linux环境下校园无线网络安全平台的设计与实现...

    摘要: 无线网络具有灵活性和移动性,安装便捷,联网成本低,可以随时随地上网.校园网无线功能可以提供日常互联网连接外,还能够将校内的精品课资源,网络电子学习资源,OA系统的使用等都转移到移动设备上实现. ...

  5. Linux上运行扫雷,基于linux环境下扫雷应用程序.docx

    总俶斜技誓魄 <网络操作糸统>掖告 (应用程序开发丿 题 目: 基于I inux平台GCC环境下扫雷应用程 序开发 姓 名: 李磊 学 院: 理学院 专 业: 网络工程 班 级: 092 ...

  6. 基于Linux环境下MySQL数据库的建立

    文章目录 前言 数据库基本概念 数据组成 数据(DATA) 表 数据库 数据库类型 关系型数据库(SQL) 非关系型数据库(NoSQL) 时序型数据库(TSDB) MySQL数据库 概述 日志 安装数 ...

  7. springboot启动命令linux,springboot项目命linux环境下命令启动

    测试环境:dev nohup java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.su ...

  8. Linux环境下——C语言聊天室项目

    由于使用了多线程操作,客户端进入程序后请先随便注册一次用户后再进行使用. 本程序默认第一个用户即ID为1的用户为超级管理员. 由于线程阻塞,最后的踢人操作有阻塞,需要在被踢出在线链表后手动下线. 看了 ...

  9. Linux配置gdal变量环境,基于GDAL库的LINUX环境下的FY-3D和FY-4A遥感数据处理

    王燕婷 摘要 基于GDAL库的功能和其开源.可对栅格空间数据操作的特点,将GDAL与C++语言的完美结合,可极大得发挥其在开发遥感图像处理软件中的优势,并可跨平台应用于不同操作系统下的遥感图像数据处理 ...

最新文章

  1. Cefsharp生成的项目在自己电脑上能打开,其他电脑上不行,提示找不到指定文件cefsharp.core.dll
  2. python是什么语言开发的-少儿编程有什么好处?儿童编程课程学习Python的4大原因...
  3. VS2008 Tips #004 – 您可以通过“浏览方式…”添加浏览器到 Visual Web Developer
  4. 中国金刚石线行业“十四五规划”与未来产销需求预测报告2021-2027年
  5. Codeup-问题 A: 最长公共子序列
  6. hive olap 数据仓库_数据仓库系统的实现和使用(含OLAP重点讲解)
  7. 深入kubernetes之Pod——一pod多容器
  8. 中国碳酸镁铝行业市场供需与战略研究报告
  9. 测量不确定度matlab,基于MATLAB用蒙特卡洛法评估测量不确定度简介,目录书摘
  10. 常用numpy模块用法总结
  11. hashmap的负载因子为什么是0.75而不是其他值或者1
  12. OFFICE技术讲座:T2B-NE/L2R-WN部分中文标点需要旋转
  13. 标记集合 java编译_深入理解Java虚拟机读书笔记-java编译期和运行期优化
  14. SAP MM物料管理系统功能详解
  15. JavaScript网页特效5则
  16. 玩转oj之1003题(地球人口承载力估计)
  17. 同步电路设计中CLOCK SKEW的分析
  18. Eterm协议中文汉字编码
  19. 信息检索——BM25算法实现(自己写)
  20. matlab坐标轴标注和特殊字体…

热门文章

  1. 解决服务化架构中数据一致性的6种方案
  2. RK px30 配置GT911 TP触摸流程记录
  3. 背景图片适应屏幕大小的一些方法
  4. HTML5绘制上海地铁线路图
  5. APiGateWay产品tyk restful接口定义
  6. java 8位 uuid_JAVA生成短8位UUID详解
  7. 我们唯一的选择其实就是向前
  8. 无形资产评估的9个必要性
  9. 智能AI电话机器人系统(各版本机器人部署)
  10. 基于Python+SQL Server2008实现(WinForm)快递管理系统【100010068】