近几天笔者深入学习了下机器学习、深度学习,不论是谷歌围棋AIAlphaGo、还是目前使用的阿里云智能语音合成,都非常吸引人。连续多天的理论学习后,总体而言,绝大多数教程都围绕数学算法展开,而实际上我们的需求与算法之间,对新手而言还是非常不容易去匹配的。比如当下的简单图片分类模型。

0. 简介

turicreate是苹果开源的一款人工智能工具,特点是简化了机器学习的开发模型,不必成为深度学习专家,就可以实现目标检测、图像分类、或与图像分类相似的分类。缺点是不支持windows,在wsl2里数次安装无果后,我直接写了个Docker,然后拿来就用。

turicreate的简单性,下面体验过就知道,完全是无脑操作,不需要懂背后的一堆数学模型,是一个比较通用的分类工具。之前学习过一些Pytorch的基础知识,在图像分类面前,目前还比较困难,后续我会逐步学透。

项目开源地址:apple/turicreate

1. 分类模型基本原理

需求:采集图像资源并进行人工处理,实现基本的分类操作,然后利用机器学习预测未知图像。

以连连看游戏为例,想要设计一种自动消除的机器智能,首先要做的就是机器感知出正确的图片,这样才可以输出二维矩阵,进行连连看消除算法。而图片感知这块,有一种理想状态是:截取卡片内中心点,对比RGB信息,如果一样则归为一类;但实际上由于截图不是非常精确或多点类似图片的影响,这种理想状态只适合比较单调色彩的识别上。

因此就有必要借助机器智能来分类了。

2. 实现步骤

A:数据收集和整理分类

turicreate的图片分类非常好操作。在当前目录创建data文件夹,里面放置按标签名命名的图片文件。每个文件夹对应一种分类,内部为具体的已标识的图片。

B: 训练数据

在Windows系统上,运行turicreate的docker版本,然后使用CMD或Vscode进入容器:

docker run -it --name tc -v C:\\Users\\baiyue\\Desktop\\Game自动化:/app baiyuetribe/turicreate

注意替换自己的windows目录。

然后新建train.py。

import turicreate as tc

img_folder = 'data'

# 导入数据

data = tc.image_analysis.load_images(img_folder, with_path=True)

# 使用文件名来做标签

data['label'] = data['path'].apply(lambda path: path.split('/')[len(path.split('/')) - 2])

data.save('doraemon-walle.sframe')

# 百分之八十的数据用于训练,百分之二十用于测试

train_data, test_data = data.random_split(0.8, seed=2)

# 开始训练模型

model = tc.image_classifier.create(train_data, target='label')

# 测试模型

predictions = model.predict(test_data)

metrics = model.evaluate(test_data)

# 输出测试结果

print(metrics['accuracy'])

model.save('my_model_file')

上面代码无需做任何处理,然后运行python train.py进行训练,完成后会在当前目录生成训练结果my_model_file。

此步骤CPU是满负载的,大概40s后出结果。

总分类数为28种,样本有261个图片,最终精度为1.基本够胜任连连看的图片识别了。

C: 预测数据

训练完毕后,我们随机截截取几个新的图片,命名为1,2,3.png,然后用刚才训练的模型去预测。

当前目录创建predict.py文件。

import turicreate as tc

loaded_model = tc.load_model('my_model_file')

def getDataset():

#data = tc.image_analysis.load_images('screenshot', with_path=True)

img_list = [str(i)+'.png' for i in range(1,4)]

result = []

for i in img_list:

data = tc.image_analysis.load_images(i, with_path=True) #图片文件名

result_arr = loaded_model.predict(data)[0]

result.append(result_arr)

return result

with open('result.txt','w',encoding='utf-8') as f:

data = getDataset()

print(data)

f.write(str(getDataset()))

运行python predict.py后,输出预测结果为:['4', '18', '24'].

对比分类图,可见预测结果是非常准确的。

3. 遗留问题

由于不支持Windows,我采用了自制Docker,使用体验上非常好,但是与windows本地交互不方便,比如本地环境下ps.system('docker exec -it tc python /app/train.py')命令就无法正常执行,subprocess也是一样,因此这里就出现了连接阻断。这样的话本地桌面截图就无法调用Docker容器内部的机器模型去识别了。针对这种情况,可以尝试做一个webapi接口,利用url请求传递待检测的图片,容器内部处理后把结果返回过来,就可以解决这种阻断。 事实上这是非常容易实现的方式,毕竟绝大数人工智能,最后都是以API接口的形式对外开放。

佰阅部落 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权

转载请注明原文链接:人工智能图片分类器:turicreate在Windows环境下简明使用教程

turicreate 视频_人工智能图片分类器:turicreate在Windows环境下简明使用教程相关推荐

  1. Windows环境下训练OpenCV分类器

    首先说一下我的经历吧!不想看的可以直跳到教程.之前在树莓派上训练分类器,发现树莓派内存过小,训练几张照片还ok,但是训练十几张照片进程直接就被系统扼杀掉,,所以这次选择用笔记本训练.经过测试,用400 ...

  2. (超好用)linux/Windows环境下pdf转图片

    前言:最近开发需要将pdf转图片,我用到两种方法进行转换 方法一: 通过BufferedImage进行pdf转换, 实现:Windows下正常转换,Linux下出现异常报错 展示效果:图片较模糊 Le ...

  3. Windows环境下视频分帧

    鉴于个别同学目前使用的还是windows环境,录屏.分帧方式跟Mac可能有所差别,该简易教程就提供了对于window视频分帧的基本步骤,纯属个人探索,希望以后可以有更好的工具提供给大家使用. 步骤: ...

  4. 人工智能换脸pythonapp小视频_人工智能几行代码实现换脸,python+dlib实现图文教程...

    图像识别技术是信息时代的一门重要的技术,其产生目的是为了让计算机代替人类去处理大量的物理信息.随着计算机技术的发展,人类对图像识别技术的认识越来越深刻.图像识别技术的过程分为信息的获取.预处理.特征抽 ...

  5. 将一个文件夹里面的视频批量转换为图片并保存在同一目录下

    import os import cv2cut_frame = 1 # 多少帧截一次,自己设置就行 save_path = "/media/gpu/00758835-1a92-4611-8a ...

  6. python文件打不开 环境变量错误_【图片】[求助]cmd用环境变量突然打不开文件【python吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 对比了一下英文原版资料,这下更明显了. Running Your Python Scripts from a Command Prompt Actuall ...

  7. 我的世界java版按键教程视频_我的世界(电脑Java版)execute指令教程

    注:该教程基于Java V1.16.3   通常可以兼容1.13+的版本 1.9-1.12可能会有不兼容,出现问题可以在评论区提问.如果1.12及以下的玩家较多,以后会专门出一个针对1.12及以下的教 ...

  8. 机器学习经典算法实践_服务机器学习算法的系统设计-不同环境下管道的最佳实践

    机器学习经典算法实践 "Eureka"! While working on a persistently difficult-to-solve problem, you disco ...

  9. Windows环境下视频文件转成RTSP视频流和RTMP流

    文章目录 一. 需要的工具 二.部署EasyDarwin服务器 三.ffmpeg命令行推rtsp流进行测试 四.采用ffmpeg代码方式推rtsp流到服务器 五.使用nginx搭建RTMP服务器 一. ...

最新文章

  1. 查看mysql版本不一致_MySQL-版本不一致
  2. MATLAB中如何将一幅图像的地理信息写入另一幅图像
  3. 8.腾讯微博Android客户端开发——自动获取验证码(2)
  4. Java 时期格式 星期显示英文
  5. 第五章 Octave 教程-机器学习老师板书-斯坦福吴恩达教授
  6. java getbasicremote_Vue+Java 通过websocket实现服务器与客户端双向通信操作
  7. 拖链电缆 机器人电缆_trvv高柔性拖链电缆
  8. Java如何根据IP获取当前定位
  9. Venkat 演讲翻译:你要清除代码中的异味
  10. 最新数据:中国网民超10亿,中老年群体增速最快
  11. Wamp在重新装机后不想配置
  12. 软件_可用rtmp直播地址20200517
  13. win7查看计算机设置密码,如何查看win7电脑开机密码_win7专业版电脑开机密码怎么查看...
  14. python的多行注释以什么开头_Python的多行注释
  15. 小程序项目:基于微信小程序的超市购物系统——计算机毕业设计
  16. 「教程」Windows程序未响应,怎么分析确认具体原因
  17. 服务端渲染技术之Nuxt.js的详细使用
  18. 【Paper】DTWSequence Analysis
  19. byteTrack数据集categories不规范带来的问题
  20. 百慕大群岛计划发起区块链土地登记系统

热门文章

  1. matlab fromstream,Matlab中的RandStream的应用场景 -转
  2. C语言判断ch是否为大写字母,判断char型变量ch是否为大写字母的C语言表达式是( )....
  3. Android文件类型转换(已适用于Android11)
  4. vue3 antd项目实战——Form表单的提交与校验【v-model双向绑定input输入框、form表单数据,动态校验规则】
  5. html5+css3学习(上)
  6. 如何设计出留住买家的B2C网站
  7. Java创建型设计模式——建造者模式
  8. linux的根目录与家目录的区别
  9. 药明康德成都研发中心投入运营;中国白酒行业净利润将迎来七年来首次下滑 | 美通企业日报...
  10. OPPO A73线刷包下载_OPPO A73密码忘记了?来这里搞定!