玩转Android视觉识别,从零入门!
2023-12-21 16:10:06
利用 Android Studio、NCNN 和 YOLOV8 踏入 Android 视觉识别的精彩世界
认识 Android 视觉识别的核心组件
想要在 Android 设备上探索视觉识别的魅力,首先需要了解其背后的核心组件:
- Android Studio: 一款功能强大的集成开发环境(IDE),专为构建和部署 Android 应用程序而设计。
- NCNN: 一款开源且高效的神经网络推理框架,专门针对移动设备进行了优化。
- YOLOV8: 一种先进的目标检测算法,以其速度和准确性著称。
安装必备软件
为了踏上 Android 视觉识别的旅程,你需要安装以下必备软件:
- 下载并安装 Android Studio。
- 从 NCNN 官网下载并安装 NCNN for Android。
- 从 YOLOV8 官网下载预训练的模型文件。
创建新的 Android Studio 项目
准备好必要的软件后,是时候在 Android Studio 中创建你的第一个视觉识别项目了:
- 打开 Android Studio,点击“File”>“New”>“Project”。
- 选择“Empty Activity”模板,并为项目取名为“NCNN-YOLOV8”。
- 点击“Finish”创建项目。
配置 NCNN 和 YOLOV8
接下来,需要配置 NCNN 和 YOLOV8 以便在你的项目中使用:
- 将 NCNN-20231027-android-vulkan 目录下的文件复制到 NCNN-YOLOV8/app/src/main/jni 目录下。
- 修改 NCNN-YOLOV8/app/src/main/jni 目录下的 CMakeLists.txt 文件,添加以下内容:
include_directories(${NCNN_DIR}/include)
link_directories(${NCNN_DIR}/lib)
- 将下载的 YOLOV8 模型文件复制到 NCNN-YOLOV8/app/src/main/assets 目录下。
编写 Java 代码
完成了配置工作,现在需要编写一些 Java 代码来处理图像并执行检测:
- 在 NCNN-YOLOV8/app/src/main/java/com/example/ncnn_yolov8 包下创建 MainActivity.java 文件。
- 在 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]);
}
}
}
运行应用程序
所有准备工作就绪后,是时候让你的应用程序大显身手了:
- 连接你的手机,启用开发者模式和 USB 调试。
- 点击 Android Studio 工具栏上的“Run”按钮,选择你的手机作为运行设备。
- 应用程序将安装到你的手机上,并自动启动。
- 点击“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,你可以开发广泛的视觉识别应用程序,包括物体检测、图像分类和人脸识别。