机器学习 OpenCV智能识别

别急我们先了解下机器学习的基本概念:

机器学习

机器学习的主要流程就是神经网络架构,由神经元组成,神经元通过神经元公式

f(sum(x * w ) + b) 输入特征 乘以 输入权重 求和 加上 偏差 再过一下激活函数最后就会出现一个结果。

第一原则:输入的特征 和 预测结果存在因果关系, 没有因果关系就是脏数据会影响机器学习

的预测结果。

神经元公式:f(sum(x * w ) + b)

假设结果为10 数据可能为 特征 x = 2 权重 w = 4 偏差 b=2 算出结果为 10。

含义:

x : 特征

特征的选取

机器学习最关键的是特征的提取。 比如我要识别螃蟹,就不能以颜色作为螃蟹的特征,

因为在于螃蟹不是只有一种颜色。不能想训练什么就无脑的往里面灌数据,神经元公式有一个最最

大的前提就是 。 参数和特征必须有因果关系。我以颜色作为螃蟹的特征,进行识别所有的螃蟹

都是红色的,这显然是不对的,所以这两个没有因果关系。比如我可以把特征改为,八条腿或者横着走。然后得出结论所有的螃蟹都有八条腿,这显然是存在因果关系的。最忌讳的是特征提取不明显,就不停的给他传,这样会严重影响他的判断,出现脏数据。

w: 权重

所有的特征都不是平行关系,都有优先级。 比如我要识别螃蟹 特征1 是八条腿

特征2 是横着走 。 两者相比横着走大权重值更的一些,因为蜘蛛、章鱼、等一些生物都是八条腿。

如果把八条腿设为权重最高,那他可能识别蜘蛛的时候,把螃蟹也识别出来。说白了他就是根据

特征的占比设置出一个权重值。 w越高代表权重越高。

w是通过模型训练得到的,即使某些特征在人类看来非常重要,但可能对模型预测结果的贡献并不大。

b : 偏差

一个可学习的参数,它可以调整模型的偏置,从而更好地拟合数据。

f: 激活函数不仅是把线性死的数据做成非线性活的数据,让他贴合现实 还是为了引入非线性因素,增强模型的表达能力,提高模型的准确性。

把以上这些神经元贴合在一起进行计算就是一个神经网络架构,做深度学习,做强化学习,是可以的

# # 提取视频图片
import os
import re
import numpy as np  # 导入numpy库
import cv2
# import cv2  # 导入cv2库,用于图像处理


# 定义检查图片函数
def check_img(img, target):
    # 读取需要检测的图片和参照图片
    video_img = cv2.imread(img)  # 读取需要检测的图片
    target_img = cv2.imread(target)  # 读取参照图片

    # 获取参照物的尺寸
    h, w = target_img.shape[:2]  # 获取参照物的高度和宽度

    # 匹配模板
    res = cv2.matchTemplate(video_img, target_img, cv2.TM_CCOEFF_NORMED)  # 对需要检测的图片进行模板匹配

    print(res)

    # 设置匹配相似度阈值
    threshold = 0.5  # 设定匹配相似度阈值

    # 计算匹配位置
    loc = np.where(res >= threshold)  # 找到符合条件的匹配位置

    # 标记匹配位置
    for pt in zip(*loc[::-1]):  # 遍历每个匹配位置
        cv2.rectangle(video_img, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2)  # 在需要检测的图片上标记匹配位置

    # 展示结果
    cv2.imshow("result", video_img)  # 将结果展示出来
    cv2.waitKey(0)  # 等待用户按键0000

机器学习使用OpenCV智能识别进行标记存在缺陷

他只是做了一个简单的比对,用numpy这个库把图片做为多维向量然后去比对数据。

可以识别,但是功能上不太好,OpenCV存在线性问题。

假设你喜欢黑色的衣服,我就给你推荐所有的黑色的东西,黑色的房子、黑色的书。

比如我给他一张红色螃蟹: 他只能给我识别一个红色螃蟹,并且螃蟹必须是这个样的。

也就是单维度看待问题比较单一。 所以我们要解决线性问题,机器学习可以解决线性问题,

就是把线性问题改成非线性问题, 把单维度换成多维度问题。

什么叫多维度: 就是你给他的特征太单一所以返回单一的结果,在OpenCV智能识别中我们就给他

了一个原始诊图,所以他就只能根据原始诊图来进行识别。

我们应该怎么改进?

因为他一切的结果都取决于你给他的这个特征

假设我们要识别各式各样的螃蟹 , 那我就应该给他提供一定数量的螃蟹特征,然后走模型。(模型训练,引出模型)

训练模型的概念:你给他具体的特征,他去学习,学完以后他把学习结果保存。

保存的那东西就叫模型,以后再去识别他就不需要在走神经元公式了,直接走模型,

模型通过学习成果直接返回预测结果。比如我们要识别螃蟹,但是电脑并不知道什么是螃蟹,他需要将结果和

标签做匹配,人才知道他预测的是什么东西。我们就需要使用深度学习框架了。(引出深度学习

想解决这个问题就要看我领一遍文件  深度学习框架tensorflow

你可能感兴趣的:(机器学习,人工智能,深度学习)