You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KMM iOS共享模块使用MLKit文字识别遇类型不匹配问题

解决KMM iOS共享模块MLKit文字识别的类型不匹配问题

问题根源

你遇到的MLKVisionImage与MLKCompatibleImageProtocol类型不匹配,本质是KMM的cinterop绑定未自动识别MLKVisionImage对该协议的实现,或是初始化/转换环节的类型映射问题。下面是具体解决方案:


1. 确认CocoaPods依赖配置与绑定生成

先检查iOS模块的build.gradle.kts中MLKit的pod配置是否正确,确保使用稳定版本:

ios {
    binaries {
        framework { baseName = "shared" }
    }
    cocoapods {
        pod("GoogleMLKit/TextRecognition") {
            version = "3.2.0" // 推荐使用稳定版本
        }
        pod("Peekaboo") {
            version = "1.2.0" // 替换为你实际使用的版本
        }
    }
}

执行命令重新生成cinterop绑定:

./gradlew clean podInstall

2. 修正VisionImage的类型转换

在iOS模块的actual实现中,显式将MLKVisionImage强转为MLKCompatibleImageProtocol,解决类型不匹配:

import platform.UIKit.UIImage
import platform.Foundation.NSData
import com.google.mlkit.vision.text.MLKTextRecognizer
import com.google.mlkit.vision.common.MLKVisionImage
import com.google.mlkit.vision.common.MLKCompatibleImageProtocol

actual fun recognizeText(imageBytes: ByteArray): String {
    // 将字节数组转为UIImage
    val nsData = NSData.create(bytes = imageBytes, length = imageBytes.size.toULong())
    val uiImage = UIImage.imageWithData(data = nsData) ?: return ""
    
    // 创建VisionImage并强转为协议类型
    val visionImage = MLKVisionImage.imageWithImage(image = uiImage)
    val compatibleImage = visionImage as MLKCompatibleImageProtocol
    
    // 执行文字识别
    val recognizer = MLKTextRecognizer.textRecognizer()
    val result = recognizer.processImage(image = compatibleImage)
    
    return result.text ?: "未识别到文字"
}

3. 验证cinterop绑定的协议关联

如果强转后仍报错,查看生成的cinterop绑定文件(路径:build/cinterop/ios/main/GoogleMLKitTextRecognition.kt),确认MLKVisionImage是否实现了MLKCompatibleImageProtocol。若未关联,尝试更换MLKit版本(比如3.1.0)重新生成绑定。

4. 确认图片字节数组有效性

检查Peekaboo获取的字节数组是否为标准图片格式(JPEG/PNG),可以通过UIImage.imageWithData的返回值是否为null验证,无效的图片数据会导致后续VisionImage初始化异常。


内容的提问来源于stack exchange,提问作者herz88888888

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 17:15:06