返回

玩转Android视觉识别,从零入门!

Android

利用 Android Studio、NCNN 和 YOLOV8 踏入 Android 视觉识别的精彩世界

认识 Android 视觉识别的核心组件

想要在 Android 设备上探索视觉识别的魅力,首先需要了解其背后的核心组件:

  • Android Studio: 一款功能强大的集成开发环境(IDE),专为构建和部署 Android 应用程序而设计。
  • NCNN: 一款开源且高效的神经网络推理框架,专门针对移动设备进行了优化。
  • YOLOV8: 一种先进的目标检测算法,以其速度和准确性著称。

安装必备软件

为了踏上 Android 视觉识别的旅程,你需要安装以下必备软件:

  1. 下载并安装 Android Studio。
  2. 从 NCNN 官网下载并安装 NCNN for Android。
  3. 从 YOLOV8 官网下载预训练的模型文件。

创建新的 Android Studio 项目

准备好必要的软件后,是时候在 Android Studio 中创建你的第一个视觉识别项目了:

  1. 打开 Android Studio,点击“File”>“New”>“Project”。
  2. 选择“Empty Activity”模板,并为项目取名为“NCNN-YOLOV8”。
  3. 点击“Finish”创建项目。

配置 NCNN 和 YOLOV8

接下来,需要配置 NCNN 和 YOLOV8 以便在你的项目中使用:

  1. 将 NCNN-20231027-android-vulkan 目录下的文件复制到 NCNN-YOLOV8/app/src/main/jni 目录下。
  2. 修改 NCNN-YOLOV8/app/src/main/jni 目录下的 CMakeLists.txt 文件,添加以下内容:
include_directories(${NCNN_DIR}/include)
link_directories(${NCNN_DIR}/lib)
  1. 将下载的 YOLOV8 模型文件复制到 NCNN-YOLOV8/app/src/main/assets 目录下。

编写 Java 代码

完成了配置工作,现在需要编写一些 Java 代码来处理图像并执行检测:

  1. 在 NCNN-YOLOV8/app/src/main/java/com/example/ncnn_yolov8 包下创建 MainActivity.java 文件。
  2. 在 MainActivity.java 文件中添加以下代码:
import android.Manifest;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import com.ncnn.nativeinference.NativeInference;

public class MainActivity extends AppCompatActivity {

    private static final int PERMISSION_REQUEST_CAMERA = 100;

    private NativeInference ncnnInference;
    private ImageView imageView;
    private Button detectButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView = findViewById(R.id.imageView);
        detectButton = findViewById(R.id.detectButton);

        ncnnInference = new NativeInference();
        ncnnInference.load_param("yolov8.param");
        ncnnInference.load_model("yolov8.bin");

        detectButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, PERMISSION_REQUEST_CAMERA);
                } else {
                    detectImage();
                }
            }
        });
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == PERMISSION_REQUEST_CAMERA) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                detectImage();
            }
        }
    }

    private void detectImage() {
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
        int[] result = ncnnInference.detect(bitmap, 0.5f, 0.45f);
        for (int i = 0; i < result.length; i += 6) {
            Log.d("MainActivity", "Detected object: " + result[i] + ", confidence: " + result[i + 1] + ", left: " + result[i + 2] + ", top: " + result[i + 3] + ", right: " + result[i + 4] + ", bottom: " + result[i + 5]);
        }
    }
}

运行应用程序

所有准备工作就绪后,是时候让你的应用程序大显身手了:

  1. 连接你的手机,启用开发者模式和 USB 调试。
  2. 点击 Android Studio 工具栏上的“Run”按钮,选择你的手机作为运行设备。
  3. 应用程序将安装到你的手机上,并自动启动。
  4. 点击“Detect”按钮,选择一张图片,应用程序将对图片进行物体检测,并在控制台中输出结果。

总结

恭喜你!你已经成功地踏入了 Android 视觉识别的迷人世界。通过利用 Android Studio、NCNN 和 YOLOV8,你可以探索图像处理和目标检测的强大功能。

常见问题解答

  • 什么是 NCNN?
    NCNN 是一个开源的、高性能的神经网络推理框架,专门针对移动设备优化,可以高效地执行推理任务。

  • 什么是 YOLOV8?
    YOLOV8 是一种先进的目标检测算法,以其速度和准确性而闻名。它可以实时检测图像中的对象。

  • 如何安装 NCNN 和 YOLOV8?
    NCNN 和 YOLOV8 可以从各自的官方网站下载。安装过程涉及将文件复制到项目目录并配置必要的设置。

  • 如何使用 Android Studio 进行视觉识别?
    Android Studio 是一个集成开发环境,提供了构建和部署 Android 应用程序的工具和功能。在视觉识别项目中,它用于编写 Java 代码和管理应用程序的配置。

  • 我可以使用 Android Studio 开发哪些类型的视觉识别应用程序?
    使用 Android Studio 和 NCNN/YOLOV8,你可以开发广泛的视觉识别应用程序,包括物体检测、图像分类和人脸识别。