基于ncnn的YOLOv5 demo iOS端问题汇总

写在最前边(请务必看下)

  1. 写这篇文章的主要目的是分享一下自己在运行YOLOv5_NCNN这个demo时遇到的各种问题,如果不是这个demo的话,可能无法解决你的问题,仅做参考。
  2. 几乎所有的问题和解决方案,YOLOv5_NCNNREADMEissues上边都有说明,所以建议大家以后在遇到问题的时候,不妨先看看官方的说明文档上是否能找到解决方案~
  3. 本篇文章只针对demo进行说明,如果想了解什么是YOLOncnn,可以自行搜索。
  4. 本篇文章会一步一步的帮助大家把项目运行起来~
  5. 如果本篇文章有帮助到你,希望你顺手点个赞,满足一下我的虚荣心~😁

下面进入正题~

运行环境

  • Xcode:15.1
  • MacOS:14
  • iOS:17.1.2
  • 设备型号:iPhone 15

亲测项目是可以在最新的设备和系统下运行的

前期准备

首先,我们先把demo下载到本地,然后按照README中的说明,将android_YOLOV5_NCNN\app\src\main\assets目录下的.param.bin文件复制到iOS_YOLOv5NCNN\YOLOv5NCNN\res目录下。

运行一下,果然有报错:


提示找不到opencv2的各种头文件,看了一下,项目中果然没有opencv2.framework

要解决这个问题,我们需要去github上边下载OpenCV

我下载的是说明文档中提到的4.3.0版本,大家可以根据需要下载其他的版本,或者下载作者提到的轻量级OpenCV:opencv-mobile

opencv2.framework添加到项目中,重新运行,再次报错:

这个错误作者有提到过,需要去ncnn官网下载或自行编译.framework(20201208)替换到工程中。

这里建议将glslangopenmpncnn,三个framework全部替换,如果只替换ncnn,则可能会引发其他问题,这个下边会提到。

需要提一下的是,网址中可下载的framework有四种:


bitcode就不说了,这里说下vulkan。大概的意思就是,vulkan库是用来支持GPU运行的,如果你需要运行GPU,就要下载vulkan版本的库,默认的库是不支持GPU的。

这里咱们下载不包含vulkan的基本库,添加到项目中,运行一下,这次没有错误了...才怪!

解决Expected identifier错误

按照说明文档配置了项目,运行还是会报错:


这个错误的大致意思是,编译器无法识别这个NO标识,仔细查看了一下,发现这三个错误都是在opencv2.framework的头文件中。

然后我发现,在报错的.hpp文件的最上方,有一个警告信息:

翻译过来就是,Apple的这个'NO'的宏定义,可能会导致构建冲突,需要在引入Apple的任何头文件之前先引入这个头文件。

也就是说,我们需要添加一个pch文件,然后将用到的opencv2头文件引入:

#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif

如果这时候还有错误,那大概是openmp.framework没有替换,可下载对应版本的库替换掉项目中的库。

好了,这下终于编译成功了!

unknown file type in 'glslang.framework/glslang'

如果你没有替换glslang.framework,并且你的xcode是15以上的版本的话,则可能会出现unknown file type in 'glslang.framework/glslang'的问题。

打开项目中的glslang.framework,右键显示包内容查看,文件目录如下:

双击打开glslang文件,发现该文件存储的是真正的库文件的路径(其他文件也是一样):

打开其他的framework对比发现,包里的对应文件是替身,而不是路径:

所以,报错的原因大概是,xcode 15之后,不再支持这种格式的framework了(亲测xcode 14.2没问题)。

将这个库替换掉之后,问题就解决了。

如何使用GPU模式(vulkan)

写在前边,这个demo的GPU模式可能有些问题,项目在CPU模式下运行是没问题的,但是切换到GPU模式就会crash。

我猜测应该还是各种库的版本问题,但是我尝试的将各种库替换了不同的版本,还是没有解决问题。

我打算后续继续尝试更多的版本搭配,若还是不能解决的话,就试着问下作者大大,如果有谁解决了这个问题,可以的话请告知在下解决办法~

接着说,要使用GPU模式,第一步要将库替换成vulkan版本的。

替换后尝试运行,提示'vulkan/vulkan.h' file not found

虽然其他framework都替换成vulkan版本的了,但我们的项目里缺少vulkan sdk本身,所以找不到相关头文件。

如何安装vulkan sdkncnn官网的FAQ部分有说明:

按照提示,打开对应的网址:

目前能下载到的最老版本是2021-12-03发布的1.2.198.1,和其他sdk作者推荐的版本发布日期(20201208)相差了将近一年,为了避免版本差异过大可能导致的未知问题,这里我们就下载最老的版本。

下载并安装完毕后,打开安装目录:


路径一般是“/Users/你的账户名/VulkanSDK/版本号”

按照说明,将MoltenVK.xcframework/ios-arm64/libMoltenVK.a(iOS只支持真机)和头文件include添加到项目当中:

别忘了在Header Search Path里添加对应头文件的路径,不然还是会报vulkan.h找不到的错的:

我遇到的问题都在这里了,如果大家还遇到了别的问题,欢迎留言讨论~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容