Android OTG usb camera 常见配置、调试等问题

工程使用Eclipse Mars+jni+Opencv,图像处理在jni里做。android只是抄过来用而已。

——————-配置部分——————— 
每次配置总会出现问题(查了众多资料崩了几天总结得来): 
1、jre 库导入(编译java代码) 
2、NDK路径和build path ${NDKROOT}/ndk-build.cmd (编译C、Cpp),调试需要再加上NDK_DEBUG=1 
3、 C++\C path and symbols。其实就是jni查找include路径 
4、Android的activity等类引入,一般可以自动修复 
5、Android.mk的注意: 
①Opencv.mk引入 
②LOCAL_MODULE与LOCAL_SRC_FILES 
③LOCAL_LDLIBS +=(严重注意 是+=还是冒号:,容易漏掉库) 
④APP_STL := gnustl_static 和 OPENCV_INSTALL_MODULES:=on后者可以使机器不用安装opencv manager,但是貌似编译起来变慢许多。 
6、jni部分: 
C不会自动强制转换,接口是C的写法。Cpp和C衔接注意extern “C”。另外C部分会出现各种怪异问题,比如size_t不识别(直接改unsigned int),部分宏定义(自己重写)找不到,引用头文件无效等等(比如float.h每次都出问题)。最奇葩的问题是因为eclipse不会默认强制转换,会提示unresolved symbol问题。比如我使用 fabs(a),a是一个int,他不会自动转换,而是提示fabs()这个函数找不到,误导性很大(我就rlgl),这时强制转换下fabs((double)a)就通过了。 
7、引入opencv库..就是那个jar文件。听说opencv android的2.4.X最稳定。推荐X越高越好。3的不稳定。。反正我的3.1.0java都编不出来。

——————-OTG调用部分——————— 
下载的simplewebcam-master。可以自行git到。 
可以参考http://www.eoeandroid.com/thread-252676-1-1.html?_dsign=44f35f3b

注意在修改权限的部分。 
oncreate函数里调用自写函数。其实是网上抄的。 
最初抄的版本里, Runtime runtime = Runtime.getRuntime(),没有新建一个对象,而是直接 process = Runtime.getRuntime().exec(“su”)。这种方法行不通。

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        String apkRoot="chmod 666 /dev/video*";//SD卡分区路径,也可能是mmcblk1随系统版本定,当前程序路径请用getPackageCodePath();  
        //SystemManager.RootCommand(apkRoot);
        RootCmd(apkRoot);

        cp = (CameraPreview) findViewById(R.id.cp); 
    }

    public boolean RootCmd(String cmd){  
        Process process = null;  
        DataOutputStream os = null;  

        Runtime runtime = Runtime.getRuntime();
        try {
            process = runtime.exec("su");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try{  
            os = new DataOutputStream(process.getOutputStream());  

            os.writeBytes(cmd+ "\n");  
            os.flush();

            os.writeBytes("exit\n");  
            os.flush();

            process.waitFor();  
        } catch (Exception e) {  
            return false;  
        } finally {  
            try {  
                if (os != null)   {  
                    os.close();  
                }  
                process.destroy();  
            } catch (Exception e) {  
            }  
        }  
        return true;  
    }  
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

另外有个UsbWebCamera的app,直接无视权限就能启用otg usb cam。可惜没找到源码。

——————-Opencv Mat 与Java Bitmap转换———————

            Mat src = new Mat();
            Utils.bitmapToMat(bmp, src);
            ReadBarcode(src.getNativeObjAddr());
 
 
  • 1
  • 2
  • 3

注意,在使用bitmapToMat前一定要初始化mat,不然会提示mat==null错误。 
另外java部分在调用opencv的任何函数前,应该等待opencv manger的加载完毕。 
具体为使用BaseLoaderCallback等待其加载完毕,可以参opencv sample2 - mixed processing里面的这段(注意加载jni lib也是在opencv manager之后):

private BaseLoaderCallback  mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            switch (status) {
                case LoaderCallbackInterface.SUCCESS:
                {
                    Log.i(TAG, "OpenCV loaded successfully");

                    **// Load native library after(!) OpenCV initialization**
                    System.loadLibrary("doproc");
                    mOpenCvCameraView.setMaxFrameSize(480, 640);
                    mOpenCvCameraView.enableView();
                } break;
                default:
                {
                    super.onManagerConnected(status);
                } break;
            }
        }
    };
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

暂时总结这些吧。赶脚卡在这些问题上几天不写算法真是坑。 
还是stackoverflow靠谱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值