mao linux树莓派,树莓派定制为无线便携监控摄像头

Urna Semper

Instructor’s Name

June 14, 2014

简述:

将树莓派定制为无线便携监控摄像头,插上USB摄像头,插上USB wifi,然后将摄像头的数据编码,将编码后的数据推流至流媒体服务器,其他人就可以通过流媒体服务器可以观看到树莓派摄像头采集到的数据。

内容:

将树莓派供电,插上HDMI,接上显示器,就是一个miniPC,其实这个是很正常的,但是Raspberry Pi这个东西毕竟是个简单的miniPC系统,支持的设备还是挺少的,加上USB摄像头比较老了,是好几年前买的,所以不大好用,lsusb可以看到usb可以识别到,但是没有对应的驱动

ls /dev/没有看到video0,lsmod也没有看到v4l之类的信息;而USB wifi,可以识别,树莓派是去年买的,可能kernel相对来有点老了,所以没有支持上,就下载了pidora,装了一个新的。因为Raspberry Pi是SD Card加载系统的,所以,安装系统还是比较方便的,将image通过dd到SDCard里面就可以了。装上以后,USB WIFI就可以被识别出来了,但是USB Camera还是识别不出来,这样的话就要重新驱动了;

点击(此处)折叠或打开

[root@pidora ~]# lsusb

Bus 001 Device 008: ID 046d:c31c Logitech, Inc. Keyboard K120 for Business

Bus 001 Device 010: ID 046d:c05a Logitech, Inc. M90/M100 Optical Mouse

Bus 001 Device 006: ID 0c45:62c0 Microdia Sonix USB 2.0 Camera

Bus 001 Device 005: ID 1a40:0101 Terminus Technology Inc. Hub

Bus 001 Device 004: ID 0bda:8178 Realtek Semiconductor Corp. RTL8192CU 802.11n WLAN Adapter

Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter

Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. SMC9512/9514 USB Hub

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

通过这个信息可以看到两个相关的USB信息,一个是USB摄像头

点击(此处)折叠或打开

Bus 001 Device 006: ID 0c45:62c0 Microdia Sonix USB 2.0 Camera

另外一个是USB WIFI

点击(此处)折叠或打开

Bus 001 Device 004: ID 0bda:8178 Realtek Semiconductor Corp. RTL8192CU 802.11n WLAN Adapter

可以看到USB摄像头是Microdia Sonix USB 2.0 Camera

这个设备的驱动在Linux-2.6的时候就已经有了,但是Pidora默认是不支持的,所以需要自己重新去编译LinuxKernel,定制一下,支持 RTL8192CU 和Sonix Camera就可以了,然后做成rpm,通过rpm安装:

点击(此处)折叠或打开

rpm -Uvh kernelxxxxxxxxx.rpm

安装好以后,就可以看到boot下面的信息是这样的

点击(此处)折叠或打开

[root@pidora ~]# ls /boot

boot.scr config.txt config.txt.pal grub start.elf

bootcode.bin config.txt.hdmi_nooverscan config.txt.pal_brazil kernel-3.12.17-2.20140415git1782035.rpfr20.img start.elf.desc

cmdline.txt config.txt.hdmi_overscan fixup.dat kernel-3.12.20-1.20140521git7bd46e7.rpfr20.img start_cd.elf

config-3.12.17-2.20140415git1782035.rpfr20 config.txt.ntsc_japan fixup_cd.dat kernel.img start_x.elf

config-3.12.20-1.20140521git7bd46e7.rpfr20 config.txt.ntsc_northamerica fixup_x.dat lost+found

然后重启Raspberry Pi,就会发现,/dev下面出现了/video0这个设备驱动文件:

点击(此处)折叠或打开

[root@pidora ~]# ls /dev/vide*

/dev/video0

这个摄像头去动起来了,那么接下来怎么采集视频数据呢。

本文来自bbs.chinaffmpeg.com 孙悟空所写

通过ffmpeg即可,在Raspberry Pi下面安装ffmpeg,其实Raspberry Pi方便的地方就是他是个miniPC,非常方便,将PC下编译ffmpeg的时候需要的源码包传到Raspberry Pi上即可,其他步骤和PC一样;

然后采集摄像头数据:

5bd14018f480943549be9d688c412da4.png

因为camera在Linux下面一般是V4L,也就是video4linux或者video4linux2,而ffmeg可以支持这个,那么就可以看到如上图所示;发现usb camera可以知道一些参数,视频是Rawdata,yuy2的数据,分辨率是640x480;

然后可以通过ffmpeg去进行编码,和操作本地文件一样;

点击(此处)折叠或打开

ffmpeg -r 30 -f video4linux2 -i /dev/video0 -vcodec libx264 -r:v 25 -b:v 2000k -pix_fmt yuv420p -preset ultrafast -s 640x480 -f flv rtmp://192.168.1.194/chinaffmpeg/sunwukong

编码速度刚刚好,可以推流。

rtmp服务器可以使用nginx-rtmp,由于树莓派是USB供电,那么可以使用充电宝,就可以带走了

下面看一下效果图

730d4683bbcc09a9389f4a49d6928b32.png

83027ed0478a5d553fb290fb51d36329.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,对于将List<Map<String,String>>转换为List<RowRenderData>,你可以参考以下代码实现: ``` import cn.afterturn.easypoi.word.WordExportUtil; import cn.afterturn.easypoi.word.entity.WordImageEntity; import cn.afterturn.easypoi.word.entity.table.*; import org.apache.poi.xwpf.usermodel.XWPFDocument; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; import java.util.Map; public class ListConverter { public static List<RowRenderData> convert(List<Map<String, String>> list) { List<RowRenderData> rowRenderDataList = new ArrayList<>(); for (Map<String, String> map : list) { RowRenderData rowRenderData = new RowRenderData(); List<TableCellRenderData> tableCellRenderDataList = new ArrayList<>(); for (String key : map.keySet()) { String value = map.get(key); TableCellRenderData tableCellRenderData = new TableCellRenderData(value); tableCellRenderDataList.add(tableCellRenderData); } rowRenderData.setRowData(tableCellRenderDataList); rowRenderDataList.add(rowRenderData); } return rowRenderDataList; } public static void main(String[] args) throws Exception { List<Map<String, String>> list = new ArrayList<>(); Map<String, String> map1 = Map.of("name", "张三", "age", "20"); Map<String, String> map2 = Map.of("name", "李四", "age", "25"); Map<String, String> map3 = Map.of("name", "王五", "age", "30"); list.add(map1); list.add(map2); list.add(map3); List<RowRenderData> rowRenderDataList = convert(list); File templateFile = new File("template.docx"); FileInputStream in = new FileInputStream(templateFile); XWPFDocument document = new XWPFDocument(in); Map<String, Object> map = Map.of("list", rowRenderDataList); WordExportUtil.exportWord07(document, map); FileOutputStream out = new FileOutputStream("output.docx"); document.write(out); out.close(); in.close(); } } ``` 上面的代码中,我们首先定义一个convert()方法,该方法输入一个List<Map<String,String>>类型的列表,输出一个List<RowRenderData>类型的列表。在convert()方法中,我们遍历输入的列表,对于每个Map对象,我们将其转换为一个RowRenderData对象,再将该对象添加到输出列表中。 转换时,我们需要遍历Map对象中的每个键值对,对于每个键值对,我们将其值包装成一个TableCellRenderData对象,再将该对象添加到RowRenderData对象的列表中。 最后,我们在main()方法中定义一个List<Map<String,String>>类型的列表,为该列表添加了三个元素,并且演示了如何将该列表转换为List<RowRenderData>类型的列表,并将它写入到Word文档中。在实际使用中,你需要修改模板文件名、数据源以及生成文件名等相关参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值