本教程旨在帮助您在 Android 项目中使用 OpenCV 库。
本指南已在 Ubuntu 上进行了检查,但不包含与平台相关的部分,因此应与 Android Studio 和 OpenCV4Android SDK 支持的任何操作系统兼容。
本教程假定您已安装并配置了以下内容:
- Android Studio的
- JDK的
- Android SDK 和 NDK
- 可选:OpenCV for Android SDK,来自 Github 或 SourceForge 的官方发布页面。高级:作为替代方案,SDK 可以通过 wiki 上的说明从源代码构建。
如果您需要上述任何方面的帮助,请参阅我们的 Android 开发简介指南。
如果您在彻底执行这些步骤后遇到任何错误,请随时通过 OpenCV 论坛与我们联系。我们将尽最大努力为您提供帮助。
使用 SDK 的 Hello OpenCV 示例
在本节中,我们将创建一个简单的应用程序,它只执行 OpenCV 加载。在下一节中,我们将扩展它以支持相机。
除了此说明之外,您还可以使用一些视频指南,例如这个
-
打开 Android Studio,然后选择 Empty Views Activity (空视图活动) 创建空项目
-
设置项目:
- 选择 Java 语言
- 选择 Groovy DSL 构建配置语言
- 选择版本号不低于 OpenCV 4 Android 构建期间使用的版本号的 Minumum SDK
- 如果你不知道,你可以在文件中找到它
OpenCV-android-sdk/sdk/build.gradle
android -> defaultConfig -> minSdkVersion
- 如果你不知道,你可以在文件中找到它
-
单击“文件”->“新建”-“>导入模块...”,然后选择“OpenCV SDK 路径”
-
将模块名称设置为并按
OpenCV
Finish
- OpenCV 还提供体验式 Kotlin 支持。请将 Android Kotlin 插件添加到文件中:
MyApplication/OpenCV/build.gradle
插件 {ID:'org.jetbrains.kotlin.android',版本:'1.7.10',#version 可能因您的设置而异}任务失败,出现异常。-----------*哪里:构建文件“/home/alexander/AndroidStudioProjects/MyApplication/opencv/build.gradle”行:4* 出了什么问题:评估项目“:opencv”时出现问题。找不到 ID 为“kotlin-android”的>插件。 - OpenCV 项目使用功能。请在文件中启用它以阻止:
buildConfig
MyApplication/OpenCV/build.gradle
android
buildFeatures{buildConfig 为 true}JavaCameraView.java:15:错误:找不到符号导入 org.opencv.BuildConfig;^ symbol: class BuildConfig location: package org.opencv -
将模块添加到项目中:
- 单击“文件”->“项目结构...”->依赖关系 ->所有模块 -> +(“添加依赖项”按钮) -> 模块依赖项
- 选择
app
- 选择
OpenCV
- 在使用任何 OpenCV 函数之前,您必须先加载库。如果您的应用程序包含其他依赖于 OpenCV 的本机库,则应在 OpenCV 初始化后加载它们。添加以下代码以在应用启动时加载库:
如果 (OpenCVLoader.initLocal()) {Log.i(TAG, “OpenCV 加载成功”);} 还 {Log.e(TAG, “OpenCV 初始化失败!”);(Toast.makeText(this, “OpenCV 初始化失败!”, Toast.LENGTH_LONG)).show();返回;}
-
选择要检查示例的设备,然后按按钮运行代码
run
使用 Maven Central 的 Hello OpenCV 示例
从 OpenCV 4.9.0 开始,OpenCV for Android 包随 Maven Central 一起提供,并且可以作为 Gradle 依赖项自动安装。在本节中,我们将创建一个简单的应用程序,它只使用 Maven Central 加载 OpenCV。
-
打开 Android Studio,然后选择 Empty Views Activity (空视图活动) 创建空项目
-
设置项目:
- 选择 Java 语言
- 选择 Groovy DSL 构建配置语言
- 选择版本号不小于 OpenCV 支持的 Minumum SDK。对于 4.9.0,最低 SDK 版本为 21。
- 编辑 OpenCV 库并将其添加到依赖项列表,如下所示:
build.gradle
依赖项 {实现“org.opencv:opencv:4.9.0”}4.9.0
可以被官方发布的任何版本所取代。 - 在使用任何 OpenCV 函数之前,您必须先加载库。如果您的应用程序包含其他依赖于 OpenCV 的本机库,则应在 OpenCV 初始化后加载它们。添加以下代码以在应用启动时加载库:
如果 (OpenCVLoader.initLocal()) {Log.i(TAG, “OpenCV 加载成功”);} 还 {Log.e(TAG, “OpenCV 初始化失败!”);(Toast.makeText(this, “OpenCV 初始化失败!”, Toast.LENGTH_LONG)).show();返回;}
-
选择要检查示例的设备,然后按按钮运行代码
run
相机视图示例
在本节中,我们将扩展在上一节中创建的空 OpenCV 应用程序以支持相机。我们将拍摄相机帧并将它们显示在屏幕上。
- 告诉系统我们需要相机权限。将以下代码添加到该文件中:
MyApplication/app/src/main/AndroidManifest.xml
<使用权限 android:name=“android.permission.CAMERA”/><使用功能 android:name=“android.hardware.camera” android:required=“false”/><使用功能 android:name=“android.hardware.camera.autofocus” android:required=“false”/><使用功能 android:name=“android.hardware.camera.front” android:required=“false”/><使用功能 android:name=“android.hardware.camera.front.autofocus” android:required=“false”/> -
转到布局并删除带有文本“Hello World!”
activity_main.xml
这也可以通过从 XML 文件中删除块在代码或拆分模式下完成。
TextView
-
将相机视图添加到布局中:
- 在布局描述中添加方案:
xmlns:opencv=“http://schemas.android.com/apk/res-auto”
- 替换为小部件:
TextView
org.opencv.android.JavaCameraView
<org.opencv.android.JavaCameraView安卓:layout_width=“fill_parent”安卓:layout_height=“fill_parent”android:visibility=“消失了”android:id=“@+id/tutorial1_activity_java_surface_view”opencv:show_fps=“真”opencv:camera_id=“任何” /> - 如果收到布局警告,请将值替换为 for 和 properties
fill_parent
match_parent
android:layout_width
android:layout_height
你会得到这样的代码:
<FrameLayout xmlns:android=“http://schemas.android.com/apk/res/android”xmlns:tools=“http://schemas.android.com/tools”xmlns:opencv=“http://schemas.android.com/apk/res-auto”安卓:layout_width=“match_parent”安卓:layout_height=“match_parent” ><!-- [camera_view] --><org.opencv.android.JavaCameraView安卓:layout_width=“fill_parent”安卓:layout_height=“fill_parent”android:visibility=“消失了”android:id=“@+id/tutorial1_activity_java_surface_view”opencv:show_fps=“真”opencv:camera_id=“任何” /><!-- [camera_view] --></FrameLayout(框架布局)> - 在布局描述中添加方案:
- 从 继承主类。CameraActivity 实现了 CV 应用程序所需的相机周边要求和其他一些实用程序。我们感兴趣的重写方法是 、 、 和
org.opencv.android.CameraActivity
onCreate
onDestroy
onPause
onResume
getCameraViewList
- 实现接口方法应返回包含渲染内容的对象。此示例仅返回用于预览的相机帧:
org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2
onCameraFrame
Mat
return inputFrame.rgba();
- 分配对象:
org.opencv.android.CameraBridgeViewBase
- 它应该在应用程序启动(方法)时创建,并且此类应设置为侦听器
onCreate
- 在暂停/恢复 (, 方法) 时,它应该被禁用/启用
onPause
onResume
- 应在应用完成时禁用(方法)
onDestroy
- 应该在
getCameraViewList
- 它应该在应用程序启动(方法)时创建,并且此类应设置为侦听器
-
或者,您可以禁止手机调暗屏幕或锁定:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);最后,你将获得类似于以下内容的源代码:
软件包 org.opencv.samples.tutorial1;导入 org.opencv.android.CameraActivity;导入 org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;导入 org.opencv.android.OpenCVLoader;导入 org.opencv.core.Mat;导入 org.opencv.android.CameraBridgeViewBase;导入 org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;导入 android.os.Bundle;导入 android.util.Log;导入android.view.SurfaceView;导入 android.view.WindowManager;导入 android.widget.Toast;导入 java.util.Collections;导入 java.util.List;公共类 Tutorial1Activity 扩展了 CameraActivity 实现 CvCameraViewListener2 {private static final String TAG = “OCVSample::Activity”;私人CameraBridgeViewBase mOpenCvCameraView;公共教程1活动() {Log.i(TAG, “实例化的新” + this.getClass());}@Overridepublic void onCreate(Bundle savedInstanceState) {Log.i(TAG, “调用 onCreate”);super.onCreate(savedInstanceState);如果 (OpenCVLoader.initLocal()) {Log.i(TAG, “OpenCV 加载成功”);} 还 {Log.e(TAG, “OpenCV 初始化失败!”);(Toast.makeText(this, “OpenCV 初始化失败!”, Toast.LENGTH_LONG)).show();返回;}getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);setContentView(R.layout.tutorial1_surface_view);mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_java_surface_view);mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);mOpenCvCameraView.setCvCameraViewListener(这个);}@Overridepublic void onPause(){super.onPause();if (mOpenCvCameraView != 空)mOpenCvCameraView.disableView();}@Overridepublic void onResume(){super.onResume();if (mOpenCvCameraView != 空)mOpenCvCameraView.enableView();}@Override保护列表<?扩展 CameraBridgeViewBase> getCameraViewList() {返回集合.singletonList(mOpenCvCameraView);}@Override公共无效 onDestroy() {super.onDestroy();if (mOpenCvCameraView != 空)mOpenCvCameraView.disableView();}@Overridepublic void onCameraViewStarted(int width, int height) {}@Override公共无效 onCameraViewStopped() {}@Override公共垫 onCameraFrame(CvCameraViewFrame inputFrame) {返回 inputFrame.rgba();}}
就是这样!现在,您可以在设备上运行代码进行检查。
在线教程
- 麻省理工学院人工智能视频教程 – 麻省理工人工智能课程
- 人工智能入门 – 人工智能基础学习。Peter Norvig举办的课程
- EdX 人工智能 – 此课程讲授人工智能计算机系统设计的基本概念和技术。
- 人工智能中的计划 – 计划是人工智能系统的基础部分之一。在这个课程中,你将会学习到让机器人执行一系列动作所需要的基本算法。
- 机器人人工智能 – 这个课程将会教授你实现人工智能的基本方法,包括:概率推算,计划和搜索,本地化,跟踪和控制,全部都是围绕有关机器人设计。
- 机器学习 – 有指导和无指导情况下的基本机器学习算法
- 机器学习中的神经网络 – 智能神经网络上的算法和实践经验
- 斯坦福统计学习
有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓
人工智能书籍
- OpenCV(中文版).(布拉德斯基等)
- OpenCV+3计算机视觉++Python语言实现+第二版
- OpenCV3编程入门 毛星云编著
- 数字图像处理_第三版
- 人工智能:一种现代的方法
- 深度学习面试宝典
- 深度学习之PyTorch物体检测实战
- 吴恩达DeepLearning.ai中文版笔记
- 计算机视觉中的多视图几何
- PyTorch-官方推荐教程-英文版
- 《神经网络与深度学习》(邱锡鹏-20191121)
- …
第一阶段:零基础入门(3-6个月)
新手应首先通过少而精的学习,看到全景图,建立大局观。 通过完成小实验,建立信心,才能避免“从入门到放弃”的尴尬。因此,第一阶段只推荐4本最必要的书(而且这些书到了第二、三阶段也能继续用),入门以后,在后续学习中再“哪里不会补哪里”即可。
第二阶段:基础进阶(3-6个月)
熟读《机器学习算法的数学解析与Python实现》并动手实践后,你已经对机器学习有了基本的了解,不再是小白了。这时可以开始触类旁通,学习热门技术,加强实践水平。在深入学习的同时,也可以探索自己感兴趣的方向,为求职面试打好基础。
第三阶段:工作应用
这一阶段你已经不再需要引导,只需要一些推荐书目。如果你从入门时就确认了未来的工作方向,可以在第二阶段就提前阅读相关入门书籍(对应“商业落地五大方向”中的前两本),然后再“哪里不会补哪里”。
有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓
文章来源:https://www.toymoban.com/news/detail-818129.html
文章来源地址https://www.toymoban.com/news/detail-818129.html
到了这里,关于使用 OpenCV 进行 Android 开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!