本教程旨在幫助您在 Android 項(xiàng)目中使用 OpenCV 庫(kù)。
本指南已在 Ubuntu 上進(jìn)行了檢查,但不包含與平臺(tái)相關(guān)的部分,因此應(yīng)與 Android Studio 和 OpenCV4Android SDK 支持的任何操作系統(tǒng)兼容。
本教程假定您已安裝并配置了以下內(nèi)容:
- Android Studio的
- JDK的
- Android SDK 和 NDK
- 可選:OpenCV for Android SDK,來(lái)自 Github 或?SourceForge?的官方發(fā)布頁(yè)面。高級(jí):作為替代方案,SDK 可以通過(guò)?wiki 上的說(shuō)明從源代碼構(gòu)建。
如果您需要上述任何方面的幫助,請(qǐng)參閱我們的?Android 開(kāi)發(fā)簡(jiǎn)介指南。
如果您在徹底執(zhí)行這些步驟后遇到任何錯(cuò)誤,請(qǐng)隨時(shí)通過(guò) OpenCV?論壇與我們聯(lián)系。我們將盡最大努力為您提供幫助。
使用 SDK 的 Hello OpenCV 示例
在本節(jié)中,我們將創(chuàng)建一個(gè)簡(jiǎn)單的應(yīng)用程序,它只執(zhí)行 OpenCV 加載。在下一節(jié)中,我們將擴(kuò)展它以支持相機(jī)。
除了此說(shuō)明之外,您還可以使用一些視頻指南,例如這個(gè)
-
打開(kāi) Android Studio,然后選擇?Empty Views Activity (空視圖活動(dòng)) 創(chuàng)建空項(xiàng)目
-
設(shè)置項(xiàng)目:
- 選擇?Java?語(yǔ)言
- 選擇?Groovy DSL?構(gòu)建配置語(yǔ)言
- 選擇版本號(hào)不低于 OpenCV 4 Android 構(gòu)建期間使用的版本號(hào)的 Minumum SDK
- 如果你不知道,你可以在文件中找到它
OpenCV-android-sdk/sdk/build.gradle
android -> defaultConfig -> minSdkVersion
- 如果你不知道,你可以在文件中找到它
-
單擊“文件”->“新建”-“>導(dǎo)入模塊...”,然后選擇“OpenCV SDK 路徑”
-
將模塊名稱設(shè)置為并按
OpenCV
Finish
- OpenCV 還提供體驗(yàn)式 Kotlin 支持。請(qǐng)將 Android Kotlin 插件添加到文件中:
MyApplication/OpenCV/build.gradle
插件 {ID:'org.jetbrains.kotlin.android',版本:'1.7.10',#version 可能因您的設(shè)置而異}任務(wù)失敗,出現(xiàn)異常。-----------*哪里:構(gòu)建文件“/home/alexander/AndroidStudioProjects/MyApplication/opencv/build.gradle”行:4* 出了什么問(wèn)題:評(píng)估項(xiàng)目“:opencv”時(shí)出現(xiàn)問(wèn)題。找不到 ID 為“kotlin-android”的>插件。 - OpenCV 項(xiàng)目使用功能。請(qǐng)?jiān)谖募袉⒂盟宰柚梗?code>buildConfig
MyApplication/OpenCV/build.gradle
android
buildFeatures{buildConfig 為 true}JavaCameraView.java:15:錯(cuò)誤:找不到符號(hào)導(dǎo)入 org.opencv.BuildConfig;^ symbol: class BuildConfig location: package org.opencv -
將模塊添加到項(xiàng)目中:
- 單擊“文件”->“項(xiàng)目結(jié)構(gòu)...”->依賴關(guān)系 ->所有模塊 -> +(“添加依賴項(xiàng)”按鈕) -> 模塊依賴項(xiàng)
- 選擇
app
- 選擇
OpenCV
- 在使用任何 OpenCV 函數(shù)之前,您必須先加載庫(kù)。如果您的應(yīng)用程序包含其他依賴于 OpenCV 的本機(jī)庫(kù),則應(yīng)在 OpenCV 初始化后加載它們。添加以下代碼以在應(yīng)用啟動(dòng)時(shí)加載庫(kù):
如果 (OpenCVLoader.initLocal()) {Log.i(TAG, “OpenCV 加載成功”);} 還 {Log.e(TAG, “OpenCV 初始化失??!”);(Toast.makeText(this, “OpenCV 初始化失??!”, Toast.LENGTH_LONG)).show();返回;}
-
選擇要檢查示例的設(shè)備,然后按按鈕運(yùn)行代碼
run
使用 Maven Central 的 Hello OpenCV 示例
從 OpenCV 4.9.0 開(kāi)始,OpenCV for Android 包隨 Maven Central 一起提供,并且可以作為 Gradle 依賴項(xiàng)自動(dòng)安裝。在本節(jié)中,我們將創(chuàng)建一個(gè)簡(jiǎn)單的應(yīng)用程序,它只使用 Maven Central 加載 OpenCV。
-
打開(kāi) Android Studio,然后選擇?Empty Views Activity (空視圖活動(dòng)) 創(chuàng)建空項(xiàng)目
-
設(shè)置項(xiàng)目:
- 選擇?Java?語(yǔ)言
- 選擇?Groovy DSL?構(gòu)建配置語(yǔ)言
- 選擇版本號(hào)不小于 OpenCV 支持的?Minumum SDK。對(duì)于 4.9.0,最低 SDK 版本為 21。
- 編輯 OpenCV 庫(kù)并將其添加到依賴項(xiàng)列表,如下所示:
build.gradle
依賴項(xiàng) {實(shí)現(xiàn)“org.opencv:opencv:4.9.0”}4.9.0
可以被官方發(fā)布的任何版本所取代。 - 在使用任何 OpenCV 函數(shù)之前,您必須先加載庫(kù)。如果您的應(yīng)用程序包含其他依賴于 OpenCV 的本機(jī)庫(kù),則應(yīng)在 OpenCV 初始化后加載它們。添加以下代碼以在應(yīng)用啟動(dòng)時(shí)加載庫(kù):
如果 (OpenCVLoader.initLocal()) {Log.i(TAG, “OpenCV 加載成功”);} 還 {Log.e(TAG, “OpenCV 初始化失敗!”);(Toast.makeText(this, “OpenCV 初始化失?。 ?/span>, Toast.LENGTH_LONG)).show();返回;}
-
選擇要檢查示例的設(shè)備,然后按按鈕運(yùn)行代碼
run
相機(jī)視圖示例
在本節(jié)中,我們將擴(kuò)展在上一節(jié)中創(chuàng)建的空 OpenCV 應(yīng)用程序以支持相機(jī)。我們將拍攝相機(jī)幀并將它們顯示在屏幕上。
- 告訴系統(tǒng)我們需要相機(jī)權(quán)限。將以下代碼添加到該文件中:
MyApplication/app/src/main/AndroidManifest.xml
<使用權(quán)限 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”/> -
轉(zhuǎn)到布局并刪除帶有文本“Hello World!”
activity_main.xml
這也可以通過(guò)從 XML 文件中刪除塊在代碼或拆分模式下完成。
TextView
-
將相機(jī)視圖添加到布局中:
- 在布局描述中添加方案:
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=“任何” /> - 如果收到布局警告,請(qǐng)將值替換為 for 和 properties
fill_parent
match_parent
android:layout_width
android:layout_height
你會(huì)得到這樣的代碼:
<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 實(shí)現(xiàn)了 CV 應(yīng)用程序所需的相機(jī)周邊要求和其他一些實(shí)用程序。我們感興趣的重寫(xiě)方法是 、 、 和
org.opencv.android.CameraActivity
onCreate
onDestroy
onPause
onResume
getCameraViewList
- 實(shí)現(xiàn)接口方法應(yīng)返回包含渲染內(nèi)容的對(duì)象。此示例僅返回用于預(yù)覽的相機(jī)幀:
org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2
onCameraFrame
Mat
return inputFrame.rgba();
- 分配對(duì)象:
org.opencv.android.CameraBridgeViewBase
- 它應(yīng)該在應(yīng)用程序啟動(dòng)(方法)時(shí)創(chuàng)建,并且此類應(yīng)設(shè)置為偵聽(tīng)器
onCreate
- 在暫停/恢復(fù) (, 方法) 時(shí),它應(yīng)該被禁用/啟用
onPause
onResume
- 應(yīng)在應(yīng)用完成時(shí)禁用(方法)
onDestroy
- 應(yīng)該在
getCameraViewList
- 它應(yīng)該在應(yīng)用程序啟動(dòng)(方法)時(shí)創(chuàng)建,并且此類應(yīng)設(shè)置為偵聽(tīng)器
-
或者,您可以禁止手機(jī)調(diào)暗屏幕或鎖定:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);最后,你將獲得類似于以下內(nèi)容的源代碼:
軟件包 org.opencv.samples.tutorial1;導(dǎo)入 org.opencv.android.CameraActivity;導(dǎo)入 org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;導(dǎo)入 org.opencv.android.OpenCVLoader;導(dǎo)入 org.opencv.core.Mat;導(dǎo)入 org.opencv.android.CameraBridgeViewBase;導(dǎo)入 org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;導(dǎo)入 android.os.Bundle;導(dǎo)入 android.util.Log;導(dǎo)入android.view.SurfaceView;導(dǎo)入 android.view.WindowManager;導(dǎo)入 android.widget.Toast;導(dǎo)入 java.util.Collections;導(dǎo)入 java.util.List;公共類 Tutorial1Activity 擴(kuò)展了 CameraActivity 實(shí)現(xiàn) CvCameraViewListener2 {private static final String TAG = “OCVSample::Activity”;私人CameraBridgeViewBase mOpenCvCameraView;公共教程1活動(dòng)() {Log.i(TAG, “實(shí)例化的新” + this.getClass());}@Overridepublic void onCreate(Bundle savedInstanceState) {Log.i(TAG, “調(diào)用 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(這個(gè));}@Overridepublic void onPause(){super.onPause();if (mOpenCvCameraView != 空)mOpenCvCameraView.disableView();}@Overridepublic void onResume(){super.onResume();if (mOpenCvCameraView != 空)mOpenCvCameraView.enableView();}@Override保護(hù)列表<?擴(kuò)展 CameraBridgeViewBase> getCameraViewList() {返回集合.singletonList(mOpenCvCameraView);}@Override公共無(wú)效 onDestroy() {super.onDestroy();if (mOpenCvCameraView != 空)mOpenCvCameraView.disableView();}@Overridepublic void onCameraViewStarted(int width, int height) {}@Override公共無(wú)效 onCameraViewStopped() {}@Override公共墊 onCameraFrame(CvCameraViewFrame inputFrame) {返回 inputFrame.rgba();}}
就是這樣!現(xiàn)在,您可以在設(shè)備上運(yùn)行代碼進(jìn)行檢查。
???在線教程
- 麻省理工學(xué)院人工智能視頻教程?– 麻省理工人工智能課程
- 人工智能入門?– 人工智能基礎(chǔ)學(xué)習(xí)。Peter Norvig舉辦的課程
- EdX 人工智能?– 此課程講授人工智能計(jì)算機(jī)系統(tǒng)設(shè)計(jì)的基本概念和技術(shù)。
- 人工智能中的計(jì)劃?– 計(jì)劃是人工智能系統(tǒng)的基礎(chǔ)部分之一。在這個(gè)課程中,你將會(huì)學(xué)習(xí)到讓機(jī)器人執(zhí)行一系列動(dòng)作所需要的基本算法。
- 機(jī)器人人工智能?– 這個(gè)課程將會(huì)教授你實(shí)現(xiàn)人工智能的基本方法,包括:概率推算,計(jì)劃和搜索,本地化,跟蹤和控制,全部都是圍繞有關(guān)機(jī)器人設(shè)計(jì)。
- 機(jī)器學(xué)習(xí)?– 有指導(dǎo)和無(wú)指導(dǎo)情況下的基本機(jī)器學(xué)習(xí)算法
- 機(jī)器學(xué)習(xí)中的神經(jīng)網(wǎng)絡(luò)?– 智能神經(jīng)網(wǎng)絡(luò)上的算法和實(shí)踐經(jīng)驗(yàn)
- 斯坦福統(tǒng)計(jì)學(xué)習(xí)
有需要的小伙伴,可以點(diǎn)擊下方鏈接免費(fèi)領(lǐng)取或者V掃描下方二維碼免費(fèi)領(lǐng)取??
?
人工智能書(shū)籍
- OpenCV(中文版).(布拉德斯基等)
- OpenCV+3計(jì)算機(jī)視覺(jué)++Python語(yǔ)言實(shí)現(xiàn)+第二版
- OpenCV3編程入門 毛星云編著
- 數(shù)字圖像處理_第三版
- 人工智能:一種現(xiàn)代的方法
- 深度學(xué)習(xí)面試寶典
- 深度學(xué)習(xí)之PyTorch物體檢測(cè)實(shí)戰(zhàn)
- 吳恩達(dá)DeepLearning.ai中文版筆記
- 計(jì)算機(jī)視覺(jué)中的多視圖幾何
- PyTorch-官方推薦教程-英文版
- 《神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》(邱錫鵬-20191121)
- …
第一階段:零基礎(chǔ)入門(3-6個(gè)月)
新手應(yīng)首先通過(guò)少而精的學(xué)習(xí),看到全景圖,建立大局觀。?通過(guò)完成小實(shí)驗(yàn),建立信心,才能避免“從入門到放棄”的尷尬。因此,第一階段只推薦4本最必要的書(shū)(而且這些書(shū)到了第二、三階段也能繼續(xù)用),入門以后,在后續(xù)學(xué)習(xí)中再“哪里不會(huì)補(bǔ)哪里”即可。
第二階段:基礎(chǔ)進(jìn)階(3-6個(gè)月)
熟讀《機(jī)器學(xué)習(xí)算法的數(shù)學(xué)解析與Python實(shí)現(xiàn)》并動(dòng)手實(shí)踐后,你已經(jīng)對(duì)機(jī)器學(xué)習(xí)有了基本的了解,不再是小白了。這時(shí)可以開(kāi)始觸類旁通,學(xué)習(xí)熱門技術(shù),加強(qiáng)實(shí)踐水平。在深入學(xué)習(xí)的同時(shí),也可以探索自己感興趣的方向,為求職面試打好基礎(chǔ)。
第三階段:工作應(yīng)用
這一階段你已經(jīng)不再需要引導(dǎo),只需要一些推薦書(shū)目。如果你從入門時(shí)就確認(rèn)了未來(lái)的工作方向,可以在第二階段就提前閱讀相關(guān)入門書(shū)籍(對(duì)應(yīng)“商業(yè)落地五大方向”中的前兩本),然后再“哪里不會(huì)補(bǔ)哪里”。
?有需要的小伙伴,可以點(diǎn)擊下方鏈接免費(fèi)領(lǐng)取或者V掃描下方二維碼免費(fèi)領(lǐng)取??
?
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-818129.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-818129.html
到了這里,關(guān)于使用 OpenCV 進(jìn)行 Android 開(kāi)發(fā)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!