AR应用中有个交互方式是:用户在摄像头前方摆出数字1-9的手指,应用根据不同数字显示不同的AR内容。
Turi Create是苹果的深度学习工具,可以实现判断手指是什么数字,并导出模型给iOS应用使用。
准备工作
将搜集的数字1-9的手指形状图片按文件夹1-9分类好
Turi Create使用
import turicreate as tc
# 读取图片文件夹Images
data = tc.image_analysis.load_images('Images', with_path=True)
# 设置分类标签,文件夹1的label为数字1,文件夹2的label为数字2
data['label'] = data['path'].apply(lambda path: '1' if '/1' in path else '2' \
if '/2' in path else '3' \
if '/3' in path else '4' \
if '/4' in path else '5' \
if '/5' in path else '6' \
if '/6' in path else '7' \
if '/7' in path else '8' \
if '/8' in path else '9')
# 分成训练数据、测试数据,比例8:2
train_data, test_data = data.random_split(0.8)
# 训练
model = tc.image_classifier.create(train_data, target='label')
# 预测
predictions = model.predict(test_data)
# 评估
metrics = model.evaluate(test_data)
# 保存
model.save('mymodel.model')
# 导出
model.export_coreml('mymodel.mlmodel')
这句代码执行比较慢,先从官方网站下载机器学习模型ResNet50,文件大小97.8MB,然后开始训练
model = tc.image_classifier.create(train_data, target='label')
可以换成机器学习模型squeezenet_v1.1,文件大小4.7MB
model = tc.image_classifier.create(train_data, target='label', model='squeezenet_v1.1')
resnet-50和squeezenet_v1.1的区别:
resnet-50:预测准确率高,但导出的模型文件大,模型文件需包含在应用中,使应用大小增加。
squeezenet_v1.1:预测准确率低,但导出的模型文件非常小,适合对准确率要求不高的场景。