PythonIDE Docs
中文
简体中文

coreml

Core ML 模型加载、图片推理和模型信息读取。

Core ML 模型推理:列出内置模型、加载、对图片做分类预测。

边界:面向 App 内置的图像分类模型(如 MobileNetV2);不含自定义模型训练、模型转换。预测需要本地图片文件路径。

#模块概览

说明
导入import coreml
适合做什么图片分类、快速识别物体类别
调用时机load_model / predict_image 放在按钮回调
推荐顺序list_models()load_model(name)predict_image(model, path)
返回Top-5 预测列表,每项含 identifierconfidence

#快速开始

列出可用模型并对一张照片分类:

python
import coreml

print("可用模型:", coreml.list_models())
model = coreml.load_model("MobileNetV2")
print(coreml.model_info(model))

results = coreml.predict_image(model, "/path/to/photo.jpg")
for item in results[:3]:
    print(item.get("identifier"), item.get("confidence"))

#AppUI 示例

先用 photos 选图,再预测;结果展示在界面上。

python
import appui
import coreml
import photos

state = appui.State(
    models="—",
    status="尚未预测",
    top_label="—",
)


def refresh_models():
    names = coreml.list_models() or []
    state.models = ", ".join(names[:3]) + ("…" if len(names) > 3 else "")


def predict_selected():
    refresh_models()
    names = coreml.list_models() or []
    if not names:
        state.status = "无可用模型"
        return

    image = photos.pick_image()
    if not image:
        state.status = "未选择图片"
        return

    import os
    path = os.path.join(os.path.expanduser("~/Documents"), "coreml-pick.jpg")
    image.save(path, format="JPEG")

    model = coreml.load_model(names[0])
    results = coreml.predict_image(model, path) or []
    if not results:
        state.batch_update(status="预测失败", top_label="—")
        return

    best = results[0]
    state.batch_update(
        status=f"共 {len(results)} 条结果",
        top_label=f"{best.get('identifier')} ({best.get('confidence', 0):.2f})",
    )


def body():
    return appui.NavigationStack(
        appui.Form([
            appui.Section("预测", [
                appui.Button("选图并分类", action=predict_selected)
                .button_style("bordered_prominent"),
            ]),
            appui.Section("状态", [
                appui.LabeledContent("模型", value=state.models),
                appui.LabeledContent("结果", value=state.status),
                appui.LabeledContent("Top-1", value=state.top_label),
            ]),
        ]).navigation_title("Core ML")
    )


appui.run(body, state=state)

#API 参考

#速查

API作用
list_models()可用模型名列表
load_model(name)加载模型,返回句柄
predict_image(model, image_path)图片分类 → Top-5 列表
model_info(model)模型元数据字典

#加载与预测

python
model = coreml.load_model("MobileNetV2")
info = coreml.model_info(model)
results = coreml.predict_image(model, "/path/photo.jpg")
# [{"identifier": "...", "confidence": 0.92}, ...]

模型句柄为 _ModelHandle,可用 model.name 查看名称。加载失败抛 FileNotFoundError;原生能力入口不可用抛 RuntimeError


#常见错误

错误写法后果修正
图片路径不存在预测失败先用 photos.pick_image() 获取有效路径
模型名拼写错误FileNotFoundErrorlist_models() 确认名称
body() 里自动预测每次刷新重复推理放进按钮回调
期望 OCR 或条码能力不匹配visionvision_helper

#相关文档

文档用途
photos选图获取路径
vision_helperVision 框架检测与分类
c_extensions未内置深度学习包的替代路线

#图片推理配方

python
import appui
import coreml


def body():
    return appui.Form([
        appui.Section("Core ML", [
            appui.Text("选择模型后在回调中调用 coreml.predict_image"),
        ])
    ])

预期效果:打开 AppUI 表单页,后续在按钮回调中加载模型并展示预测结果。

#预期效果

运行示例后,界面应出现文档描述的目标结果;若与预期不符,先看「失败路径」并按返回值或日志排查。