版主: wanchong , wangyu , eepwwp , firedom |
落跑的爱丽丝
最后登陆时间:2014-07-26 23:38:30 |
因为要用到Linux,自己又不太熟悉,所以就要学习学习,本来以为像M3那样有库函数的,结果发现操作底层不是那么一回事.
首先推荐开发环境是有一台Ubuntu 32Bit的虚拟机,然后上面有编译工具,编译时候要指定CROSS_COMPILE和ARCH,一开始以为拿到源码就随便编译好了.原来不行的,然后SPI Flash实在太小了,不忍直视,只好去某东又淘了TF卡,但是还在折腾怎么运行一个Debian.
另外也没发现所谓的IDE闪退问题,不过看了看IO竟然是其他芯片扩展的,忽然对不爽的感觉.所以通过IO方法来搞没什么用途.PCIE位置竟然是,但是PCB制作我不会啊,那个接插件也好像挺贵的.
也不见得怎么搞做,不知道这个板子最后是不是要还的,我也不敢乱飞线,串口做了一条(淘宝有卖贵死),很难看的.本身做这个的,目前USB操作摄像头,人体感应东西来了拍照,并且黄灯,被挡住了红灯,没人绿灯.话说这处理器真的很热.
V4L2接口参考代码:
g_camfd = open(FILE_VIDEO, O_RDWR); //打开设备 ioctl(g_camfd, VIDIOC_QUERYCAP, &cap); //查询设备能力 ioctl(g_camfd, VIDIOC_S_FMT, &fmt) ; //设置捕获格式V4L2_PIX_FMT_YUYV,长宽像素 ioctl(g_camfd,VIDIOC_REQBUFS,&req); //设置缓冲区以及内存映射 ioctl (g_camfd, VIDIOC_QUERYBUF, &buf); mmap(NULL,buf.length,PROT_READ |PROT_WRITE, MAP_SHARED, g_camfd, buf.m.offset); ioctl(g_camfd, VIDIOC_QBUF, &buf); ioctl (g_camfd, VIDIOC_STREAMON, &type); //开始捕获
循环获取图片以及处理图片:通过VIDIOC_DQBUF取得图片缓存参数之后,用index在映射的内存里面取得数据,数据处理完毕,通过VIDIOC_QBUF将该缓存重新加入队列.
unsigned char* get_buf() { memset(&g_curbuf,0,sizeof(g_curbuf)); g_curbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; g_curbuf.memory = V4L2_MEMORY_MMAP; if(ioctl(g_camfd, VIDIOC_DQBUF, &g_curbuf) == -1) return 0; return (unsigned char*)buffers[g_curbuf.index].start; } int return_buf(void) { //重新放入缓存队列 if(ioctl(g_camfd,VIDIOC_QBUF,&g_curbuf) == -1) return -1; return 0; } //连续采集以及处理: while(1) { unsigned char* frame = get_buf(); //do something... return_buf(); }因为数据量互传东西也比较多,TF卡拿出来时候还是挺热的. 这几天用过的,觉得不错的资源: 1)http://downloadmirror.intel.com/23171/eng/LINUX_IMAGE_FOR_SD_Intel_Galileo_v0.7.5.7z 伽利略的默认系统包,没有p7zip-full感觉很不爽,但是有包管理. 2)http://downloadmirror.intel.com/23171/eng/Board_Support_Package_Sources_for_Intel_Quark_v1.0.0_full_yocto_archive.tar.bz2 无论你是构建什么系统,看了这个绝对不亏的,这可谓是SDK. 3)http://www.tonylabs.com/intel-galileo-connect-sony-playstation-eye-cam.html 国内也有一个搞摄像头的,貌似不知道怎么做. 4)OpenCV文档:http://docs.opencv.org/modules/refman.html
比较菜,大牛们看看就好. |
|
|
machinnneee
最后登陆时间:2014-07-02 12:32:54 |
好详细
|
qomoliao
最后登陆时间:2014-07-08 13:18:17 |
落跑的爱丽丝的原帖 因为要用到Linux,自己又不太熟悉,所以就要学习学习,本来以为像M3那样有库函数的,结果发现操作底层不是那么一回事.
首先推荐开发环境是有一台Ubuntu 32Bit的虚拟机,然后上面有编译工具,编译时候要指定CROSS_COMPILE和ARCH,一开始以为拿到源码就随便编译好了.原来不行的,然后SPI Flash实在太小了,不忍直视,只好去某东又淘了TF卡,但是还在折腾怎么运行一个Debian.
另外也没发现所谓的IDE闪退问题,不过看了看IO竟然是其他芯片扩展的,忽然对不爽的感觉.所以通过IO方法来搞没什么用途.PCIE位置竟然是,但是PCB制作我不会啊,那个接插件也好像挺贵的.
也不见得怎么搞做,不知道这个板子最后是不是要还的,我也不敢乱飞线,串口做了一条(淘宝有卖贵死),很难看的.本身做这个的,目前USB操作摄像头,人体感应东西来了拍照,并且黄灯,被挡住了红灯,没人绿灯.话说这处理器真的很热.
V4L2接口参考代码:
g_camfd = open(FILE_VIDEO, O_RDWR); //打开设备 ioctl(g_camfd, VIDIOC_QUERYCAP, &cap); //查询设备能力 ioctl(g_camfd, VIDIOC_S_FMT, &fmt) ; //设置捕获格式V4L2_PIX_FMT_YUYV,长宽像素 ioctl(g_camfd,VIDIOC_REQBUFS,&req); //设置缓冲区以及内存映射 ioctl (g_camfd, VIDIOC_QUERYBUF, &buf); mmap(NULL,buf.length,PROT_READ |PROT_WRITE, MAP_SHARED, g_camfd, buf.m.offset); ioctl(g_camfd, VIDIOC_QBUF, &buf); ioctl (g_camfd, VIDIOC_STREAMON, &type); //开始捕获
循环获取图片以及处理图片:通过VIDIOC_DQBUF取得图片缓存参数之后,用index在映射的内存里面取得数据,数据处理完毕,通过VIDIOC_QBUF将该缓存重新加入队列.
unsigned char* get_buf() { memset(&g_curbuf,0,sizeof(g_curbuf)); g_curbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; g_curbuf.memory = V4L2_MEMORY_MMAP; if(ioctl(g_camfd, VIDIOC_DQBUF, &g_curbuf) == -1) return 0; return (unsigned char*)buffers[g_curbuf.index].start; } int return_buf(void) { //重新放入缓存队列 if(ioctl(g_camfd,VIDIOC_QBUF,&g_curbuf) == -1) return -1; return 0; } //连续采集以及处理: while(1) { unsigned char* frame = get_buf(); //do something... return_buf(); }因为数据量互传东西也比较多,TF卡拿出来时候还是挺热的. 这几天用过的,觉得不错的资源: 1)http://downloadmirror.intel.com/23171/eng/LINUX_IMAGE_FOR_SD_Intel_Galileo_v0.7.5.7z 伽利略的默认系统包,没有p7zip-full感觉很不爽,但是有包管理. 2)http://downloadmirror.intel.com/23171/eng/Board_Support_Package_Sources_for_Intel_Quark_v1.0.0_full_yocto_archive.tar.bz2 无论你是构建什么系统,看了这个绝对不亏的,这可谓是SDK. 3)http://www.tonylabs.com/intel-galileo-connect-sony-playstation-eye-cam.html 国内也有一个搞摄像头的,貌似不知道怎么做. 4)OpenCV文档:http://docs.opencv.org/modules/refman.html
比较菜,大牛们看看就好. 请问你的是什么摄像头,可以直接识别吗? 我用一个普通摄像头,貌似没有驱动,识别不了? |
此帖由qomoliao于2014-08-23 13:18:53最后编辑
|
|
caocheng
最后登陆时间:2014-07-23 11:45:14 |
我的UVC可以识别,用MJPEG-STREAM可以流出来,在浏览器看视频 |
共4条 1/1 1 |