iOS开发之机器学习框架MediaPipe(5)【转载】

书接上回:iOS开发之机器学习框架MediaPipe(4)_hbblzjy的博客-CSDN博客

研究了这么长时间,终于可以写一下如何生成想要的功能包framework,然后放入自己的项目中了。

首先,源码中,每个Demo文件都有对应的BUILD文件,其实这个文件中的配置,就是为了能运行每一个不同的Demo。

查看helloworld中的BUILD文件,分析源码:


   
   
  1. load(
  2. "@build_bazel_rules_apple//apple:ios.bzl",
  3. "ios_application",
  4. ) # 加载编译对应的bazel,加载ios_application,也就是编译app对应的数据配置
  5. load(
  6. "//mediapipe/examples/ios:bundle_id.bzl",
  7. "BUNDLE_ID_PREFIX",
  8. "example_provisioning",
  9. ) # 加载源码中对应的文件,加载宏定义,加载之前配置开发者生成的provisioning文件
  10. licenses([ "notice"])
  11. MIN_IOS_VERSION = "11.0" # 宏定义
  12. alias(
  13. name = "helloworld",
  14. actual = "HelloWorldApp",
  15. ) # demo对应的文件夹名,demo名称
  16. ios_application(
  17. name = "HelloWorldApp",
  18. app_icons = [ "//mediapipe/examples/ios/common:AppIcon"],
  19. bundle_id = BUNDLE_ID_PREFIX + ".HelloWorld",
  20. families = [
  21. "iphone",
  22. "ipad",
  23. ],
  24. infoplists = [
  25. "//mediapipe/examples/ios/common:Info.plist",
  26. "Info.plist",
  27. ],
  28. minimum_os_version = MIN_IOS_VERSION,
  29. provisioning_profile = example_provisioning(),
  30. deps = [ ":HelloWorldAppLibrary"],
  31. ) # 配置app对应的相关参数值,这些值iOS开发者应该都能理解
  32. objc_library(
  33. name = "HelloWorldAppLibrary",
  34. data = [
  35. "//mediapipe/graphs/edge_detection:mobile_gpu_binary_graph",
  36. ],
  37. deps = [
  38. "//mediapipe/examples/ios/common:CommonMediaPipeAppLibrary",
  39. "//mediapipe/graphs/edge_detection:mobile_calculators",
  40. ],
  41. ) # 配置依赖的库文件

更多具体参数含义,请参考bazel相关apple编译规范 

前面其实已经可以运行不同功能的Demo了,那是一种真机测试的方式之一,还有一种方法,就是利用命令行,生成对应Demo的ipa,然后安装到手机上运行。(在mediapipe目录下执行)

bazel build -c opt --config=ios_arm64 mediapipe/examples/ios/selfiesegmentationgpu:SelfieSegmentationGpuApp
   
   

如果在终端执行的命令报错,说明证书或者BUILD文件写的有问题,根据报错内容解决即可。命令执行后,效果如下:

根据输出的内容,在源码文件夹对应的位置可以找到,对应的文件,显示如下:

这样一个Demo的ipa安装到手机上,就可以查看效果了,那么对应的能生成app,那就一定能生成framework,关键就是对BUILD文件的修改,将编译模式ios_application改为ios_framework,然后配置ios_framework对应的参数值,自定义的功能文件要放在对应的examples对应demo的文件夹下,否则找不到,我写了一个例子如下:


   
   
  1. ios_framework(
  2. name = "Mediapipe",
  3. hdrs = [
  4. "CustomTest.h",
  5. ],
  6. bundle_id = BUNDLE_ID_PREFIX + ".SelfieSegmentationGpu",
  7. families = [
  8. "iphone",
  9. "ipad",
  10. ],
  11. infoplists = [
  12. "Info.plist",
  13. ],
  14. minimum_os_version = MIN_IOS_VERSION,
  15. deps = [
  16. ":SelfieSegmentationGpuAppLibrary",
  17. "@ios_opencv//:OpencvFramework",
  18. ],
  19. )

BUILD文件中然后修改其他的参数,比如objc_library,可以添加自己需要的依赖库,还有自定义的文件名,还有依赖其他BUILD需要的库,修改后这样可以保证自己BUILD出的framework是个独立的个体,而且不会生成一些不需要的文件。具体的这里就不详细说了,自己研究或者有疑问留言吧,哈哈哈哈哈哈~

修改好BUILD文件后,依然需要执行上面的命令行,然后就会在之前生成ipa文件夹下,生成对应的:包名.zip 文件,解压就可看到对应的framework,效果如下:

然后就开始迫不及待的放到Demo中运行,结果发现竟然崩了,原因是缺少配置嵌入式框架,于是添加一下,显示如下:

这样Demo就可以运行成功了,剩下的就是方法调用和效果实现了,这里我就不在展示了,大家就具体实践开发吧!

整理研究不易,转载请注明,请联系,谢谢!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值