关于将拍照功能导入android病害识别模型的一些坑

继前一篇文章,我把torch1.10的模型导入到android stdio之后。我准备加入照相机功能。
关于android导入照相机,网上有很多类似的东西。但是我经过两天的尝试,终于弄好了。写一下我的心得体会。
首先真机调试。这个很简单,进入开发者模式之后用usb和电脑连起来就行。注意的是,可以把logcat切换到真机,不要在虚拟机上。不然你无法看到报错信息,这对之后的调试来说是致命的。

然后关于拍照,基础知识我就不介绍了。
大家可能都会遇到datanull的情况,导致无法得到uri传回的图片数据,也就无法进行图片识别。这里其实怎么知道datanull是很重要的,不然无从下手,我们可以在onActivityResult函数里面,加上下面的代码判断一下,加了toast,就会在手机上显示错误信息,不然无法知道哪里错了。

//    if(data==null)  //还是data为空的问题
//    {
//      Toast.makeText(this, "data为空", Toast.LENGTH_SHORT).show();
//      return;
//    }

既然已经知道这个问题了,网上也有说明这种情况的原因,就是android更新之后,如果在intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);这一句里面指定了uri,那么data将返回空。这是源码里面写的。这就很麻烦了。
android规定,指定uri返回的是全图,不指定返回的是缩略图。其实这样也挺好,模型计算也会快很多。所以替代办法就是,不指定uri,即把这一句注释掉。然后在void onActivityResult(int requestCode, int resultCode, Intent data)函数的最后一个参数data用@Nullable Intent intent代替。然后在函数里面用

Bundle bundle = intent.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");

这两句来提取数据。(其实用 Intent data也可以的,那么改成data.getExtras()就行了)结果发现识别速度很快。

还有一个小插曲就是,我这个笔记本之前用的是1.9的torch官方给的训练的模型,忘记改成1.10了,所以模型加载还是用的Litemoduleloader.load(),应该用module.load(),关于这一点之前说过了。主要的是这个开头报错是couldnt find libpytorch.so,没有看到下面module.load,所以我一直找关于动态库无法加载的错误,一下午都没有解决,这一点告诉我们,debug的时候要看全错误类型,不然往一个错误的方向努力是徒劳的。除了版本匹配问题,往往我们都是犯了很低级的错误才导致出错,要仔细检查自己的代码和错误信息,不要盲目debug。
在这里插入图片描述

从相册选照片暂时还没有实现,遇到点bug,感觉这也是棘手的一个问题。准备解决了,下一篇再说这个问题。

今天又实现了从相册中选取图片。这个其实实现起来还好。网上的代码可以直接用的。唯一注意的是void onActivityResult(int requestCode, int resultCode, Intent data) 这里的data其实并不是null,可以直接用。只是拍照的时候我们不要指定uri就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值