python构建深度学习模型开发数据采集利器,为模型提供充足图像数据

news2024/9/20 14:32:09

经常需要接触到各种各样的图像数据,为模型开发准备素材,在实际的项目中,一部分数据来源于真实的项目场景,但是这部分数据大都比较少,且获取的难度比较大,往往都是项目到了实施阶段的时候才有机会拿到数据,对于前期模型的开发构建来说很不友好,所以基本上前期介入的时候想要快速开发迭代模型,基本上都是需要从互联网上采集公开的数据素材才行的。

常见的几个搜索引擎都可以拿来给自己获取数据使用,比如:Google、Bing、Baidu、Sougou等等,根据自己的实际需要选择合适的即可。

这里简单以Google搜索引擎为例,看下实例实现:

import requests
from bs4 import BeautifulSoup
import re

def google_images_search(query):
    # 构建Google Images搜索URL
    query = query.replace(' ', '+')
    url = f"https://www.google.com/search?q={query}&tbm=isch"
    
    # 设置请求头以模拟浏览器行为
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
    }
    
    # 发送GET请求
    response = requests.get(url, headers=headers)
    
    # 检查请求是否成功
    if response.status_code == 200:
        # 使用BeautifulSoup解析HTML
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 提取图像URL
        image_urls = []
        for img in soup.find_all('img'):
            img_url = img.get('src')
            if img_url and img_url.startswith('http'):
                image_urls.append(img_url)
        
        return image_urls
    else:
        print(f"请求失败,状态码: {response.status_code}")
        return []

# 输入关键词
keyword = input("请输入搜索关键词: ")

# 获取图像URL
image_urls = google_images_search(keyword)

# 打印图像URL
for i, url in enumerate(image_urls, 1):
    print(f"图像 {i}: {url}")

如果目标网站比较复杂的话,可以使用 selenium 进行更复杂的Web Scraping,如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

def google_images_search_selenium(query):
    # 设置Chrome选项
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')  # 无头模式
    options.add_argument('--disable-gpu')
    
    # 初始化WebDriver
    driver = webdriver.Chrome(options=options)
    
    # 构建Google Images搜索URL
    url = f"https://www.google.com/search?q={query}&tbm=isch"
    
    # 打开网页
    driver.get(url)
    
    # 滚动页面以加载更多图像
    last_height = driver.execute_script("return document.body.scrollHeight")
    while True:
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(2)
        new_height = driver.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            break
        last_height = new_height
    
    # 提取图像URL
    image_urls = []
    images = driver.find_elements(By.CSS_SELECTOR, 'img.rg_i')
    for img in images:
        img_url = img.get_attribute('src')
        if img_url and img_url.startswith('http'):
            image_urls.append(img_url)
    
    # 关闭WebDriver
    driver.quit()
    
    return image_urls

# 输入关键词
keyword = input("请输入搜索关键词: ")

# 获取图像URL
image_urls = google_images_search_selenium(keyword)

# 打印图像URL
for i, url in enumerate(image_urls, 1):
    print(f"图像 {i}: {url}")

上面代码的核心目的就是实现对于执行关键词进行检索,得到搜索结果对应图像的urls数据,接下来我们就需要遍历前面得到的urls集合来下载对应的图像数据。

python提供了很多好用的内置库和第三方库,能够帮助我们实现快捷便利的图像数据下载操作,当然了不是只能下载图像数据,这里因为我的目的是为了获取指定关键词下的图像数据,所以开发演示也都是以图像为例进行说明的。

方法1: 使用 urllib 模块

urllib 是Python标准库中用于处理URL的模块。

import urllib.request

data_url = "https://example.com/image.jpg"
save_path = "downloaded_image.jpg"

# 下载图像并保存到本地
urllib.request.urlretrieve(data_url, save_path)

print(f"图像已下载并保存为 {save_path}")

方法2: 使用 requests 库

requests 是一个非常流行的第三方库,用于发送HTTP请求。

import requests

data_url = "https://example.com/image.jpg"
save_path = "downloaded_image.jpg"

# 发送GET请求下载图像
response = requests.get(data_url)

# 检查请求是否成功
if response.status_code == 200:
    with open(save_path, 'wb') as file:
        file.write(response.content)
    print(f"图像已下载并保存为 {save_path}")
else:
    print(f"下载失败,状态码: {response.status_code}")

方法3: 使用 wget 库

wget 是一个第三方库,专门用于下载文件。

import wget

data_url = "https://example.com/image.jpg"
save_path = "downloaded_image.jpg"

# 下载图像并保存到本地
wget.download(data_url, out=save_path)

print(f"\n图像已下载并保存为 {save_path}")

方法4: 使用 Pillow 库

Pillow 是一个强大的图像处理库,也可以用于下载和保存图像。

from PIL import Image
from io import BytesIO
import requests

data_url = "https://example.com/image.jpg"
save_path = "downloaded_image.jpg"

# 发送GET请求下载图像
response = requests.get(data_url)

# 检查请求是否成功
if response.status_code == 200:
    # 使用Pillow打开图像
    image = Image.open(BytesIO(response.content))
    # 保存图像到本地
    image.save(save_path)
    print(f"图像已下载并保存为 {save_path}")
else:
    print(f"下载失败,状态码: {response.status_code}")

方法5: 使用 os 和 urllib 模块

这种方法结合了 os 模块来处理文件路径和 urllib 模块来下载图像。

import os
import urllib.request

data_url = "https://example.com/image.jpg"
save_path = os.path.join(os.getcwd(), "downloaded_image.jpg")

# 下载图像并保存到本地
urllib.request.urlretrieve(data_url, save_path)

print(f"图像已下载并保存为 {save_path}")

方法6: 使用 asyncio 和 aiohttp 库

如果你需要异步下载图像,可以使用 asyncio 和 aiohttp 库。

import aiohttp
import asyncio

async def download_image(url, save_path):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            if response.status == 200:
                with open(save_path, 'wb') as file:
                    while True:
                        chunk = await response.content.read(1024)
                        if not chunk:
                            break
                        file.write(chunk)
                print(f"图像已下载并保存为 {save_path}")
            else:
                print(f"下载失败,状态码: {response.status}")

data_url = "https://example.com/image.jpg"
save_path = "downloaded_image.jpg"

# 运行异步任务
asyncio.run(download_image(data_url, save_path))

上面几种方法都可以实现对目标链接图像数据的下载存储,当然了也不仅局限上面的几种方法,还有其他的方法就不再一一列举了,大家可以根据自己的实际需要,自由选择组合就可以很快的实现自己的数据采集器了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2123861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot的医院挂号预约管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的医院挂号预约管理…

【有啥问啥】探索扫地机器人中的 SLAM 算法:原理、实现与未来展望

探索扫地机器人中的 SLAM 算法:原理、实现与未来展望 随着智能家居的普及,扫地机器人逐渐成为日常生活中的常见家电。其自主导航能力使得它能够在复杂的家庭环境中高效完成清洁任务,而这背后的核心技术之一就是 SLAM(Simultaneou…

CCS12.2 以及以上版本如何使用C2000ware 4.03版本,发现直接导入工程不能正确识别地址变量?

C2000ware 5.02 地址变量为:COM_TI_C2000WARE_INSTALL_DIR,CCS12.2以上版本能够直接匹配识别! 但是C2000ware4.03版本地址变量为:COM_TI_C2000WARE_SOFTWARE_PACKAGE_INSTALL_DIR,这个不能直接识别到头文件的地址&…

appium server gui详细按照步骤

1.安装appium server desktop Appium安装提供两种方式:桌面版和命令行版。其中桌面版又分为 Appium GuI 和 Appium Desktop 。作为初学者,用桌面版,对初学者比较友好。 官网下载地址:Releases appium/appium-desktop GitHubTags appium/…

基于FPGA与RK3588的多通道低延时3G-SDI视频信号

目录 简介 主要用途: 项目简介: 详细过程: BT1120视频时序转CEA861 视频像素编码格式转换 低延时处理 MIPI接口处理 视频处理模块 ​​​​​​​ 简介 主要解决 RK3588支持多种视频格式输入,但是没有支持多路SDI接口的…

【JUC】14-LongAddr源码分析

1. LongAddr底层实现过程 2. Striped64中变量或方法的定义 base:类似于AtomicLong中全局的value值。在没有竞争情况下数据直接累加到base上,或者cells扩容时,也需要将数据写入到base上。collide:表示扩容意向,false一…

反转链表 II

题目 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#xff1a;…

Java中的ArrayList类

继承实现关系 Arraylist就是一个可以动态扩容的容器&#xff0c;属于集合类的一种&#xff0c;要追根溯源的话它是间接实现了Collection接口&#xff0c;下面我画一下它的结构图 类定义 ArrayList类继承自抽象类AbstractList&#xff0c;同时实现了List和Collection接口&…

服务器数据恢复—通过拼接数据库碎片的方式恢复SQL Server数据库数据

服务器数据恢复环境&#xff1a; 一台服务器中有一组由4块STAT硬盘通过RAID卡组建的RAID10阵列&#xff0c;上层是XenServer虚拟化平台&#xff0c;虚拟机安装Windows Server操作系统&#xff0c;作为Web服务器使用。 服务器故障&#xff1a; 因机房异常断电导致服务器中一台V…

元学习之应用案例

现在在做元学习的时候&#xff0c;我们最常拿来测 试元学习技术的任务叫做少样本图像分类&#xff0c;简单来讲就是每一个任务都只有几张图片&#xff0c;每一 个类别只有几张图片。比如我们使用图1的案例为例说明。现在分类的任务是分为三个 类别&#xff0c;每个类别都只有两…

贪心-用最少的箭射球

一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭&#xff0c;若有一个气球的直径的开始和结束坐标为 xstart&#xff0c;xend&#xff0c; 且满足 xstart ≤ x ≤ xend&#xff0c;则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后…

MySQL从C盘迁移到D盘

文章目录 前言一、停止MySQL服务打开服务&#xff08;方式一&#xff09;打开服务&#xff08;方式二&#xff09;停止MySQL服务 二、找到C盘中的文件文件夹1文件夹2文件夹3 三、修改文件内容1.对应文件夹12.对应文件夹3 四、 修改注册表中文件路径1.打开注册表2. 修改注册表中…

微积分-积分应用5.5(函数的平均值)

很容易计算有限多个数字 y 1 , y 2 , … , y n y_1, y_2, \dots, y_n y1​,y2​,…,yn​ 的平均值&#xff1a; y ave y 1 y 2 ⋯ y n n y_{\text{ave}} \frac{y_1 y_2 \cdots y_n}{n} yave​ny1​y2​⋯yn​​ 但是&#xff0c;如果可以进行无限多次的温度读取&…

Java 入门指南:Java 并发编程 —— 同步工具类 CountDownLatch(倒计时门闩)

文章目录 同步工具类CountDownLatch常用方法使用步骤适用场景使用示例 同步工具类 JUC&#xff08;Java.util.concurrent&#xff09;是 Java 提供的用于并发编程的工具类库&#xff0c;其中包含了一些通信工具类&#xff0c;用于在多个线程之间进行协调和通信&#xff0c;特别…

【kafka】kafka如何保证数据的可靠性,kafka如何保证数据不丢失

1. Kafka架构&#xff1a; Producer - Broker - Consumer 回到问题上来&#xff0c;Kafka如何保证数据不丢失&#xff0c;我们先看看Kafka如何保证Producer端数据不丢失&#xff1a; 通过ack机制 最小副本数设置 生产者重试机制 2. Kafka Producer消息发送ACK机制&#xff1…

量化交易backtrader实践(一)_数据获取篇(2)_tushare与akshare

上一节回顾 在上一节中&#xff0c;从股票的基本功能和主要数据进行小结&#xff0c;明确了进行backtrader回测所需要的数据&#xff0c;并且学习了backtrader的数据来源以及PandasData的格式要求&#xff0c;已经做到假设拿到.txt或.csv文件后&#xff0c;能把里面的股票基本…

【代码随想录】字符串

本博文为《代码随想录》学习笔记&#xff0c;原文链接&#xff1a;代码随想录 344.反转字符串 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的…

Qt使用绿色pdf阅读器打开文件

1.下载SumatraPDF 2.设置 3.代码 void MainWindow::on_pushButton_clicked() {QProcess *process new QProcess();QString filePath "C:\\Users\\jude\\Desktop\\su\\11.pdf";QString sumatraPath "C:\\Users\\jude\\Desktop\\su\\SumatraPDF-3.5.2-64.exe&q…

Android 系统级应用守护进程

import java.util.Random; /** Application class for SystemUI. -42,6 69,8 public class SystemUIApplication extends Application { private static final String TAG “SystemUIService”; private static final boolean DEBUG false; private Context mContext;/*…

嵌入式产品发货后出现问题,怎么办?

目录 1、问题识别与初步诊断 2、影响评估 3、提出临时解决方案 4、根本原因分析与修复 5、修复验证与回归测试 6、修复的部署与客户沟通 7、预防未来类似问题 当嵌入式电子产品已发货且出现问题时&#xff0c;及时采取有效的补救措施是至关重要的。补救步骤应包括问题的…