Android 在自己的项目中接入OpenCV+YOLOv8+NCNN : 实现人像分割

这篇具有很好参考价值的文章主要介绍了Android 在自己的项目中接入OpenCV+YOLOv8+NCNN : 实现人像分割。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 前言

通过前两篇文章 Android 导入ncnn-android-yolov8-seg : 实现人体识别和人像分割 、Android ncnn-android-yolov8-seg源码解析 : 实现人像分割 ,我们已经跑起来了程序,也分析了其源码。
接下来,这篇文章我们来实战一下,抽取出Demo的核心代码,在自己的项目中,使用Java层的Camera API,在JNI层使用OpenCV+YOLOv8+NCNN,来实现人体识别和人像分割功能。

实现效果如下,整个图像的是相机的原图,左上角部分,是我们进行人像识别、人像分割后,处理得到的图像 (未做镜像处理,所以暂时和原图左右是相反的)

Android 在自己的项目中接入OpenCV+YOLOv8+NCNN : 实现人像分割,音视频开发,android,opencv,YOLO,人像分割,人体识别,NCNN,YOLO8

>>> 本文的源码demo可以直接看这里 :
Android 基于 OpenCV+YOLOv8+NCNN 实现人像分割 Demo 源码下载

2. 新建项目

2.1 新建主项目

Android 在自己的项目中接入OpenCV+YOLOv8+NCNN : 实现人像分割,音视频开发,android,opencv,YOLO,人像分割,人体识别,NCNN,YOLO8

2.2 新建 Native library

Android 在自己的项目中接入OpenCV+YOLOv8+NCNN : 实现人像分割,音视频开发,android,opencv,YOLO,人像分割,人体识别,NCNN,YOLO8

2.3 在app中添加MyNcnnLib依赖

implementation(project(mapOf("path" to ":MyNcnnLib")))

2.4 配置NDK版本

记得在项目根目录下的local.properties中,配置NDK版本,这里的NDK版本需要在NDK16-NDK20之间

# 这里的路径需修改为你电脑中ndk的具体路径
ndk.dir=C\:\\Developer\\Android_SDK\\ndk\\20.0.5594570

3. 接入OpenCV+YOLOv8+NCNN

3.1 导入NCNN和OpenCV

我们将ncnn-20221128-android-vulkanopencv-mobile-4.6.0-android复制到cpp文件夹下

Android 在自己的项目中接入OpenCV+YOLOv8+NCNN : 实现人像分割,音视频开发,android,opencv,YOLO,人像分割,人体识别,NCNN,YOLO8

3.2 复制cpp文件

yolo.cppyolo.h复制到cpp文件夹下
Android 在自己的项目中接入OpenCV+YOLOv8+NCNN : 实现人像分割,音视频开发,android,opencv,YOLO,人像分割,人体识别,NCNN,YOLO8

3.3 配置Cmake

新版Android StudioCMakeLists.txt的位置和Android Studio 3.6CMakeLists.txt的路径位置不一样,所以CMakeLists.txt在设置配置的时候,设置的路径也是不一样的。

初始的CMakeLists.txt

cmake_minimum_required(VERSION 3.22.1)


project("myncnnlib")


add_library(${
   CMAKE_PROJECT_NAME} SHARED
        myncnnlib.cpp)

target_link_libraries(${
   CMAKE_PROJECT_NAME}
        android
        log)

配置后的CMakeLists.txt

cmake_minimum_required(VERSION 3.22.1)

project("myncnnlib")

set(OpenCV_DIR ${
   CMAKE_SOURCE_DIR}/opencv-mobile-4.6.0-android/sdk/native/jni)

find_package(OpenCV REQUIRED core imgproc)

set(ncnn_DIR ${
   CMAKE_SOURCE_DIR}/ncnn-20221128-android-vulkan/${
   ANDROID_ABI}/lib/cmake/ncnn)

find_package(ncnn REQUIRED)

add_library(${
   CMAKE_PROJECT_NAME} SHARED
        myncnnlib.cpp
        yolo.cpp)

target_link_libraries(${
   CMAKE_PROJECT_NAME}
        ncnn
        camera2ndk
        mediandk
        ${
   OpenCV_LIBS}
        android
        log)

4. 创建JNI接口

4.1 新建JNI接口

NcnnNativeLib.kt中,新增两个JNI方法

/**
 * 初始化NCNN
 *
 * @return 是否成功
 */
external fun load(mgr: AssetManager, modelid: Int, cpugpu: Int): Boolean

/**
 * 人像检测
 *
 */
external fun detect(data: ByteArray?, width: Int, height: Int, cameraId: Int): ByteArray

4.2 cpp中增加对应JNIf方法

myncnnlib.cpp中,增加对应的JIN方法

extern "C"
JNIEXPORT jboolean JNICALL
Java_com_heiko_myncnnlib_NativeLib_load(JNIEnv *env, jobject thiz, jobject assetManager,
                                        jint modelid, jint cpugpu) {
   

}
extern "C"
JNIEXPORT jbyteArray JNICALL
Java_com_heiko_myncnnlib_NativeLib_detect(JNIEnv *env, jobject thiz, jbyteArray data_,
                                          jint w, jint h, jint camera_id) {
   

}

4.3 声明include

#include <jni.h>
#include <string>
#include <platform.h>
#include <benchmark.h>
#include <android/asset_manager.h>
#include <android/asset_manager_jni.h>
#include "opencv2/opencv.hpp"
#include <string>
#include <iostream>
#include "yolo.h"

static Yolo *g_yolo = 0;
static ncnn::Mutex lock;

4.4 加载模型

这里将Demo中的loadModel中的代码,全部拷贝过来文章来源地址https://www.toymoban.com/news/detail-738988.html

extern "C"
JNIEXPORT jboolean JNICALL
Java_com_heiko_myncnnlib_NativeLib_load(JNIEnv* env, jobject thiz, jobject assetManager, jint modelid, jint cpugpu)
{
   
    if (modelid < 0 || modelid > 6 || cpugpu < 0 || cpugpu > 1)
    {
   
        return JNI_FALSE;
    }

    AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);

    __android_log_print(ANDROID_LOG_DEBUG, "ncnn", "loadModel %p", mgr);

    const char* modeltypes[] =
            {
   
                    "n",
                    "s",
            };

    const int target_sizes[] 

到了这里,关于Android 在自己的项目中接入OpenCV+YOLOv8+NCNN : 实现人像分割的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • yolov8 opencv dnn部署自己的模型

    源码地址 本人使用的opencv c++ github代码,代码作者非本人 使用github源码结合自己导出的onnx模型推理自己的视频 推理条件 windows 10 Visual Studio 2019 Nvidia GeForce GTX 1070 opencv4.7.0 (opencv4.5.5在别的地方看到不支持yolov8的推理,所以只使用opencv4.7.0) 导出yolov8模型 yolov8版本: version = ‘8.

    2024年01月24日
    浏览(35)
  • yolov8训练自己的数据集与转成onnx利用opencv进行调用

    文章目录 系列文章目录 前言 一、利用labeling进行数据的创建? 二、使用步骤 1.引入库 2.读入数据 总结 首先需要创建适合yolov8的数据模式,需要将xml文件转成txt文件。修改yolov8的配置文件实现模型的训练 提示:以下是本篇文章正文内容,下面案例可供参考 代码如下(示例)

    2024年02月06日
    浏览(36)
  • Android 导入ncnn-android-yolov8-seg : 实现人体识别和人像分割

    上篇文章我们在 Android 中使用 OpenCV 实现了人脸识别,这篇文章我们使用 OpenCV+YOLOv8+NCNN 来实现人像分割的功能。 首先来看下效果,这里会识别出人体,并会用蓝色的框框出来,并会有标签标注识别出的物体是什么,概率是多少。 识别出的人像,会覆盖上一层粉红色,其实就

    2024年02月04日
    浏览(26)
  • yolov8seg模型转onnx转ncnn

    yolov8是yolo的最新版本,可做图像分类,目标检测,实例分割,姿态估计。 主页地址 这里测试一个分割模型。 模型如下 选yolov8 n -seg模型,转成onnx,再转ncnn测试。 yolov8 s -seg的ncnn版可以直接用这个 如果用python版的onnx,可以直接用notebook转,然后下载。 python版onnx代码参考 但

    2024年02月05日
    浏览(30)
  • 【深度学习】在虚拟机Ubuntu中安装Anaconda+pycharm+跑通YOLOv8项目源代码+训练自己的数据集

    因为一些特殊的原因,需要从之前CPU的win跑代码转移到GPU的虚拟机Ubuntu里面去跑,故在此记录一下安装软件和搭建环境的一些步骤,码一下以便以后查看。 因为虚拟机提前安装了英伟达驱动,在此就不赘述驱动程序的安装了。 ps: 如果在终端输入 显示以下即为驱动程序已安

    2024年02月21日
    浏览(34)
  • 【Android Studio】【NCNN】YOLOV5安卓部署

    坑非常多,兄弟们,我已经踩了三天的坑了,我这里部署了官方的yolov5s和我自己训练的yolov5n的模型 下载Android Studio,配置安卓开发环境,这个过程比较漫长。 安装cmake,注意安装的是cmake3.10版本。 根据手机安卓版本选择相应的安卓版本,我的是红米K30Pro,安卓12。 使用腾讯

    2024年02月20日
    浏览(85)
  • [C++]使用yolov8的onnx模型仅用opencv和bytetrack实现目标追踪

    【官方框架地址】 yolov8: https://github.com/ultralytics/ultralytics bytetrack: https://github.com/ifzhang/ByteTrack 【算法介绍】 随着人工智能技术的不断发展,目标追踪已成为计算机视觉领域的重要研究方向。Yolov8和ByTetrack作为当前先进的算法,当它们结合使用时,能够显著提升目标追踪的准

    2024年01月24日
    浏览(35)
  • YOLOv8+PyQt+OpenCV实现数字式仪表读数和指针式仪表读数识别(二)

    章(一)内容为不同种类仪表识别和数字式仪表读数识别,这一章介绍 两种指针式仪表读数识别方法 ,一种为 非360度指针式仪表 ,一种为 360度指针式仪表 。效果如下所示。 指针式仪表识别效果 360度指针式仪表识别效果  数字式仪表识别效果 数字式仪表和指针式仪表检测视

    2024年03月18日
    浏览(51)
  • YOLOv8+PyQt+OpenCV实现数字式仪表读数和指针式仪表读数识别(一)

    最近放假看到YOLOv8一直在更新,想着在家无聊把本科毕设重新做了下,之前用的是YOLOv5,下载了YOLOv8最新版把项目迁移了过来,相比于v5来说YOLOv8变化还是挺大的,功能更加集成了,话不多说,直接上 结果图片和最后的检测视频 。 数字式仪表识别效果 指针式仪表识别效果

    2024年02月19日
    浏览(26)
  • YOLOv8训练自己的分割数据集

    Ultralytics YOLOv8 是由 Ultralytics 开发的一个前沿的 SOTA 模型。它在以前成功的 YOLO 版本基础上,引入了新的功能和改进,进一步提升了其性能和灵活性。YOLOv8 基于快速、准确和易于使用的设计理念,使其成为广泛的目标检测、图像分割和图像分类任务的绝佳选择。YOLOv5 自

    2024年02月04日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包