Android工程中使用ncnn进行yolo识别
参考资料https://github.com/FeiGeChuanShu/ncnn-android-yolov8/tree/main/ncnn-android-yolov8将ncnn-android-yolov8称为A工程我自己的工程称为B工程1.下载ncnn-android-yolov8工程将A中的ncnn-20230223-android-vulkan、yolo.h、yolo.cpp放入B的app/src/main/cpp/目录下。这里用不到摄像头去掉ndkcamera.h、ndkcamera.cpp。yolov8ncnn.cpp是JNI接口文件B中已经有了否则会冲突。2.将A的Assets目录yolov8n.bin、yolov8n.param、yolov8s.bin、yolov8s.param复制到B的app/src/main/3.修改CMakeList.txt包括了ffmpeg、opencv、ncnn如果用不上可删除一部分注意ffmpeg放到app/src/main/cpp/目录下cmake_minimum_required(VERSION 3.10) project(rtspplayerforandroid) # 【第一块】全局编译标准、OpenMP 放最顶部 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(OpenMP REQUIRED) if(OpenMP_FOUND) set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS} -static-openmp) set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS} -static-openmp) endif() # 【第二块】NCNN 先配置提前加入头文件路径关键修复 set(ncnn_DIR ${CMAKE_SOURCE_DIR}/ncnn-20230223-android-vulkan/${ANDROID_ABI}/lib/cmake/ncnn) find_package(ncnn REQUIRED) # ncnn头文件路径提前加入编译源码时就能搜到platform.h/net.h/mat.h include_directories(${ncnn_INCLUDE_DIRS}) # 【第三块】OpenCV配置 set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/opencv-mobile-4.6.0-android/sdk/native/jni) find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) # 【第四块】FFmpeg 预编译库 头文件 set(JNI_LIBS_DIR ${CMAKE_SOURCE_DIR}/ffmpeg) include_directories(${JNI_LIBS_DIR}/${ANDROID_ABI}/include) add_library(avutil SHARED IMPORTED) set_target_properties(avutil PROPERTIES IMPORTED_LOCATION ${JNI_LIBS_DIR}/${ANDROID_ABI}/lib/libavutil.so ) add_library(swresample SHARED IMPORTED ) set_target_properties(swresample PROPERTIES IMPORTED_LOCATION ${JNI_LIBS_DIR}/${ANDROID_ABI}/lib/libswresample.so ) add_library(swscale SHARED IMPORTED ) set_target_properties(swscale PROPERTIES IMPORTED_LOCATION ${JNI_LIBS_DIR}/${ANDROID_ABI}/lib/libswscale.so ) add_library(avcodec SHARED IMPORTED ) set_target_properties(avcodec PROPERTIES IMPORTED_LOCATION ${JNI_LIBS_DIR}/${ANDROID_ABI}/lib/libavcodec.so ) add_library(avformat SHARED IMPORTED ) set_target_properties(avformat PROPERTIES IMPORTED_LOCATION ${JNI_LIBS_DIR}/${ANDROID_ABI}/lib/libavformat.so ) add_library(avfilter SHARED IMPORTED ) set_target_properties(avfilter PROPERTIES IMPORTED_LOCATION ${JNI_LIBS_DIR}/${ANDROID_ABI}/lib/libavfilter.so ) # avdevice 如果你没用到可以注释避免路径不存在报错 # add_library(avdevice SHARED IMPORTED ) # set_target_properties(avdevice PROPERTIES IMPORTED_LOCATION ${JNI_LIBS_DIR}/${ANDROID_ABI}/lib/libavdevice.so ) # 【第五块】现在才创建主库此时所有头文件路径全部加载完毕 add_library( rtspplayerforandroid SHARED native-lib.cpp CustomPlayer.cpp yolo.cpp ) # 【第六块】系统日志库 find_library(log-lib log) # 【第七块】统一链接所有依赖补齐所有ffmpeg库 target_link_libraries( rtspplayerforandroid avutil swresample swscale avcodec avformat avfilter # avdevice ncnn ${OpenCV_LIBS} OpenMP::OpenMP_CXX android mediandk ${log-lib} )4.添加接口loadModel加载模型public native boolean loadModel(AssetManager mgr, int modelid, int cpugpu);#include android/asset_manager_jni.h #include android/native_window_jni.h #include android/native_window.h #include android/bitmap.h #include android/log.h #include jni.h #include string #include vector #include platform.h #include benchmark.h #include yolo.h #include opencv2/core/core.hpp #include opencv2/imgproc/imgproc.hpp #if __ARM_NEON #include arm_neon.h #endif // __ARM_NEON ...... Yolo* g_yolo 0; ncnn::Mutex lock; extern C JNIEXPORT jboolean JNICALL Java_com_skydroid_rcsdkdemo_MyPlayer_loadModel(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[] { 320, 320, }; const float mean_vals[][3] { {103.53f, 116.28f, 123.675f}, {103.53f, 116.28f, 123.675f}, }; const float norm_vals[][3] { { 1 / 255.f, 1 / 255.f, 1 / 255.f }, { 1 / 255.f, 1 / 255.f, 1 / 255.f }, }; const char* modeltype modeltypes[(int)modelid]; int target_size target_sizes[(int)modelid]; bool use_gpu (int)cpugpu 1; // reload { ncnn::MutexLockGuard g(lock); if (use_gpu ncnn::get_gpu_count() 0) { // no gpu delete g_yolo; g_yolo 0; } else { if (!g_yolo) g_yolo new Yolo; g_yolo-load(mgr, modeltype, target_size, mean_vals[(int)modelid], norm_vals[(int)modelid], use_gpu); } } return JNI_TRUE; }在JNI_OnUnload添加{ ncnn::MutexLockGuard g(lock); delete g_yolo; g_yolo 0; }5.Java加载模型myPlayer new MyPlayer(); myPlayer.loadModel(getAssets(),0,0);6.在CustomPlayer.cpp加入识别代码注意yolo.detect默认mat为rgb如果是RGBA格式需要修改yolo.detect函数#include yolo.h extern Yolo* g_yolo; extern ncnn::Mutex lock; ...... if (g_yolo) { std::vectorObject objects; g_yolo-detect(mat, objects, 0.25f, 0.45f); g_yolo-draw(mat, objects); }将ncnn::Mat::PIXEL_RGB2BGR改为ncnn::Mat::PIXEL_RGBA2BGR

相关新闻

下一代企业操作系统:当BI、指标中心与AI Agent融为一体

下一代企业操作系统:当BI、指标中心与AI Agent融为一体

导语 很多企业在数字化建设过程中会有一个认知误区:把采购多套数据工具的叠加,等同于搭建了完整的数据驱动体系。但实际上,「企业级数据工具叠加」和「一体化企业数据操作系统」有着本质区别:前者是多个独立工具的简单拼接&#x…

2026/7/29 11:49:19 阅读更多 →
权限治理的三层防线:从数据集到字段级,规模化推广如何守住安全底线

权限治理的三层防线:从数据集到字段级,规模化推广如何守住安全底线

导语 当审计人员坐到你面前,第一个问题往往不是"你们的看板做得怎么样",而是"过去一年,谁在什么时间、看过哪些数据、这些访问是否都在授权范围内"。等保2.0对访问控制、安全审计的分级要求,以及GDPR对"…

2026/7/29 11:49:19 阅读更多 →
DownGit:GitHub精准下载终极指南,3步告别整个仓库克隆烦恼 [特殊字符]

DownGit:GitHub精准下载终极指南,3步告别整个仓库克隆烦恼 [特殊字符]

DownGit:GitHub精准下载终极指南,3步告别整个仓库克隆烦恼 🚀 【免费下载链接】DownGit github 资源打包下载工具 项目地址: https://gitcode.com/gh_mirrors/dow/DownGit 你是不是也遇到过这样的烦恼?在GitHub上发现一个很…

2026/7/29 11:48:19 阅读更多 →

最新新闻

DSP/BIOS RTOS内核深度解析:从架构设计到实时数据流处理实践

DSP/BIOS RTOS内核深度解析:从架构设计到实时数据流处理实践

1. 项目概述:为什么我们需要一个为DSP量身定制的RTOS内核?如果你在嵌入式领域,特别是信号处理方向摸爬滚打过几年,大概率绕不开德州仪器(TI)的TMS320系列DSP。这些芯片性能强悍,但早期的开发模式…

2026/7/29 11:57:23 阅读更多 →
终极文字转手写工具:3分钟让电子文档拥有真实笔迹的完整指南

终极文字转手写工具:3分钟让电子文档拥有真实笔迹的完整指南

终极文字转手写工具:3分钟让电子文档拥有真实笔迹的完整指南 【免费下载链接】text-to-handwriting So your teacher asked you to upload written assignments? Hate writing assigments? This tool will help you convert your text to handwriting xD 项目地…

2026/7/29 11:57:23 阅读更多 →
免费图表工具终极指南:draw.io桌面版,你的跨平台绘图软件新选择

免费图表工具终极指南:draw.io桌面版,你的跨平台绘图软件新选择

免费图表工具终极指南:draw.io桌面版,你的跨平台绘图软件新选择 【免费下载链接】drawio-desktop Official electron build of draw.io 项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop 还在为寻找一款功能强大、完全免费且跨平…

2026/7/29 11:57:23 阅读更多 →
字符串匹配算法:KMP、Boyer-Moore与AC自动机详解

字符串匹配算法:KMP、Boyer-Moore与AC自动机详解

1. 字符串匹配算法概述字符串匹配是计算机科学中最基础也最常用的操作之一。简单来说,就是在主串(文本)中查找一个子串(模式)出现的位置。这个看似简单的任务在实际应用中却有着极高的性能要求——从文本编辑器中的查找…

2026/7/29 11:57:23 阅读更多 →
储能 PCS 储能变流器测试架构设计:双向电源 KS983X 如何覆盖并网/离网工况

储能 PCS 储能变流器测试架构设计:双向电源 KS983X 如何覆盖并网/离网工况

一、PCS 为什么比普通电源难测 储能变流器(PCS)本质是"会思考的双向变流桥":电网好时它并网充电/放电,电网晃时它切离网带载,电网没了它还能黑启动。这三个角色,决定了测试要覆盖并网性能、离网…

2026/7/29 11:57:23 阅读更多 →
终极免费激活指南:KMS智能激活工具完整使用教程

终极免费激活指南:KMS智能激活工具完整使用教程

终极免费激活指南:KMS智能激活工具完整使用教程 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活和Office办公软件激活而烦恼吗?KMS_VL_ALL_AIO是一…

2026/7/29 11:56:23 阅读更多 →

日新闻

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:00:23 阅读更多 →
AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础 在上一期「AI编程系列」中,我们学习了如何构建一个基础的 AI 问答系统,通过简单的输入输出让模型回应问题。但现实世界中的 AI 应用往往需要处理更复杂的场景:…

2026/7/29 0:00:23 阅读更多 →
AI智能体开发实战:从工具调用到企业级部署

AI智能体开发实战:从工具调用到企业级部署

1. 从被动问答到主动执行:AI Agent的范式转变过去两年,大语言模型最显著的应用形态是聊天机器人——用户提问,AI回答。但真正的生产力革命发生在2023年下半年:当AI学会主动调用工具完成任务时,生产力工具的历史被彻底改…

2026/7/29 0:00:23 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻