import boto3
import cv2
import numpy as np
s3 = boto3.resource('s3')
vid = (s3.Object('bucketname', 'video.blob').get()['Body'].read())
cap = cv2.VideoCapture(vid)
这是我的代码。我在s3存储桶中有一个视频文件。我想使用OpenCV对其进行一些处理,而又不想下载它。因此,我正在尝试将该视频文件存储到vid
中。现在的问题是type(vid)
是byte
,这是导致在第6行出现此错误TypeError: an integer is required (got type bytes)
的原因。我尝试将其转换为整数或字符串,但是无法。
在尝试将字节转换为整数时:我引用了this并遇到了长度问题。这只是一个示例视频文件。当要转换为字节对象时,我要处理的实际文件将会很大。
尝试将对象作为字符串获取,然后将其转换为整数:我引用了this。甚至这似乎对我也不起作用。
如果有人可以帮助我解决此问题,我将不胜感激。如果您对我的问题不确定,请发表评论,我将尝试提供更多详细信息。
答案 0 :(得分:1)
如果从 url 流式传输视频是可以接受的解决方案,我认为这是最简单的解决方案。您只需要生成一个网址即可从中读取视频。
import boto3
import cv2
s3_client = boto3.client('s3')
bucket = 'bucketname'
key = 'video.blob'
url = s3_client.generate_presigned_url('get_object',
Params = {'Bucket': bucket, 'Key': key},
ExpiresIn = 600) #this url will be available for 600 seconds
cap = cv2.VideoCapture(url)
ret, frame = cap.read()
您应该看到您能够从该网址读取和处理帧。
答案 1 :(得分:-2)
请参阅下面的有用代码段,以对S3存储桶执行各种操作。
import boto3
s3 = boto3.resource('s3', region_name='us-east-2')
for bucket in s3.buckets.all():
print(bucket.name)
my_bucket=s3.create_bucket(Bucket='Bucket Name', CreateBucketConfiguration={
'LocationConstraint': 'us-east-2'
})
my_bucket = s3.Bucket('Bucket Name')
for file in my_bucket.objects.all():
print (file.key)
import os
print(os.getcwd())
fileName="B01.jpg"
bucketName="Bucket Name"
file = open(fileName)
s3.meta.client.upload_file(fileName, bucketName, 'test2.txt')
import matplotlib.pyplot as plt
s3 = boto3.resource('s3', region_name='us-east-2')
bucket = s3.Bucket('Bucket Name') # bucket name
object = bucket.Object('maisie_williams.jpg') # image name
object.download_file('B01.jpg') #donwload image with this name
img=plt.imread('B01.jpg') #read the downloaded image
imgplot = plt.imshow(img) #plot the image
plt.show(imgplot)
import boto3
s3 = boto3.resource('s3', region_name='us-east-2')
bucket = s3.Bucket('Bucket Name') # bucket name
object = bucket.Object('maisie_williams.jpg') # image name
object.download_file('B01.jpg')
fileName="B01.jpg"
bucketName="Bucket Name"
file = open(fileName)
s3.meta.client.upload_file(fileName, bucketName, 'testz.jpg')
如果您具有访问键,则可以进行以下操作
keys = pd.read_csv('accessKeys.csv')
#creating Session for S3 buckets
session = boto3.session.Session(aws_access_key_id=keys['Access key ID'][0],
aws_secret_access_key=keys['Secret access key'][0])
s3 = session.resource('s3')
buck = s3.Bucket('Bucket Name')