微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于AT91RM9200的图像采集系统设计

基于AT91RM9200的图像采集系统设计

时间:05-21 来源:互联网 点击:

一个图像发送线程负责图像发送,程序通过建立带共享锁的4帧图像循环队列做为图像采集线程和图像发送线程进行数据交换的公共缓冲区。服务端还使用了两个socket,一个用于和服务端口绑定后侦听是否有服务请求,另外一个用于发送图像数据,主线程流程如图3所示。

程序首先设置采集图像的相关参数(如设备号、图像大小、初始化图像帧缓冲区等),然后通过函数 int init_videoIn()获取摄像头参数,设置采集图像宽度、高度、格式、采集方式等参数,并分配4帧采集图像缓存 vd->ptframe[i] =(unsigned char *) realloc (vd->ptframe[i], sizeof(struct frame_t) + (size_t) vd->framesizeIn ),再启动图像采集线程 pthread_create (w1, NULL, (void *) grab, NULL)进行图像采集;创建服务端socket,与服务端口绑定后侦听服务请求;如果有新连接进来,函数accept()返回一个新的发送 socket,并启动新的图像发送线程,pthread_create(server_th, NULL, (void *)service, new_sock); 如果采集结束或连接产生错误,调用pthread_join (w1, NULL)和close(serv_sock)关闭图像采集线程和图像发送线程,释放有关资源后退出。

图3.主程序流程

采集方式

READ

内存映射

分辨率

640×480

320×240

640×480

320×240

JPEG图像大小(KB)

32

7

32

7

图像采集时间(ms)

56

16

40

12

采集发送速度(帧/s)

15

50

22

60

表1.实验结果

使用奥尼银色天使S900摄像头分别对640×480和320×240两种分辨率用read方式和内存映射方式进行了图像采集和发送,实验结果如表1所示,应用程序采用内存映射方式图像获取的实时性较高,达到实时视频的要求。

4结束语

本文针对市场主流USB摄像头开发了驱动程序,实现了基于AT91RM9200的嵌入式图像采集和网络传输。克服了其它图像采集方案采集BMP图像数据量大和实时性差的问题,并解决了目前嵌入式Linux缺乏USB摄像头驱动程序的问题,具有集成度和性价比高、实时性好、支持多种USB摄像头和充分利用USB带宽的优点。实验表明适于高质量实时图像监控场所和智能图像监控应用,具有很好的广泛应用前景。

参考文献:

[1]ATMEL, AT91RM9200 DATA,[Z]. America, Atmel Corporation , 2003.

[2](美)科比特、鲁宾尼、哈特曼主编,LINUX设备驱动程序[M],东南大学出版社,2004

[3]周力功 主编 ,USB编程与驱动程序开发[M],北京航空航天大学,2004

[4]李侃,基于S3C2410平台与嵌入式Linux图像采集应用[J],微计算机信息,2006,第3-2期

[5]Don Anderson、Dave Dzatko 著,USB系统体系[M],中国电力出版社,2003

[6]倪继利著,LINUX 内核分析及编程[M],电子工业出版社,2005

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top