Python使用阿里云OSS服务

Python使用阿里云OSS服务

前言:

在远程搭建了一个平台,通过改远程平台进行数据的采集,需要将数据内容传送至本地进行处理;为了实现该功能,考虑了阿里云的OSS对象储存的服务。

40G包月只需1元:-)

甚至还有客服致电给你,说有问题可直接通过电话联系对方,15星好评

OSS安装

关于账号注册,开通服务等等功能直接去阿里云的官方进行相应操作即可

  • 安装python-devel

    • win:此过程不需要,在安装Python时已经包含了;
    • Debian/Ubuntu:apt-get install python-dev
  • 安装OSS:pip3 install oss2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
    • 安装完成后可用python进行验证:
    In [1]: import oss2
    
    In [2]: oss2.__version__
    Out[2]: '2.8.0'

OSS使用

创建存储空间:

  • 方式一:直接去网站页面进行创建即可;
  • 方式二:通过代码创建
    import oss2
    auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
    # Endpoint以杭州为例,其它Region请按实际情况填写。yourBucketName就是你要创建的Bucket
    bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')
    bucket.create_bucket(oss2.models.BUCKET_ACL_PRIVATE)

    yourBucketName为你的Bucket名称,若已存在则会报错;

    yourAccessKeySecret,别告诉别哈:)

连接OSS:

auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')

上传文件:

# 此处上传了图片文件
image_path = './test.jpg'
put_result = bucket.put_object_from_file('test.jpg', image_path)
if put_result.status == 200:
    # 若此时的status状态为200,则说明上传成功;在你选择的Bucket中已经存在文件名为'test.jpg'的文件了
    print('put success')

下载文件:

# param1:oss上bucket中的文件名
# param2:保存在当地的文件路径+文件名
get_result = bucket.get_object_to_file('test01.jpg', './get/test.jpg')
if get_result == 200:
    print("get sucess")

整体代码:

  • 根据触发信号获取摄像头的图片;
  • 获取摄像头的实时图片;
  • 将先图片保存到本地->上传阿里云->在本地进行删除
import oss2
import time
import cv2
import os
import RPi.GPIO as GPIO

class Camera(object):
    """摄像的初始化,配置"""
    def __init__(self, channel):
        self.capture = cv2.VideoCapture(channel)

        self.fps = int(self.capture.get(cv2.CAP_PROP_FPS))
        self.video_height = int(self.capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
        self.video_width = int(self.capture.get(cv2.CAP_PROP_FRAME_WIDTH))

        self.capture.set(cv2.CAP_PROP_FRAME_WIDTH, self.video_width)
        self.capture.set(cv2.CAP_PROP_FRAME_HEIGHT, self.video_height)
        self.capture.set(cv2.CAP_PROP_FPS, self.fps)
        # 设置摄像头的缓存图片为1,为了能获取实时的图像
        self.capture.set(cv2.CAP_PROP_BUFFERSIZE, 1)

    def get_pic(self, image_dir=None, image_name=None, is_show=False, is_write=False):
        """
        写入照片
        """
        if self.capture.isOpened():
            # 读取缓存中的图片,起到清空缓存的作用
            abandon_ret, abandon_frame = self.capture.read()
            # 用于处理/上传的图片
            ret, frame = self.capture.read()
            # 判断图片信息是否读取成功
            if ret is False:
                print('get picture failed')
                return None
            # 是否需要显示
            if is_show is True:
                cv2.imshow('image', frame)
                cv2.waitKey(200)
            # 是否需要写入到文件中
            if is_write is True:
                cv2.imwrite(image_dir + '/' + image_name, frame)
            print('get picture success')
            return frame

    def release_camera(self):
        """
        释放摄像机资源
        """
        self.capture.release()
        cv2.destroyAllWindows()

class oss(object):
    """对象存储类,将图片传至阿里云端"""
    def __init__(self):
        self.auth = oss2.Auth('LTAIkA49HkgVYUsW', '**********************')
        self.bucket = oss2.Bucket(self.auth, 'http://oss-cn-hangzhou.aliyuncs.com', '20190731')

    def put_image(self, image_dir, image_name):
        put_result = self.bucket.put_object_from_file(image_name, image_dir + '/' + image_name)
        # 状态为200表示成功的上传
        if put_result.status == 200:
            print('put success')

    def get_image(self):
        pass

class gpio(object):
    """触发信号的控制"""
    event_flag = False  # 判断是否有电平触发信号

    def __init__(self, pin):
        """GPIO初始化"""
        self.pin = pin
        # 设置引脚应用模式
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(self.pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
        # 设计引脚触发模式为:上升沿触发模式,防抖的时间为1000ms
        GPIO.add_event_detect(self.pin, GPIO.RISING, callback=gpio.callback, bouncetime=1000)

    @staticmethod
    def callback(flag):
        """回调函数"""
        gpio.event_flag = True

    def stop_event(self):
        GPIO.remove_event_detect(self.pin)

    def start_event(self):
        GPIO.add_event_detect(self.pin, GPIO.RISING, callback=gpio.callback, bouncetime=1000)

    @staticmethod
    def release():
        """GPIO释放引脚资源"""
        GPIO.cleanup()

if __name__ == "__main__":
    picture = None
    sleep_time = 0
    picture_path = './put'
    picture_name = '.jpg'
    gpio_pin = 18

    # oss配置
    oss_server = oss()
    # 开启摄像头
    camera = Camera(0)
    # GPIO初始化
    event = gpio(gpio_pin)

    while True:
        if gpio.event_flag is True:
            gpio.event_flag = False  # 标志位置位
            event.stop_event()  # 关闭事件触发
            picture_name = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())) + '.jpg'
            # 获取图片
            picture = camera.get_pic(picture_path, picture_name, is_show=True, is_write=True)

            if picture is not None:
                pass
                # oss_server.put_image(picture_path, picture_name)
            else:
                camera.release_camera()
                camera = Camera(0)
            # 删除照片,防止内存爆炸
            os.remove(picture_path + '/' + picture_name)

            event.start_event()  # 开启事件触发
            # time.sleep(sleep_time)

    gpio.release()

参考:

https://ptorch.com/news/209.html

原文地址:https://www.cnblogs.com/zhuchengchao/p/11622989.html

时间: 2024-12-06 17:42:08

Python使用阿里云OSS服务的相关文章

angulaijs中的ng-upload-file与阿里云oss服务的结合,实现在浏览器端上传文件到阿里云(速度可以达到1.5M)

angularjs结合aliyun浏览器端oos文件上传加临时身份验证例子 在服务端获取sts 源码: public class StsServiceSample { // 目前只有"cn-hangzhou"这个region可用, 不要使用填写其他region的值 //<setting name="accessKeyId" value="H6JSh0Y****z2cGa" /> //<setting name="ecr

阿里云OSS服务体验

我是一名PHPer,从事后台的一切开发.话说不会服务器基本运维和操作,尤其是Linux系统,不是一个合格PHPer.刚好我们公司又没有专门的运维工程师,所以平时的运维工作就大包小包地落在我身上了. 我们现在的产品是微信公众号-老玩童享福,线上的活动主要有:视频健康任务(每天做任务打卡).每日五道题选择题.每日猜猜(回复关键词答案).百日行动(关于健康方面的活动,每天做任务打卡,模式仿新东方百日行动).商城(接入有赞的商城).文体秀活动(包括有奖答题和文艺投票,覆盖河北所有地级市,分别有石家庄.唐

物联网架构成长之路(18)-接阿里云OSS服务

1.申请/购买OSS服务 在阿里云上申请/购买OSS服务, 然后在会得AccessKeyID,AccessKeySecret,bucketName 这三个东西 2.增删改查 在pom.xml文件上增加 1 <!-- https://mvnrepository.com/artifact/com.aliyun.oss/aliyun-sdk-oss --> 2 <dependency> 3 <groupId>com.aliyun.oss</groupId> 4 &

Java下载https文件上传到阿里云oss服务

今天做了一个从Https链接中下载音频并且上传到OSS服务器,记录一下希望大家也少走弯路. 一共两个类: 1 实现自己的证书信任管理器类 /** * @author mazhq * @Title: X509TrustUtiil * @ProjectName: zeus * @Description: 证书信任管理器类 * @date 2019/2/18 15:14 */ public class X509TrustUtil implements X509TrustManager { @Overr

阿里云oss服务通用类

在webconfig中配置信息 <?xml version="1.0" encoding="utf-8"?><configuration><appSettings> <add key="AccessKey" value="你的key"/><add key="AccessKeySecret" value="你的秘钥"/><a

阿里云 OSS

原文:https://help.aliyun.com/ 阿里云 OSS 阿里云 OSS(Object Storage Service)为您提供基于网络的数据存取服务.使用 OSS,您可以通过网络随时存储和调用包括文本.图片.音频和视频等在内的各种结构化或非结构化数据文件. 在使用阿里云 OSS 之前,您需要了解 OSS 的几个基本概念.阿里云 OSS 将数据文件以对象(object)的形式上传到存储空间(bucket)中. 您可以创建一个或者多个存储空间,然后向每个存储空间中添加一个或多个文件.

在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现Web端直传,服务端签名直传并设置上传回调的实现流程

在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现本地文件上传流程 by shuijingwan · 2016/01/13 1.SDK安装 github地址:https://github.com/aliyun/aliyun-oss-php-sdk 2.复制aliyun-oss-php-sdk-master\src\OSS至passport.hmwis.com\ThinkPHP\Library\Vendor\OSS,如图1.2 复制aliyun-os

ECStore图片存储采用阿里云OSS(图片存储)服务

主要功能:ECStore图片存储采用阿里云OSS(图片存储)服务   适用版本:ECStore 授权方式:授权域名使用,付费插件 联系方式: QQ 275553385  mail: [email protected]

netcore3.1增加阿里云OSS云存储服务

问题描述:由于最近的项目访问量有点大,决定部署到两天服务器,做负载的同时问题也发现了,之前的程序附件上传是上传到程序根目录的,由于做了负载,网站访问的资源就得看运气了,多刷几次才能访问的到,于是乎干脆把资源文件都放到oss上面. 解决方案:先说一下整体思路,前台是jquery的,页面加载获取osstoken,有效期是10分钟,获取时候传个参数,后台根据参数判断文件存放位置,返回加密的token,前台拿到token就能给阿里云oss上传附件了.阿里云文档还是比较健全的,找了几个开源的源码关于oss