Python OpenCV 物体识别
基于Python OpenCV 隐马尔可夫模型 物体识别,汽车飞机摩托车。
网上自己收集的图片进行识别的,准确率可以达到60% 其中通过star 和sift 特征检测。
SIFT算法
来源:
尺度不变特征转换(Scale-invariant feature transform或SIFT)算法是一种特征提取的方法。它在尺度空间中寻找极值点,并提取出其位置、尺度、旋转不变量,并以此作为特征点并利用特征点的邻域产生特征向量。SIFT算法对于光线、噪声、和微小视角改变的容忍度相当高,且对于部分遮挡的物体也有较高的识别相率。
SIFT算法适合于识别旋转度达60度的平面形状,或是旋转度达到20度的三维物体。
SIFT算法对模糊的图像和边缘平滑的图像,检测出的特征点过少,对圆更是无能为力
import os
import warnings
import numpy as np
import cv2 as cvimport hmmlearn.hmm as hlwarnings.filterwarnings('ignore',category=DeprecationWarning)np.seterr(all='ignore')def search_objects(directory):directory = os.path.normpath(directory)if not os.path.isdir(directory):raise IOError("the directory '"+ directory + \"' doesn't exist")objects ={}for curdir ,subdirs, files in os.walk(directory):for jpeg in (file for file in files if file.endswith('.jpg')):path = os.path.join(curdir,jpeg)label = path.split(os.path.sep)[-2]if label not in objects:objects[label]=[]objects[label].append(path)return objectstrain_objects=search_objects('data/objects/training')
print(train_objects)train_x, train_y =[],[]
for label, filenames in train_objects.items():descs = np.array([])for filename in filenames:image = cv.imread(filename)gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#调整大小h,w =gray.shape[:2]f =200/min(h,w)gray = cv.resize(gray,None,fx=f,fy=f)star=cv.xfeatures2d.StarDetector_create()keypoints = star.detect(gray)sift = cv.xfeatures2d.SIFT_create()_,desc = sift.compute(gray,keypoints)if len(descs)==0:descs=descelse:descs=np.append(descs,desc,axis=0)train_x.append(descs)train_y.append(label)
models={}
for descs, label in zip(train_x,train_y):model= hl.GaussianHMM(n_components=4,covariance_type='diag',n_iter=1000)models[label]=model.fit(descs)test_objects=search_objects('data/objects/testing')
print(train_objects)test_x, test_y, test_z=[],[],[]
for label, filenames in test_objects.items():test_z.append([])descs = np.array([])for filename in filenames:image = cv.imread(filename)test_z[-1].append(image)gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#调整大小h,w =gray.shape[:2]f =200/min(h,w)gray = cv.resize(gray,None,fx=f,fy=f)star=cv.xfeatures2d.StarDetector_create()keypoints = star.detect(gray)sift = cv.xfeatures2d.SIFT_create()_,desc = sift.compute(gray,keypoints)if len(descs)==0:descs=descelse:descs=np.append(descs,desc,axis=0)test_x.append(descs)test_y.append(label)
pred_test_y=[]
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)
i=0
for label,pred_label,images in zip(test_y,pred_test_y,test_z):for image in images:i+=1cv.imshow("{}-{} {} {}".format(i,label,'=='if label == pred_label else '!=',pred_label),image)cv.waitKey()
Python OpenCV 物体识别相关推荐
- Python+OpenCV人脸识别签到考勤系统(新手入门)
Python+OpenCV人脸识别签到考勤系统(新手入门) 前言 项目效果图 项目需要的环境 编译器 辅助开发QT-designer 项目配置 代码部分 核心代码 项目目录结构 后记 正式版改进 项目 ...
- python opencv人脸识别考勤系统的完整源码
这篇文章主要介绍了python opencv人脸识别考勤系统的完整源码,本文给大家介绍的非常详细,希望对大家的学习或工作具有一定的参考借鉴价值. 代码如下: import wx import wx.g ...
- 基于python opencv人脸识别的签到系统
基于python opencv人脸识别的签到系统 前言 先看下效果 实现的功能 开始准备 页面的构建 功能实现 代码部分 总结 前言 一个基于opencv人脸识别和TensorFlow进行模型训练的人 ...
- python识别图像中的物体_OpenCV+Python 指定物体识别
本文介绍一种基于HoG+Pyramids+Sliding Windows+SVM的物体识别方法 基本流程 (1)确定最小检测物体,对原图img缩放,缩放比例为(滑动窗大小/最小物体大小). (2)缩放 ...
- Python+opencv 人脸识别
python+opencv人脸检测+识别示例及原理解析 一.开发环境搭建 二.图片人脸检测 2.1 文件准备与编程 2.2 注意事项 三.视频人脸识别 3.1文件准备与编程 3.2 注意事项 四.人脸 ...
- Python OpenCV 人脸识别
简单运用Python OpenCV对图片进行人脸识别, 我们先看效果及代码: import cv2img1 = cv2.imread('6.jpeg') gray = cv2.cvtColor(img ...
- Python+OpenCV人脸识别技术详解
总在科幻电影里看到人脸识别,现在我们也可以编程来实现啦.哈哈~~ OpenCV是Intel®开源计算机视觉库.它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法. ...
- python 图片中物体识别_使用TensorFlow识别照片中的物体
1.环境ubuntu14.04.5 安装TensorFlow sudo pip install --upgrade https://storage.googleapis.com/tensorflow/ ...
- 基于python opencv人脸识别的员工考勤系统
WorkAttendanceSystem 一个基于opencv人脸识别的员工考勤系统,作者某双一流A类大学里的一流学生,写于2018/09/,python课设期间. 源代码详细解释请关注微信公众号: ...
最新文章
- Chrome 正在测试标签页的预览功能
- memcached全面剖析--3.memcached的删除机制和发展方向
- android 网络通信框架volly
- hashmap put过程_阿里十年技术大咖,教你如何分析1.7中HashMap死循环
- 顶级程序员的心得ndash;Coders at Work
- 1.7 编程基础之字符串 34 回文子串 python
- html5 标签大写还是小写,html5中有没有规定字母标签是用大写还是小写?
- 如何优雅地在 Linux 上运行 QQ、微信?
- VS Code 轻量级插件推荐
- java实现csdn免积分工具_CSDN免积分下载工具
- 怎样删除Word文档的强制性回车、断行
- 深度学习算法原理——神经网络的基本原理
- 股票爆仓有几种情况?股票爆仓具体怎么预防?
- oracle 用户名密码找回
- 国资分拆上市第一股!上海电气风电集团正式募股上市
- python用一维数组存储学号和成绩_用一维数组存储学号和成绩,然后,按成绩排序输出...
- md5加密以及可逆的加密解密算法
- 网页中,M3U8格式的视频下载
- Linux系统中的进程管理
- 错误类型:reflection.ReflectionException: Could not set property ‘xxx‘ of ‘class ‘xxx‘ with value ‘xxx‘