Android驱动USB摄像头
最近有个需求,要⽤android 来驱动外部usb摄像头。  港真,突然听到这么个需求,有点蒙~~于是google github转有没有类似需求的⽂章。诶嘿 还真有。 还有开源的项⽬。项⽬地址:传送门。
事前要检测摄像头是不是好⽤。这个apk能直接驱动usb摄像头。 下载链接: 传送门 。但是这个apk不到源码诶。
接下来就按照readme中的介绍开始测试demo。好久不⽤eclipse啦  就只⽤android studio(AS)做的测试
项⽬要配合NDK。ndk的配置⽅法⼤家⾃⾏搜索,本⽂就不在多说1.git或者直接下载zip 把源码搞到本地。然后⽤AS打开项⽬。划重点了。。项⽬要配合NDK。
eclipse android
这块内容。
在AS内打开项⽬后。会有多个usbCameraTest 的module。 每个mudule ⾥⾯有不同的内容,拍照、 视频、设置亮度等等。但是⼀般能拿到摄像头的预览内容 剩下的都好说了。
2.接下来 随便run个module 开始测试能不能驱动⾃⼰的测试摄像头。我选的usbCameraTest3来做的测试。
期间遇到的问题
1.ndk版本要⽤r14 的如果⽤其他版本的会有各种莫名其妙的问题。⽤r14版本就稳了。我⽤的是r14b的版本。下载地址:传送门。
2.点击页⾯上的开关button 报错 could not open camera:err=-1  。  在libuvccamera/src/main/jni/Application.mk 中 将
NDK_TOOLCHAIN_VERSION := 4.9 的注释放开后,重新编译。
3.再次点击页⾯上的开关button。页⾯还不出preview。依旧⼀⽚⿊。咋⼦个问题哦。。这时候 注意logcat⾥⾯的输出问题。
这是摄像头⽀持的分辨率,但是在java代码中默认设置的是:
这项⽬中默认的 宽⾼⽐好像和摄像头⽀持的不⼀样诶。emmm 是真的不⼀样。将项⽬中的宽⾼⽐改为摄像头⽀持的随便⼀组。再次尝试运⾏~~~~。bingo~~preview成功出来了。。撒花撒花。
等等等等~~
preview确实出来了。但是需求可不是单单纯纯的看就完事⼉了。。我们需要视频的⼆进制流来做图像处理才⾏啊。
在源码中继续翻。在AbstractUVCCameraHandler 类中 到了
曙光就在眼前了。将这ByteBuffer 转成byte[] 。 做图像的基本数据格式就满⾜了。将该⽅法改造下。放到⾃⼰需要的地⽅做个回调。需要的数据就出来了。
我是⽤着数据做⼈脸分析的。把数据放进去 图像中其实是有⼈脸的,但是分析⼈脸的接⼝返回的数据是没⼈脸。。。。。。脑袋⼀晃  发现这事⼉没这么简单。 ⼈脸识别的api 需要 ⼆进制流的灰度图(NV21格式数据)。但是摄像头出的数据是不是NV21格式的呢 在AbstractUVCCameraHandler 类中。
哇 真滴是 ~~~这设置图像输出格式真是费了⽼⿐⼦劲⼉了。在这设置成NV21 格式就好了。
在这还有个坑。第⼀家⼈脸识别sdk⽤ YUV420SP格式的输出数据能做识别。第⼆家⼈脸识别sdk就需要NV21 格式的了。在次 ⽤usb摄像头做识别的同学要注意了。
到此~~需求的基本内容算是搞定了。。。奖励⾃⼰下 晚饭加个肯德基⼿腿!!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。