前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自制物体识别软件

自制物体识别软件

原创
作者头像
跋扈洋
修改2021-03-02 14:22:58
2.6K0
修改2021-03-02 14:22:58
举报
文章被收录于专栏:物联网知识物联网知识

需求

在物联网和智能家居的制作方面,物体的识别是一个很重要的方面。我们都知道,物联网主要分为感知识别、网络传输、综合运用等方面。而感知识别最重要的就是识别出是什么物体。我们平时主要是根据各种电子标签提前标识出物体的序号,从而让中央处理单元以前知道是什么物体。而我们在生活中,还常常利用图像识别技术进行识别,感测出是什么物体。

技术

本文中制作的图像识别软件是由python和pyqt5制作而成,使用LBP+SVM技术,训练识别给定的测试图像,从而进行物体识别。

  • LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。它是首先由T. Ojala, M.Pietikäinen, 和D. Harwood 在1994年提出,用于纹理特征提取。而且,提取的特征是图像的局部的纹理特征;
  • SVM也称支持向量机(Support Vector Machine, SVM),它的基本模型是在特征空间上找到最佳的分离超平面使得训练集上正负样本间隔最大。SVM是用来解决二分类问题的有监督学习算法,在引入了核方法之后SVM也可以用来解决非线性问题。

一般SVM有下面三种:

  • 硬间隔支持向量机(线性可分支持向量机):当训练数据线性可分时,可通过硬间隔最大化学得一个线性可分支持向量机。
  • 软间隔支持向量机:当训练数据近似线性可分时,可通过软间隔最大化学得一个线性支持向量机。
  • 非线性支持向量机:当训练数据线性不可分时,可通过核方法以及软间隔最大化学得一个非线性支持向量机。

实现

训练文件

在项目中建立training文件夹,在其中存放你想要训练的图像,其中的小文件夹就是你训练生成的图像名称,可自行更改。

识别图像

建立testing文件夹,在其中存放你想要识别的图像。

LocalBinrayPatterns

代码语言:javascript
复制
class LocalBinrayPatterns:
    def __init__(self,numPoints,radius):
        self.numPoints = numPoints
        self.radius = radius

    def describle(self,image,esp=1e-7):
        lbp = feature.local_binary_pattern(image,self.numPoints,self.radius,method="uniform")
        (hist,_) = np.histogram(lbp.ravel(),bins=np.arange(0,self.numPoints + 3),range=(0,self.numPoints + 2))

        hist = hist.astype("float")
        hist /= (hist.sum() + esp)
        return hist

recognize

代码语言:javascript
复制
ap = argparse.ArgumentParser()
ap.add_argument("-t","--training",default="./training",help="path to the training images")
ap.add_argument("-e","--testing",default="./testing",help="path to the testing images")
args = vars(ap.parse_args())


desc = LocalBinrayPatterns(24,8)
data = []
labels = []


for imagePath in paths.list_images(args["training"]):
    image = cv2.imread(imagePath)
    gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    hist = desc.describle(gray)

    labels.append(imagePath.split(os.path.sep)[-2])
    data.append(hist)

model = LinearSVC(C=100.0,random_state=42)
model.fit(data, labels)

for imagePath in paths.list_images(args["testing"]):

   

运行结果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以很明显的看出,提前存放的文件夹的图像训练成了相关文件夹名字的素材,而当检测到相关图片时,显示相关的名称。

后续

如果想了解更多物联网、智能家居项目知识,可以关注我的项目实战专栏。 或者关注公众号。

编写不易,感谢支持。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • recognize
  • 运行结果展示
  • 后续
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档