使用Labelimg和Python网络爬虫构建自己的训练集(一)
现在网络上很多神经网络的教程都是根据已有的封装好的数据集进行训练,这和实际应用有些脱轨,所以我查阅了一些书籍总结了一种比较笨但是可行的建立自己的训练集的方法,建立好之后再利用Opencv进行扩增以解决因数据量较少而产生的过拟合问题。
首先是网络爬虫部分,直接贴代码
import requests # http客户端
import re # 正则表达式模块
import os # 创建文件夹
num = 0 #图片编号
def mkdir(path): # 创建文件夹
is_exists = os.path.exists(path)
if not is_exists:
print('创建名字叫做', path, '的文件夹')
os.makedirs(path)
print('创建成功!')
else:
print(path, '文件夹已存在')
def get_many_pages(width,height,number):#解决网站的动态加载问题
URL = "http://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8"+"&width"+width+"&height"+height+"&word="+ word
URLs = []
for i in range(0,int(number)//30+1):
URLs.append(URL+"&pn="+str(i*30))
return URLs
def getPic(html, keyword, path, number):
print("正在下载:" + keyword + ' 对应的图片')
global num
for addr in re.findall(str('"objURL":"(.*?)"'), html, re.S):
print("现在正在爬取的URL地址:" + addr)
try:
pics = requests.get(addr, timeout=10)
except requests.exceptions.ConnectionError:
print("当前Url请求错误")
continue
except requests.exceptions.ReadTimeout:
print("连接超时")
continue
num+=1
fq = open(path + '//' + str(num) + '.png', 'w+b')
fq.write(pics.content)
fq.close()
print('写入完成')
if num == number:
break
if __name__ == "__main__":
word = input("请输入关键词:")
width = input("请输入图片宽度(无限制则输入0):")
height = input("请输入图片高度(无限制则输入0):")
number = input("请输入需要的图片数:")
path = word # 保存图片文件夹名称
mkdir(path)
urls = get_many_pages(width,height,number)
for i in urls:
result = requests.get(i)
# print(result.text)
getPic(result.text, word, path, int(number))
print("写入完毕")
网站可以根据自己的需要进行更改,默认是从百度图片下载。百度图片存在动态加载,所以需要改变网址的pn值来下载大于30张的图片,具体在代码里都有注释。
下载好之后,需要打上标签,并且生成.csv文件或者其他可读数据库文件后续步骤下次再继续。