Android从零开始配置opencv+tensorflow进行人脸识别+口罩识别(二:opencv展示当前图像并作适当调整)

前言

上一章已经成功导入了opencv,但并没说如何展示从摄像头获取图像并展示出来,这章将简单的说说怎么展示,以及里面出现的问题作修正

一、使用opencv正常展示图像

首先准备一个空的activity页面,在其xml布局中添加JavaCameraView,这个view宽高都可以,不过,我为了在这个view下面添加功能按钮,所以给了高度限制
示例代码

  <org.opencv.android.JavaCameraView
            android:id="@+id/cameraView"
            android:layout_width="@dimen/dp_300"
            android:layout_height="@dimen/dp_250"
            android:layout_gravity="center"
            />

添加后,在activity中对其生命周期作一下简单的绑定,我个人是写在onResume,onPause和onDestroy三个生命周期中去了
示例代码

onResume中的代码

 override fun onResume() {
        super.onResume()
        {你自己的的JavaCameraView的名字}.connectCamera(width, height)
    }

onResume中的代码

 override fun onResume() {
        super.onResume()

        {你自己的的JavaCameraView的名字}.connectCamera(width, height)
    }

onPause中的代码

 override fun onPause() {
        super.onPause()

        {你自己的的JavaCameraView的名字}.cameraView.releaseCamera()
    }

onDestroy中的代码

 override fun onDestroy() {
        super.onDestroy()

        {你自己的的JavaCameraView的名字}.cameraView.disableView()
    }

做完上面的操作,运行到手机上,你的opencv就可以正常展示第一个图像。。。等等,似乎有一点点不对劲?

Android从零开始配置opencv+tensorflow进行人脸识别+口罩识别(二:opencv展示当前图像并作适当调整)
这个东西,为啥是歪着的?看来得作一些小小的调优

二、opencv抓取画面调优

1.错误的角度调整

首先,是吧图片给转过来,让其可以正常展示图片,JavaCameraView中有一个监听方法setCvCameraViewListener,这个监听器除了能监听当前摄像头是开启还是关闭以外,它的onCameraFrame方法所返回的mat就是javaCameraView中展示的东西,吧这个mat旋转,展示正确的图像,需要注意的地方都写注释里了

代码如下(示例):

    cameraView.setCvCameraViewListener(object : CameraBridgeViewBase.CvCameraViewListener2 {
            override fun onCameraViewStarted(width: Int, height: Int) {
                Log.e("hehe", "开始")
            }

            override fun onCameraViewStopped() {
                Log.e("hehe", "结束")
            }

            override fun onCameraFrame(inputFrame: CameraBridgeViewBase.CvCameraViewFrame?): Mat {
                var result: Mat? = null

                synchronized(this) {
                    if (result != null) {

                        var angle = 90

                        if (cameraView.getmCameraIndex() == CameraBridgeViewBase.CAMERA_ID_FRONT) {
                            angle = 270
                        }

                        var size = Size(result.width().toDouble(), result.height().toDouble())
                        Imgproc.warpAffine(result, result, Imgproc.getRotationMatrix2D(Point((result.width() / 2).toDouble(), (result.height() / 2).toDouble()), angle.toDouble(), -1.0), size)
                    }
                }

                return result!!

            }

        })

写到这里,肯定有人稍微有些蒙蔽,我的javaCameraView里没有getmCameraIndex啊,因为这个参在opencv哪里是一个私有的参,你需要自己去手写一个方法调取,写的也很简单,直接在javaCameraView中添加一个方法就可以了

 public int getmCameraIndex(){
        return mCameraIndex;
    }

2.如何旋转摄像头

上面的注释里写了需要吧前摄转270°,可是opencv里似乎没有直接转摄像头的方法,怎么办?自己来办,直接准备一个按钮,为其配置以下点击事件

{你的按钮的名字}.setOnClickListener {

            if (cameraView.getmCameraIndex() == CameraBridgeViewBase.CAMERA_ID_FRONT) {
                cameraView.setCameraIndex(CameraBridgeViewBase.CAMERA_ID_BACK)
            } else {
                cameraView.setCameraIndex(CameraBridgeViewBase.CAMERA_ID_FRONT)
            }

            cameraView.releaseCamera();
            cameraView.connectCamera(width, height)
        }

结尾

上述操作完成后,你就可以正常使用opencv展示摄像头出现的图像了,并且自由切换前后摄像头了,opencv的mat的宽高是通过connectCamera(width, height)中传入的宽高,在你摄像头支持分辨率中找到一个最佳的分辨率,所以不需要担心我这8k摄像头的手机,会不会一直拿8k图像,读爆我的内存之类的,不会,至此,opencv部分的操作基本上就大功告成了,后面会说如何接入tensorflow以及如何用tensorflow-lite作人脸识别和口罩识别并展示出是否佩戴口罩

ps:本来早就准备好一起上,但opencv对人连带口罩时的读取识别度太低了,dlib表现不错,但dlib性能问题堪忧,而且还因为用的一个模型比较大,用在移动端上有点内存杀手的意思,所以选内存占用更小的tensorflow-lite,但tensorflowlite的人脸识别的模型构建我还没看,估计要一段时间了,可能会先出一个opencv读取人脸的教程混混?

Original: https://blog.csdn.net/weixin_47491668/article/details/124367410
Author: weixin_47491668
Title: Android从零开始配置opencv+tensorflow进行人脸识别+口罩识别(二:opencv展示当前图像并作适当调整)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/520951/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 机器学习(一)——线性回归介绍及案例实战(Python实现)

    目录 前言 一、线性模型介绍 二、一元线性回归 1、介绍 2、案例 3、模型优化 总结 前言 线性回归模型是机器学习中非常基础且经典的模型,是利用线性拟合的方式探寻数据背后的规律,…

    人工智能 2023年7月4日
    072
  • MXNe

    问题介绍 MXNet是一个深度学习框架,被广泛应用于机器学习和人工智能领域。MXNet是一个高度灵活且高效的框架,可以在多种硬件设备上运行,并支持分布式训练。本文将详细解决一个关于…

    人工智能 2023年12月31日
    031
  • 动态batch和静态batch的原理和代码详解

    原理: 在wenet中支持两种batch的方式, 第一种是常规的batch方案,但该方案当语音长短差异过大时,显存利用率低,同时带来显存oom的风险; 第二种是动态batch,不指…

    人工智能 2023年5月23日
    098
  • 用感受器算法解决墨渍分类问题

    *问题描述 平面上有两摊墨渍,它们的颜色分别是黄色和蓝色,墨渍分类问题就是是根据点的坐标,判断其染上的颜色。从Sklearn的数据库中获取墨渍数据,每条数据是平面上的一个点,特征组…

    人工智能 2023年6月19日
    069
  • 图像分类方法总结

    图像分类问题描述 图像分类问题是计算机视觉领域的基础问题,它的目的是根据图像的语义信息将不同类别图像区分开来,实现最小的分类误差。具体任务要求是从给定的分类集合中给图像分配一个标签…

    人工智能 2023年7月3日
    087
  • 知识表示学习(三):TransR

    一.摘要 知识图谱补全旨在执行实体之间的链接预测。 在本文中,我们考虑了知识图嵌入的方法。 最近,诸如 TransE 和 TransH 等模型通过将关系视为从头实体到尾实体的翻译来…

    人工智能 2023年6月10日
    074
  • 支持向量机分类算法

    🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡 进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯…

    人工智能 2023年7月1日
    090
  • python如何做成app?

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 python如何做成app? 一、Python3.8.3版本+kivy1.10.0 二、用命令提示符(可…

    人工智能 2023年7月4日
    051
  • 【ML】机器学习数据集:sklearn中回归数据集介绍

    目录 1. Boston房价预测数据集 2. California房价预测数据集 3. 糖尿病预测数据集 在机器学习的教程中,我们会看到很多的demo,这些demo都是基于pyth…

    人工智能 2023年6月16日
    0104
  • 简单使用matlab做回归分析、拟合分析

    简单使用matlab做回归分析、拟合分析 前言 * 一元线非线性回归 例子 多元线性回归 例子 多元线非线性回归 前言 这里是简单做一元非线性,及多元线性。一元:就是只有一个X。比…

    人工智能 2023年6月18日
    094
  • 简述回归,分类,聚类方法的区别和联系并分别举出一个例子

    简述回归,分类,聚类方法的区别和联系并分别举出一个例子 以前偶然找到过下图,该图对分类,聚类及其回归表达的很清晰。由上图我们可以看到,机器学习分为四大块,分别是 classific…

    人工智能 2023年6月17日
    073
  • Android hook方式抓包

    前言 在跟大佬学习的时候发现另一种抓包方式,采用 frida hook socket 字节流即可,哪里还需要管什么证书绑定,双向认证? HTTP抓包原理 样本案例 class Ma…

    人工智能 2023年6月29日
    058
  • python使用Tensorflow检测GPU运行与使用Pytorch

    GPU运行状态检测 在先前,博主完成了GPU环境的配置,那么今天博主来实验一下使用GPU来运行我们的项目使用cmd 输入nvidia-smi查看GPU使用情况,下面是Linux里面…

    人工智能 2023年5月24日
    073
  • Python培训班哪家好?如何成为一名合格python工程师?

    Python培训班要根据个人需要去选择,Python培训费用偏高,选择的时候需要从培训机构的背景、课程、师资、管理和就业等方面考虑。 从培训机构背景上 新成立的Python培训机构…

    人工智能 2023年7月18日
    059
  • tensorflow环境搭建教程

    tensorflow环境搭建教程-已失效 前言 一、下载anaconda 二、修改Python版本 三、搭建tensorflow环境 四、安装其他库模块 总结 文章目录 前言 一、…

    人工智能 2023年5月26日
    061
  • 人工神经网络算法实战教程

    神经网络(Artificial Neural Network,也称为人工神经网络,简称ANN)具有通过示例学习能力。ANN是受生物神经元系统启发的的信息处理模型,它由大量高度互联的…

    人工智能 2023年7月13日
    061
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球