能否在Kotlin Multiplatform中基于摄像头运行共享目标检测模型?
问题解答
摄像头流的推荐类型
不管是iOS还是Android平台,优先将摄像头采集的帧转换为统一的原始RGB(或BGR)字节数组(数据类型为uint8_t,维度通常为[高度, 宽度, 3])。
- iOS平台:从
AVCaptureSession获取的CMSampleBuffer,可以通过CVPixelBuffer提取像素数据,转换为RGB格式的字节数组,避免直接使用UIImage这类平台特定封装类型。 - Android平台:从CameraX/Camera2获取的
Image对象,可通过Image.Plane提取YUV数据后转成RGB数组,同样不要依赖Bitmap作为跨平台传输的载体。
选择原始字节数组的原因是它能脱离平台API限制,让后续的模型预处理、推理逻辑完全复用。
跨平台统一模型运行逻辑的实现方案
完全可以实现跨平台统一的目标检测模型运行逻辑,核心思路是用跨平台推理框架+共享的C/C++核心代码:
选型跨平台推理框架:
优先用TensorFlow Lite或PyTorch Mobile,两者都原生支持iOS和Android,提供一致的模型加载、张量操作API,且性能适配移动端硬件(支持GPU/NNAPI/NPU加速)。统一核心逻辑:
将目标检测的预处理、推理、后处理核心逻辑用C/C++编写:- 预处理:接收原始RGB字节数组,完成resize、归一化(比如把像素值从0-255转成0-1或-1到1)、通道顺序调整(如RGB转BGR)等操作,输出符合模型输入要求的张量。
- 推理:调用跨平台框架的API加载模型,传入预处理后的张量执行推理。
- 后处理:解析模型输出的张量(比如锚框、置信度、类别ID),过滤低置信度结果,输出统一格式的检测结果(如包含边界框坐标、类别、得分的结构体)。
平台桥接:
- iOS端:用Objective-C封装C/C代码,提供OC接口供Swift/OC调用,负责摄像头数据采集和UI层渲染检测结果。
- Android端:用JNI封装C/C++代码,提供Java/Kotlin接口,同样负责摄像头数据采集和UI展示。
如果用Flutter、React Native这类跨平台UI框架,也可以通过自定义插件封装上述C/C++核心逻辑,直接在跨平台代码中调用。
类似方案的开发者实践情况
这类方案已经被大量开发者和工业级应用采用:
- 很多移动端AI应用(如相机美颜、安防监控、扫码工具)的目标检测模块,都采用了“原生摄像头采集+跨平台C/C++推理核心”的架构。
- 开源社区里也有不少成熟示例,比如基于TensorFlow Lite的跨平台目标检测项目,将C++的推理逻辑封装成iOS和Android的静态库,两边共享同一套核心代码,仅在平台层做适配。
这种架构的优势是最大化复用代码、保证跨平台检测效果一致性,同时兼顾移动端性能。
内容的提问来源于stack exchange,提问作者Jubiler
相关产品推荐
相关产品推荐

