KNN、图像分类、曼哈顿距离、图片像素、python、opencv、最近邻图片分类 您所在的位置:网站首页 pagerange算法 KNN、图像分类、曼哈顿距离、图片像素、python、opencv、最近邻图片分类

KNN、图像分类、曼哈顿距离、图片像素、python、opencv、最近邻图片分类

#KNN、图像分类、曼哈顿距离、图片像素、python、opencv、最近邻图片分类| 来源: 网络整理| 查看: 265

KNN、图像分类、曼哈顿距离、图片像素、python、opencv、最近邻图片分类

自己实现使用曼哈顿距离计算图像之间的距离,采用最近邻算法对图片经行分类,没有使用sklearn里面的KNN算法。

完整的代码如下: import time import cv2 import numpy as np import os import time as t traindir = './train/' testdir = './val/' labels = os.listdir(traindir) def load_dataset(filedir): img_arr = [] labels_arr = [] data_nr = 0 for filename in os.listdir(r'./'+filedir): for file_piacture in os.listdir(filedir+'/'+filename): data_nr+= 1 img=cv2.imread(filedir+'/'+filename+'/'+file_piacture) img_arr.append(img) labels_arr.append(filename) trainset = np.reshape(np.array(img_arr), (data_nr, 32*32*3)) labelset = np.reshape(np.array(labels_arr), (data_nr, 1)) return trainset, labelset def manhatan_dis(test_vec, training_mat): dis_mat = training_mat-test_vec return dis_mat def find_top1(dis_mat): temp = np.sum(abs(dis_mat), axis=1) min_num = temp[0] for i in range(len(temp)): if temp[i] min_num: min_num = temp[i] j = i i += 1 return j def label_assignment(idx, trainlabel): return trainlabel[idx] def classify(): traindata, trainlabel = load_dataset(traindir) testdata, testlabel = load_dataset(testdir) test_nr = testlabel.shape[0] correct = 0 for i in range(test_nr): dis_mat = manhatan_dis(testdata[i], traindata) idx = find_top1(dis_mat) lab = label_assignment(idx, trainlabel) if lab == testlabel[i]: correct += 1 prec = float(correct/test_nr) print("Accurarcy is %.4f." % prec) if __name__ == '__main__': t1 = time.time() print(t1) classify() t2 = time.time() print(t2) print("运行时间:", t2-t1) 具体对关键步骤进行分解翻译!!! step1:导图第三方的包、以及对应的数据集

训练集以及测试集放在同一文件目录下!!!

import time import cv2 import numpy as np import os import time as t traindir = './train/' testdir = './val/' labels = os.listdir(traindir) step 2:提取特征矩阵

这里我使用的是通过图片像素最为分类的特征,代码里面都有我的批注,自己也可以运行的时候不断调试

需要注意的是,我的图片采用的都是32*32大小的图片。我的train有10000张图片、val测试集有5000张图片,遇到图片不一致的话,可以自行裁剪或者使用transform.resize()方法对其进行转换

我的train文件夹:

KNN、图像分类、曼哈顿距离、图片像素、python、opencv、最近邻图片分类

我的val文件夹:

KNN、图像分类、曼哈顿距离、图片像素、python、opencv、最近邻图片分类

都有10各类。

def load_dataset(filedir): img_arr=[] labels_arr=[] data_nr =0 for filename in os.listdir(r'./'+filedir): for file_piacture in os.listdir(filedir+'/'+filename): data_nr+= 1 img=cv2.imread(filedir+'/'+filename+'/'+file_piacture) img_arr.append(img) labels_arr.append(filename) trainset = np.reshape(np.array(img_arr), (data_nr, 32*32*3)) labelset = np.reshape(np.array(labels_arr), (data_nr, 1)) return trainset, labelset step 3:取到最小距离的图片类别

这里我没有使用自带agmin()函数,应为我们只需要取到最小值对应的索引,没有必要采用agmin函数,节省了时间,我的时间复杂度为N

在样本比较多情况下,我的效率提升多!

def find_top1(dis_mat): temp = np.sum(abs(dis_mat), axis=1) min_num = temp[0] for i in range(len(temp)): if temp[i] min_num: min_num = temp[i] j = i i += 1 return j step 4:ndarray的广播机制

我在这里举一个例子[1,1,1] – [[1,2,1],[3,3,3],[1,1,1]]

=[[0,1,0],[-2,-2,-2],[0,0,0]]

整体的思路就是代码里所体现的内容,当然读者也可以在我的基础上,寻找KNN,当N取3、取5所对应的类别,按照前面的最近邻的标签,对其进行加权平均,这样的准确率应该会有所提升。

以上便是一个简单的基于图片像素作为特征,采取曼哈顿距离,采用最近邻算法对于图像的一个分类,并计算准确率!!

Original: https://blog.csdn.net/Embrace_yxl_/article/details/125709078Author: Embrace_yxl_Title: KNN、图像分类、曼哈顿距离、图片像素、python、opencv、最近邻图片分类

相关阅读 Title: Python采集《惊奇先生》, 下载你想看的高质量漫画 前言

大家早好、午好、晚好吖~

知识点: 爬虫基本流程 保存海量漫画数据 requests的使用 base64解码 开发环境: 版 本:python 3.8 编辑器:pycharm requests: pip install requests parsel: pip install parsel 如何安装python第三方模块: win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车 在pycharm中点击Terminal(终端) 输入安装命令 实现代码: 发送请求 获取数据 解析数据 保存数据 代码

源码、教程 ==点击 蓝色字体 自取== ,我都放在这里了。

import base64 import requests import re import json import parsel import os # 伪装 headers = { # 用户信息 'cookie': '__AC__=1; tvfe_boss_uuid=bb88930a5ac8406d; iip=0; _txjk_whl_uuid_aa5wayli=55a33622e35c40e987c810022a8c40c6; pgv_pvid=6990680204; ptui_loginuin=1321228067; RK=Kj3JwrkEZn; ptcz=42d9e016607f032705abd9792c4348479e6108da38fd5426d9ecaeff1088aa19; fqm_pvqid=d77fc224-90eb-4654-befc-ab7b6d275fb4; psrf_qqopenid=4F37937E43ECA9EAB02F9E89BE1860E2; psrf_qqaccess_token=2B1977379A78742A0B826B173FB09E92; wxunionid=; tmeLoginType=2; psrf_access_token_expiresAt=1664978634; psrf_qqrefresh_token=03721D80236524B49062B95719F2F8B4; psrf_qqunionid=FAEE1B5B10434CF5562642FABE749AB9; wxrefresh_token=; wxopenid=; euin=oKoAoK-ANens7z**; o_cookie=3421355804; ts_refer=www.baidu.com/link; ts_uid=6545534402; readLastRecord=%5B%5D; pac_uid=1_3421355804; luin=o0210105510; lskey=00010000d1fa763dc45458abb8932a1377e83940e9f5148497289242137055f80e361f8e6eea4b3e2393f866; nav_userinfo_cookie=; ac_wx_user=; Hm_lvt_f179d8d1a7d9619f10734edb75d482c4=1661602022,1664001338; pgv_info=ssid=s6096813906; theme=dark; roastState=2; _qpsvr_localtk=0.07137748820842615; readRecord=%5B%5B511915%2C%22%E4%B8%AD%E5%9B%BD%E6%83%8A%E5%A5%87%E5%85%88%E7%94%9F%22%2C1%2C%22%E4%BC%A0%E8%AF%B4%22%2C1%5D%2C%5B629440%2C%22%E6%AD%A6%E7%82%BC%E5%B7%85%E5%B3%B0%22%2C7%2C%22%E6%92%9E%E7%A0%B4%E5%8D%97%E5%A2%99%E4%B8%8D%E5%9B%9E%E5%A4%B4%EF%BC%88%E4%B8%89%EF%BC%89%22%2C4%5D%2C%5B531040%2C%22%E6%96%97%E7%A0%B4%E8%8B%8D%E7%A9%B9%22%2C58%2C%2249%EF%BC%88%E4%B8%8B%EF%BC%89%22%2C58%5D%2C%5B645332%2C%22%E6%88%91%E4%B8%BA%E9%82%AA%E5%B8%9D%22%2C3%2C%22%E7%A9%BF%E8%B6%8A%E4%BA%86%EF%BC%8C%E6%8E%89%E8%BF%9B%E5%A6%96%E5%A5%B3%E7%AA%9D%22%2C1%5D%2C%5B644270%2C%22%E5%A4%A7%E8%B1%A1%E6%97%A0%E5%BD%A2%22%2C30%2C%22%E7%AC%AC%E4%BA%8C%E5%8D%81%E4%BA%94%E7%AB%A0%2F%E5%91%BD%E6%95%B0%E4%B8%8B%22%2C25%5D%2C%5B531616%2C%22%E8%88%AA%E6%B5%B7%E7%8E%8B%EF%BC%88%E7%95%AA%E5%A4%96%E7%AF%87%EF%BC%89%22%2C1%2C%22%E7%95%AA%E5%A4%961%20%E8%8D%89%E5%B8%BD%E5%89%A7%E5%9C%BA%3A%E6%B5%B7%E7%9A%84%E9%9F%B3%E4%B9%90%E4%BC%9A%22%2C1%5D%2C%5B505430%2C%22%E8%88%AA%E6%B5%B7%E7%8E%8B%22%2C7%2C%22%E7%AC%AC6%E8%AF%9D%20%E7%AC%AC%E4%B8%80%E4%B8%AA%E4%BA%BA%22%2C6%5D%2C%5B530876%2C%22%E6%8E%92%E7%90%83%E5%B0%91%E5%B9%B4%EF%BC%81%EF%BC%81%22%2C2%2C%22%E7%AC%AC1%E8%AF%9D%20%E7%BB%93%E6%9D%9F%E4%B8%8E%E5%BC%80%E5%A7%8B%22%2C1%5D%2C%5B17114%2C%22%E5%B0%B8%E5%85%84%EF%BC%88%E6%88%91%E5%8F%AB%E7%99%BD%E5%B0%8F%E9%A3%9E%EF%BC%89%22%2C3%2C%22%E7%AC%AC1%E9%9B%86%22%2C1%5D%2C%5B650998%2C%22%E5%A4%A7%E7%8C%BF%E9%AD%82%EF%BC%88%E8%A5%BF%E8%A1%8C%E7%BA%AA%E7%B3%BB%E5%88%97%EF%BC%89%22%2C1011%2C%22%E3%80%8A%E5%A4%A7%E7%8C%BF%E9%AD%82%E3%80%8B%E5%BA%8F%E7%AB%A0%22%2C1%5D%5D; ts_last=ac.qq.com/ComicView/index/id/511915/cid/1; Hm_lpvt_f179d8d1a7d9619f10734edb75d482c4=1664021694',

KNN、图像分类、曼哈顿距离、图片像素、python、opencv、最近邻图片分类 select = parsel.Selector(requests.get(main_url, headers=headers).text) title_list = select.css('.chapter-page-all.works-chapter-list li a::text').getall() link_list = select.css('.chapter-page-all.works-chapter-list li a::attr(href)').getall() for title, link in zip(title_list, link_list): url = 'https://ac.qq.com' + link title = title.strip() if not os.path.exists(f'中国惊奇先生/{title}'): os.makedirs(f'中国惊奇先生/{title}') # 1. 发送请求 response = requests.get(url=url, headers=headers) print(title, url) # 2. 获取数据 html_data = response.text # 3. 解析数据 DATA = re.findall("var DATA = '(.*?)'", html_data)[0] for i in range(len(DATA)): try: json_str = base64.b64decode(DATA[i:].encode("utf-8")).decode("utf-8") json_str = re.findall('"picture":(\[.*?\])', json_str)[0] # 字符串 转 字典/列表 json_list = json.loads(json_str) count = 1 for imgInfo in json_list: imgUrl = imgInfo['url'] print(imgUrl) # 4. 保存数据 img_data = requests.get(url=imgUrl).content with open(f'中国惊奇先生/{title}/{count}.jpg', mode='wb') as f: f.write(img_data) count += 1 break except: pass 效果

我看不懂这篇文章。我录制了相应的视频以便解释。这篇文章只是一般性的介绍。单击下面的蓝色文本以获取完整的代码和视频教程

[En]

I can’t understand the article. I recorded the corresponding video for explanation. This article is just a general presentation. Click the blue text below for the complete code and video tutorial

==点击 蓝色字体 自取,我都放在这里了。==

尾语 💝

好了,我的这篇文章写到这里就结束啦!

有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

Original: https://www.cnblogs.com/Qqun261823976/p/16732019.htmlAuthor: python倩Title: Python采集《惊奇先生》, 下载你想看的高质量漫画

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/321612/

转载文章受原作者版权保护。转载请注明原作者出处!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有