数据集找不见了,可以自己拍点。。。。。。代码是对的

物体识别

  1. 读取每个图片文件, 加载每个文件的特征值描述矩阵, 整理训练集, 与某个类别名绑定在一起.
  2. 基于隐马模型, 对三个类别的特征值描述矩阵训练集进行训练, 得到3个隐马模型, 分别用于识别三个类别.
  3. 对测试集分别进行测试, 取得分高的为最终预测类别.
"""
物体识别
"""
import os
import numpy as np
import hmmlearn.hmm as hl
import cv2 as cvdef search_files(directory):directory = os.path.normpath(directory)# {'apple':[dir,dir,dir], 'banana':[dir..]}objects = {}#当前目录, 当前目录子目录, 文件列表for curdir,subdirs,files in \os.walk(directory):for file in files:if file.endswith('.jpg'):label = curdir.split(os.path.sep)[-1]if label not in objects:objects[label] = []path = os.path.join(curdir, file)objects[label].append(path)return objectstrain_samples = \search_files('../ml_data/objects/training')# 整理训练集, 把每一个类别中的图片的desc
# 摞在一起, 基于隐马模型开始训练.train_x, train_y = [], []
for label, filenames in train_samples.items():descs = np.array([])for filename in filenames:# 获取当前图片的desc描述矩阵加入descsimg = cv.imread(filename)gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)# 对图片进行范围缩放h, w = gray.shape[:2]f = 200 / min(h, w)# fx: x轴伸缩比例  fy: y轴伸缩比例gray = cv.resize(gray, None, fx=f, fy=f)sift = cv.xfeatures2d.SIFT_create()keypoints = sift.detect(gray)_,desc = sift.compute(gray, keypoints)print(label, desc.shape)if len(descs) == 0:descs = descelse:descs = np.append(descs, desc, axis=0)train_x.append(descs)train_y.append(label)# 基于隐马模型进行训练, 把所有类别的模型都存起来
# 一共3个类别循环3次
models = {}
for descs, label in zip(train_x, train_y):model = hl.GaussianHMM(n_components=4, covariance_type='diag', n_iter=200)models[label] = model.fit(descs)# 读取测试集中的文件, 使用每个模型对文件进行
# 评分, 取分值大的模型对应的label作为预测类别
test_samples = \search_files('../ml_data/objects/testing')# 整理测试集, 提取每一个文件的mfcc
test_x, test_y = [], []
for label, filenames in test_samples.items():descs = np.array([])for filename in filenames:# 获取当前图片的desc描述矩阵加入descsimg = cv.imread(filename)gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)# 对图片进行范围缩放h, w = gray.shape[:2]f = 200 / min(h, w)# fx: x轴伸缩比例  fy: y轴伸缩比例gray = cv.resize(gray, None, fx=f, fy=f)sift = cv.xfeatures2d.SIFT_create()keypoints = sift.detect(gray)_,desc = sift.compute(gray, keypoints)print(label, desc.shape)if len(descs) == 0:descs = descelse:descs = np.append(descs, desc, axis=0)test_x.append(descs)test_y.append(label)# 使用3个模型, 对每一个文件进行预测得分.
pred_test_y = []
# test_x一共3个样本, 遍历3次, 每次验证1个文件
for descs in test_x:best_score, best_label = None, Nonefor label, model in models.items():score = model.score(descs)if (best_score is None) or \(best_score < score):best_score, best_label=score,labelpred_test_y.append(best_label)print(test_y)
print(pred_test_y)

python机器学习之物体识别相关推荐

  1. python 机器学习 sklearn——一起识别数字吧

    文章目录 简介 数据集 数据处理 数据分离 训练数据 数据可视化 结果 完整代码 简介 本文主要简述如何通过sklearn模块利用决策树来进行预测和学习,最后再以图表这种更加直观的方式展现出来 决策树 ...

  2. 淼瀛正式推出MoAir 物体识别SDK 小白用手机即可完成机器学习

    从20世纪60年代,由MIT的计算机教授组织了第一个面向本科生的Summer Project,经历了20世纪50年代初到90年代,尝试用创建三维模型方法去做物体识别:又走过了20世纪90年代,只从图像 ...

  3. 基于ROS机器人的3D物体识别与三维重建(一) 介绍篇

    基于ROS机器人的3D物体识别与三维重建(一) 介绍篇 由来:清理电脑硬盘,发现了当时做毕设的一些资料,所以打算整理一下资料和代码写成专栏,记录下当时的暗金岁月,尽管现在实验室的做的项目已经不是这个方 ...

  4. 机器学习之验证码识别

    项目背景: 之所以做这个其实很久就有这个想法了,因为搞爬虫有大半年了,怕热很多网站,也模拟登陆了许多网站,包括知乎微博等,但是有个问题是,当我们遇到验证码的时候,就需要人工打验证码了,特别是用sele ...

  5. 机器学习水果识别——python+opencv实现物体特征提取

    文章目录 一.用python+opencv实现物体特征值提取 1.读取图像.转为灰度图像并降噪 2.获取水果轮廓 将最大轮廓画入最开始的img图像并显示 将小于某一规模的轮廓删除 3.提取水果的面积周 ...

  6. 树莓派python物体识别_基于树莓派和Tensowflow的物体识别

    近来这篇文章很火:How to build a robot that "sees" with $100 and TensorFlow (作者是Lukas,CrowdFlower创始 ...

  7. 基于机器学习的车牌识别系统(Python实现基于SVM支持向量机的车牌分类)

    基于机器学习的车牌识别系统(Python实现基于SVM支持向量机的车牌分类) 一.数据集说明 训练样本来自于github上的EasyPR的c++版本,包含一万三千多张数字及大写字母的图片以及三千多张中 ...

  8. 放弃机器学习,Python 如何进行物体检测?

    学习在不使用机器学习或任何框架的情况下,如何在Python中进行物体检测. 作者 | Ravindu Senaratne 译者 | 弯月,责编 | 屠敏 头图 | CSDN 下载自视觉中国 出品 | ...

  9. python识别图像中的物体_OpenCV+Python 指定物体识别

    本文介绍一种基于HoG+Pyramids+Sliding Windows+SVM的物体识别方法 基本流程 (1)确定最小检测物体,对原图img缩放,缩放比例为(滑动窗大小/最小物体大小). (2)缩放 ...

  10. Python OpenCV 物体识别

    基于Python OpenCV 隐马尔可夫模型 物体识别,汽车飞机摩托车. 网上自己收集的图片进行识别的,准确率可以达到60% 其中通过star 和sift 特征检测. SIFT算法 来源: 尺度不变 ...

最新文章

  1. Python 计算机视觉(二) —— OpenCV 基础
  2. Fikker反向代理服务器的网站缓存加速/网站加速基础教程
  3. 2017-12-07 socket 读取问题
  4. Leetcode--231. 2的幂
  5. 基于IBM Cognos的高级报表制作技巧
  6. 高观点下的高等数学(数学分析、线性代数)
  7. 小D课堂 - 零基础入门SpringBoot2.X到实战_第三节SpringBoot热部署devtool和配置文件自动注入实战_14、SpringBoot2.x使用Dev-tool热部署...
  8. BigInteger类
  9. ue4联网和多人游戏总结(第二部分)
  10. 多旋翼飞行器设计与控制(四) —— 动力系统建模与估计
  11. python音频特征提取_音频特征提取——常用音频特征
  12. 为什么c语言加法错误,分数的加减法——C语言初学者代码中的常见错误与瑕疵(12)...
  13. Pandas DataFrame.columns用法及代码示例
  14. for循环的三种写法
  15. Elasticsearch-ais使用方式
  16. vue检测当前是什么浏览器
  17. 如何打开Idea右边工具栏
  18. “我永远都无法理解人类!” OpenAI “杀”死了那个成功模拟已故未婚妻的 GPT-3 机器人
  19. “数据星河”系列活动—大数据产业中的商业模式创新沙龙共话新未来
  20. newmark法 matlab,newmark法程序newmark法程序.doc

热门文章

  1. mysql死锁——mysql之四
  2. 普通循环和numpy速率对比
  3. MFC获取指针.doc
  4. shell脚本-从路径提取文件名、后缀
  5. 树莓派安装frp服务
  6. 利用Rsyslog向ElasticSearch推送nginx access日志
  7. 四种实时操作系统的分析比较
  8. 在python中怎么排序_怎么在python的字典中进行排序
  9. “#if 0/#if 1 ... #endif”的作用
  10. oracle单引号和双引号的区别