【摘要】 介绍curl调用网络接口获取天气预报,查看摄像头设备接口,编译网页监控开源库,在网页上查看摄像头图像。
任务1:使用的网络服务器接口 c语言:面向过程 、 面向对象
1. 车牌号识别
2. 二维码生成
3. 获取北京时间
1. 调用网络的接口的方式: (天气预报)
curl http://api.k780.com:88/?app=weather.future'&'weaid=南昌
'&&'appkey=10003'&'sign=b59bc3ef6191eb9f747dd4e83c99f2a4'&'format=json >123.txt
注意: &是特殊的符号,需要使用单引号或者双引号括起来。
curl: 命令行的浏览器。
2. 调用二维码生成的接口
curl http://api.k780.com:88/?app=qr.get'&'data=www.wanbangee.com'&'level=l'&'size=6 >123.png
作业:
1. 天气预报查询
查询的格式: ./app
2. 获取北京标准时间,显示出来
3. 查询手机号码归属地
4. 二维码生成创建 运行格式: ./app
生成之后直接显示在屏幕上。可以使用eog命令
5. 车牌号的识别
6. 调用百度地图api接口 ,模拟实现导航的效果。
(1) eog命令图片浏览器
(2) 闹钟信号一秒钟中断一次
(3) 实时改变经纬度的参数
7. 分析cjson源代码,参考cjson源码改进数据解析方式。
# gcc cjson.c cjson.h test.c -lm //编译的方式
使用cjson提供的函数去解析天气预报、北京时间这些json格式的数据。
json语法规则:
1. 大括号{}表示对象
2. 双引号表示的字符串
3. 冒号后面保存的是数据值,前面表示数据值的名称
4. 中括号[]表示数组
5. 数据之间使用逗号隔开
编译cjson库的方式: # gcc app.c cjson.c -lm
cjson分析
//核心结构体
typedef struct cjson {
struct cjson *next,*prev;
struct cjson *child;
int type; //保存的数据的类型
char *valuestring; //字符串类型的值 if type==cjson_string
int valueint; //int类型的值 if type==cjson_number
double valuedouble;//浮点类型的值
char *string; //字符串类型
} cjson;
void cjson_delete(cjson *c); //释放空间
int cjson_getarraysize(cjson *array); //获取数组大小
cjson *cjson_getarrayitem(cjson *array,int item); //获取数组每个下标内容
extern cjson *cjson_getobjectitem(cjson *object,const char *string); //获取对象的节点数据
cjson *cjson_parse(const char *value); //载入源数据,获取根对象
目前阶段和后面的学习阶段: 分析源码,看源码。
#define 预编译 typedef
1. 获取qq头像,qq名称这些功能使用脚本去写代码。
获取qq名称接口:http://r.pengyou.com/fcg-bin/cgi_get_portrait.fcg?uins=qq号码
获取qq头像接口:http://qlogo4.store.qq.com/qzone/1126626497/1126626497/100?1126626497
2. 获取百度地图的接口数据
http://api.map.baidu.com/staticimage/v2?ak=vvjkqkyqsfwlgnfg0i0sxzycddfwfykb&mcode=666666¢er=110.403874,19.914888&width=300&height=200&zoom=11
3. 获取全景地图
http://api.map.baidu.com/panorama/v2?ak=vvjkqkyqsfwlgnfg0i0sxzycddfwfykb&width=512&height=256&location=116.313393,40.04778&fov=180
4. 获取高清静态地图
http://api.map.baidu.com/staticimage/v2?ak=vvjkqkyqsfwlgnfg0i0sxzycddfwfykb&mcode=666666¢er=116.403874,39.914888&width=1024&height=512&zoom=18&scale=1
5. 出行线路规划
6. 字符串与其他格式数据之间转换
#include
int atoi(const char *nptr); //字符串转整数
#include
double atof(const char *nptr); //字符串转浮点数
#include
int sprintf(char *str, const char *format, ...); //整数转为字符串
int sscanf(const char *str, const char *format, ...); //字符串转为整数
示例1:
#include
#include
#include
#include
#include
#include
int main(int argc,char **argv)
{
char buff[100];
//整数转为字符串
sprintf(buff,%d,12345);
printf(buff=%s\n,buff);
//浮点数转为字符串
sprintf(buff,%f,12345.12345);
printf(buff=%s\n,buff);
//字符串拼接
sprintf(buff,%s加%s,123,456);
printf(buff=%s\n,buff);
return 0;
}
示例2:
#include
#include
#include
#include
#include
#include
int main(int argc,char **argv)
{
//字符串转整数
int data;
sscanf(1234,%d,&data);
printf(data=%d\n,data);
//字符串转浮点数
float dataf;
sscanf(116.403874,39.914888,%f,&dataf);
printf(dataf=%f\n,dataf);
return 0;
}
任务2:摄像头操作方式 linux、windows这些系统下很多摄像头都是免驱(uvc)。
v4l2 :免驱摄像头框架----一堆结构体。
linux下开发摄像头的不同角度问题:(嵌入式开发)
1. 上层软件系统开发(系统编程),控制驱动提供的接口使用摄像头。
2. 底层硬件系统开发(驱动编程),直接控制摄像头采集数据。
摄像头功能:将采集到的图像数据转为二进制数据返回。
驱动的代码集成在操作系统里。
在操作系统里使用摄像头步骤:学习接口函数的调用。
fread(); read();
linux下是一切设备皆文件: 摄像头、网卡、声卡、鼠标、键盘………………….
linux下设备文件存放的位置: /dev目录下。
在虚拟机跑linux,使用外设设备都需要单独挂载才可以使用。
挂载摄像头:
查看摄像头的设备节点:
[root@wbyq /]# ls /dev/video*
/dev/video0 /dev/video1
远程网页视频监控示例
libjpeg-turbo-1.2.1.tar.gz : 将图片数据可以压缩成jpeg数据流。jpg图片。
mjpg-streamer-r63.tar.gz : 采集摄像头的数据,进行处理。
一张240*320的24位色bmp图片大小: 240*320*3
第一步:编译libjpeg-turbo
1. 解压:libjpeg-turbo-1.2.1.tar.gz
2. 生成makefile(如果报错,就安装报错提示安装包):./configure
3. 编译安装:make && make install
4. 将生成lib和include目录下的文件拷贝到/usr目录下的对应文件夹
第二步:编译mjpg-streamer-r63
1.直接make进行编译
2.运行程序:./mjpg_streamer -i /work/mjpeg/mjpg-streamer-r63/input_uvc.so -f 10 -r 800*480 -y -o /work/mjpeg/mjpg-streamer-r63/output_http.so -w www
注意: 可以使用电脑自带的摄像头。在虚拟机的右下角进行将windows系统的摄像头挂载到linux系统
3. 在浏览器里输入地址进行查看摄像头:
例如:192.168.11.123:8080
作业:
1. 将远程摄像头监控的代码编译运行实现效果。
(1) 修改端口号。 8080不能作为公网的端口访问。
(2) 修改线程数量。
(3) 分析下线程的函数实现原理。
(4) 使用花生壳软件实现公网监控
2. 学习摄像头的使用
摄像头实现拍照源程序流程:(50%程序学过的)
1. 打开摄像头的设备文件 open(“/dev/xxx”);
2. 获取摄像头参数。判断摄像头是否支持一些特有的操作。read
3. 配置摄像头的参数。(1) 输出的源数据格式rgb888 (2) 输出的图像尺寸
rgb888:数字数据格式
其他格式: yuv 模拟数据格式
4. 判断摄像头的参数是否设置成功。
5. 读取摄像头的数据。 队列的形式。
6. 将读取的yuv格式数据转为rgb格式
7. 将rgb格式数据编码为bmp格式的图片存放到电脑上
扩展练习:制作贪吃蛇游戏。
AI技术产业化谁可以脱颖而出
工业互联网企业正以朝气之姿,向世界展示中国发展的新实力
学习各类仪表的选型,非常全面!
探讨Waymo与Uber自动驾驶专利大战
OPPO Enco联手身心健康应用潮汐,以海洋白噪音助力健康睡眠
Linux开发_curl调用网络接口
雷达数字化会带来激动人心的前景?
气动调节阀常见故障分析与解决方案
“芯”力量跑步向西北
数字化已经进入木材建筑领域 未来建筑机器人肯定会更加成熟
安捷伦推出Agilent x1149边界扫描分析仪
近期MP3/MP4固件最新升级(高清格式再突破 )
特斯拉寻找新款4D雷达升级传感系统
labview读取串口数据
WiFi6路由器评测,小米R3600为最佳
本周半导体:锤子科技已基本停止手机研发;LG正面驳斥三星
机器视觉橡胶密封圈检测解决方案
对“Fork”做一个技术方面的简介
如何创建DMX灯具
无源滤波和有源滤波讲解