读取s3图片并保存至excel

news2024/9/21 12:46:02

1. 构建Client类,实现图片读取

1.1 导包&config

client.py

import os
import numpy as np
import pandas as pd
import cv2
import boto3
# boto3安装: pip3 install opencv-python boto3

config = {
    "region_name": "us-east-1",
    "endpoint_url": "https://s3.rapidcompute.com",
    # "image_bucket": "prod-barwaqt-image",
    "aws_access_key_id": "rcus_bd-prod",
    "aws_secret_access_key": "OgRKm6h...2HdbKA6s",
}

1.2 类实现

class Client:
    def __init__(self):
        self.config = config
        self.client = boto3.client('s3', **config)

    def read_image(self, bucket_name, image_key):
        try:
            response = self.client.get_object(Bucket=bucket_name, Key=image_key)
            body = response.get('Body')
            tmp = np.frombuffer(body.read(), np.uint8)
            image = cv2.imdecode(tmp, cv2.IMREAD_COLOR)
            return 'OK', image
        except Exception as e:
            return 'ERROR', 'READ_IMAGE_ERROR'


2. 图片下载至本地文件夹mydir

2.1 单图下载

def save_one_img(img_path, file_name='test.jpg'):
    client = Client()
    _, img = client.read_image('prod-barwaqt-image', img_path)
    print('res_status: ', _)
    cv2.imwrite(file_name, img)

测试

img_path = 'prod/18/be56/18be564c36b05d730257dbbe87ede614.jpg'
save_one_img(img_path)

2.2 批量下载

def save_img(line):
    client = Client()
    status, img = client.read_image('prod-barwaqt-image', line)
    if status == 'OK':
        filename = os.path.join('mydir', line.split('/')[-1])
        # os.makedirs('./mydir', exist_ok=True)
        cv2.imwrite(filename, img)

测试

df = pd.read_csv('img_path.csv')
df['s3_path'].apply(save_img)

img_path.csv 如下:

user_account_ids3_path
210805010001565250prod/12/e122/12e122b5328e1b5007b3de5c76e0bf02.jpg
210812010008799851prod/26/92b7/2692b7c55bb71581586a6392926c0a24.jpg
 

3. 保存图片至excel

读取test_data.csv中的数据,将地址字段进行相应图片下载,追加至行末。

输入:test_data.csv

 输出:res.xlsx

 

3.1 导包

# -*- coding: utf-8 -*-
import os
import pandas as pd
import cv2
import xlsxwriter
import tqdm

# 定义一个excel文件,并添加一个sheet
BOOK = xlsxwriter.Workbook('res.xlsx')
SHEET = BOOK.add_worksheet('sheet1')
CEIL_HEIGHT = 256
SHEET.set_default_row(CEIL_HEIGHT)
SHEET.set_column(0, 18, CEIL_HEIGHT / 18)

3.2 插入图片内容

1. 在一个单元格插入一张图片

def inset_a_img(img_name, target_col):  # target_col:插入的位置
    # 从本地文件夹读图片
    image_path = os.path.join("./mydir/", img_name)
    h, w, *_ = cv2.imread(image_path).shape
    scale = CEIL_HEIGHT * 1.3 / h
    SHEET.insert_image(line.Index + 1, target_col, image_path,  # x_offset可调整x轴图片偏移
                       {'x_offset': 100, 'y_offset': 2, 'x_scale': scale, 'y_scale': scale, 'positioning': 1})

2. 处理一行数据

def insert_image(line):
    print('正在操作第几行: ', line.Index)
    print("该行有多少列: ", len(line))
    
    # 从第2列开始循环插入(第1列为索引)
    for i in range(1, len(line)):
        # print("正在操作第几列 col_no: ", i)
        if pd.isna(line[i]):
            SHEET.write(line.Index + 1, i-1, '')  # 由于插入了表头,所以从第一行开始写
        else:
            SHEET.write(line.Index + 1, i-1, line[i])

        if i == 1 and not pd.isna(line.s3_path_1):   # 当该列为s3_path_1,且其值不为空
            target_col = 3
            img_name = line.s3_path_1.split('/')[-1]
            print(img_name)
            inset_a_img(img_name, target_col)
        if i == 2 and not pd.isna(line.s3_path_2):  # 为Nan的置空,不写入图片
            target_col = 5
            img_name = line.s3_path_2.split('/')[-1]
            inset_a_img(img_name, target_col)

3.2 测试

df = pd.read_csv('test_data.csv', dtype=str)
col_list = ['user_account_id', 's3_path_1', 's3_path_2']
df.columns = col_list
# 为写入excel表头
for i in range(len(col_list)):
    SHEET.write(0, i, col_list[i])  # 第0行第i列插入字段

for line in tqdm.tqdm(df.itertuples()):  # tqdm: 显示进度条
    # print(line)
    # 算上index列,每行有len(col_list)+1 列
    # Pandas(Index=0, user_account_id='21...346', s3_path_1='e4.jpg',
    #        s3_path_2='fc.jpg')
    insert_image(line)

BOOK.close()

   

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

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

相关文章

k8s安装使用教程 ingress

k8s安装使用教程ingressk8s安装使用教程ingressk8s安装使用教程ingressk8s安装使用教程ingressk8s安装使用教程ingress 注意 1 .服务器配置 大于等于 2核 4 G 2.服务器之间内网必须可以ping通 3.系统是CentOS-7.9.2111-x64 hostnamectl set-hostname xuegod1 设置主机名 每台机…

一个基于.Net高性能跨平台内网穿透工具

作为一名程序员,我们平常需要调试远程API(如公众号回调)、远程操作公司内部、家里的电脑,我们都会用到内网穿透的工具。 今天给大家推荐一个高性能跨平台内网穿透工具的开源项目。 项目简介 一个基于.Net开发的内网穿透工具&am…

Linux虚拟化网络之链路聚合

一、bond链路聚合技术 网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术。 目前网卡绑定mode共有七种(0~6)bond0、bond1、bond2、bond3、bond4、bond5、bond6。 常用的有三…

JNI技术解析

一、JNI是什么? JNI是Java Native Interface的缩写,译为Java本地调用。JNI是一种技术。 二、JNI技术的用途? Java程序中的函数调用Native程序中的函数。Native一般指使用C/C++编写的函数。Native程序中的函数调用Java程序中的函数。三、注册JNI函数 静态注册Java层函数通过…

window和linux的nacos安装

Nacos注册中心 Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高 Nacos的下载 在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码: …

【计算机视觉】图像预处理

图像预处理 线性滤波与卷积 线性滤波 线性滤波使用的加权模式通常称为滤波的核,使用滤波的过程称为卷积。 卷积 对称性高斯模型 处理模糊问题的较好模型是对称性高斯模型 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4QyrgiTg-16…

19-29-k8s-基本命令-yaml-kubectl

19-k8s-基本命令-yaml-kubectl: Kubernetes 集群的命令行工具kubectl 1、kubectl 命令格式: kubectl [command] [type] [name] [flags] 参数: command:指定要对资源执行的操作,例如create、get、describe、delete t…

ARM异常处理(2):中断的输入和挂起的6种情况分析

本节将描述中断输入和挂起的分析,这也同样适用于NMI输入,NMI在大多数情况下都将立即执行,除非:已经在执行NMI中断处理程序、由调试器暂停或由于一些严重的系统错误导致芯片锁定。 1、 当一个中断输入时,它将被挂起&…

Process.Start() 报错:系统找不到指定文件

今天在工作中遇到调用浏览器打开页面,代码报错:System.ComponentModel.Win32Exception:“系统找不到指定的文件。” 代码如下: ProcessStartInfo info new ProcessStartInfo("chrome.exe");// 打开一个新的chrome独立窗体启动info…

TI DSP的中断

F28069的中断数是96个,分为12组 The PIE block can support 96 individual interrupts that are grouped into blocks of eight.Each group is fed into one of 12 core interrupt lines (INT1 to INT12) 比如常用的的CPU0定时器这个中断就是在第一组的第7个&#x…

Java项目:SSM新闻网站管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 管理员角色包含以下功能: 管理员登录,新闻管理,类别管理,用户管理,管理员管理,广告管理等功能。 用户角色包含以下功能:…

水溶性,非反应性,含有游离羧酸功能----cy染料 近红外荧光亲水CY7 COOH;Sulfo-CY5/CY7 COOH

近红外荧光亲水染料Sulfo-Cyanine7 carboxylic acid Sulfo-Cyanine7 carboxylic acid;SSulfo-Cyanine7 COOH;Sulfo-CY7 COOH;磺酸基-Cy7羧酸;磺化Cy7羧酸 产品名称:磺酸基-Cy3 羧酸 英文名称:Sulfo-Cyanine7 carboxylic acid 其他名称&#…

数据趣事:豪掷2200亿美元举办的世界杯有多精彩!世界杯趣事你知道哪些

2022卡塔尔世界杯正如火如荼的进行着,此次的卡塔尔世界杯也是中东和阿拉伯地区首次举办,为此卡塔尔更是豪掷2200亿美元,远超历届主办国。 本届世界杯共有32支来自不同国家的队伍,他们都有一个共同的奋斗目标——捧起大力神杯&…

[附源码]计算机毕业设计通用病例管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java网上私厨到家服务平台dp28s

做毕业设计一定要选好题目。毕设想简单,其实很简单。这里给几点建议: 1:首先,学会收集整理,年年专业都一样,岁岁毕业人不同。很多人在做毕业设计的时候,都犯了一个错误,那就是不借鉴…

消息队列的持久化、分发策略、高可用和高可靠

原文:消息队列 一、什么是消息的持久化? 简单来说就是将数据存入磁盘,而不是存在内存中随服务器重启断开而消失,使数据能够永久保存。 常见的持久化方式 二、消息队列的分发策略 MQ消息队列有如下几个角色 1:生产…

CNCC技术论坛|分布式数据库HTAP的探索与实践

本文转载自微信公众号“中国计算机学会” 编者按 12月8-10日,中国计算机协会即将全线上举办CNCC2022,大会覆盖118个计算行业、人工智能、云计算、教育、安全等30个热门专业领域的技术论坛,700余位专家将着力探讨计算技术与未来宏观发展趋势&a…

多通道LMMSE图像超分辨复原方法研究-附Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、多通道LMMSE复原算法✳️ 三、实验验证✳️ 四、参考文献✳️ 五、Matlab程序获取与验证✳️ 一、引言 数字图像处理又称为计算机图像处理,是指运用计算机处理平台及相关理论知识,将图像信号转化为数字信号&#…

G120变频器输入输出端子功能定义配置方法及示例

G120变频器输入输出端子功能定义配置方法及示例 1. 数字量输入功能(适用机型:CU240B-2(DP)/CU240E-2(DP/PN)/CU250S-2(DP/PN)) CU240B-2提供4路数字量输入,CU240E-2提供6路数字量输入,CU250S-2提供11路数字量输入和4路可作为输入/输出的数字量端子。在有必要时,也可以将模…

Splunk UBA 导入IDS - firesight 数据

1: 先看一下Splunk IDS 文档: Splunk UBA category to Splunk CIM field mapping reference - Splunk Documentation 里面清楚的记录着哪些是必须字段: 2: 下面开始配这些字段SPL: 发现就是报如下的错: 3: 最后把tag 的字段增加:attack_ids 就可以了,真是奇怪: index…