coreml
Core ML 模型加载、图片推理和模型信息读取。
Core ML 模型推理:列出内置模型、加载、对图片做分类预测。
边界:面向 App 内置的图像分类模型(如 MobileNetV2);不含自定义模型训练、模型转换。预测需要本地图片文件路径。
#模块概览
| 项 | 说明 |
|---|---|
| 导入 | import coreml |
| 适合做什么 | 图片分类、快速识别物体类别 |
| 调用时机 | load_model / predict_image 放在按钮回调 |
| 推荐顺序 | list_models() → load_model(name) → predict_image(model, path) |
| 返回 | Top-5 预测列表,每项含 identifier 与 confidence |
#快速开始
列出可用模型并对一张照片分类:
已复制
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 选图,再预测;结果展示在界面上。
已复制
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) | 模型元数据字典 |
#加载与预测
已复制
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() 获取有效路径 |
| 模型名拼写错误 | FileNotFoundError | 先 list_models() 确认名称 |
在 body() 里自动预测 | 每次刷新重复推理 | 放进按钮回调 |
| 期望 OCR 或条码 | 能力不匹配 | 用 vision 或 vision_helper |
#相关文档
| 文档 | 用途 |
|---|---|
| photos | 选图获取路径 |
| vision_helper | Vision 框架检测与分类 |
| c_extensions | 未内置深度学习包的替代路线 |
#图片推理配方
已复制
import appui
import coreml
def body():
return appui.Form([
appui.Section("Core ML", [
appui.Text("选择模型后在回调中调用 coreml.predict_image"),
])
])
预期效果:打开 AppUI 表单页,后续在按钮回调中加载模型并展示预测结果。
#预期效果
运行示例后,界面应出现文档描述的目标结果;若与预期不符,先看「失败路径」并按返回值或日志排查。