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进行验证:
    1. In [1]: import oss2
    2. In [2]: oss2.__version__
    3. Out[2]: '2.8.0'

OSS使用

创建存储空间:

  • 方式一:直接去网站页面进行创建即可;

  • 方式二:通过代码创建

    1. import oss2
    2. auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
    3. # Endpoint以杭州为例,其它Region请按实际情况填写。yourBucketName就是你要创建的Bucket
    4. bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')
    5. bucket.create_bucket(oss2.models.BUCKET_ACL_PRIVATE)

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

    yourAccessKeySecret,别告诉别哈:)

连接OSS:

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

上传文件:

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

下载文件:

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

整体代码:

  • 根据触发信号获取摄像头的图片;
  • 获取摄像头的实时图片;
  • 将先图片保存到本地->上传阿里云->在本地进行删除
  1. import oss2
  2. import time
  3. import cv2
  4. import os
  5. import RPi.GPIO as GPIO
  6. class Camera(object):
  7. """摄像的初始化,配置"""
  8. def __init__(self, channel):
  9. self.capture = cv2.VideoCapture(channel)
  10. self.fps = int(self.capture.get(cv2.CAP_PROP_FPS))
  11. self.video_height = int(self.capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
  12. self.video_width = int(self.capture.get(cv2.CAP_PROP_FRAME_WIDTH))
  13. self.capture.set(cv2.CAP_PROP_FRAME_WIDTH, self.video_width)
  14. self.capture.set(cv2.CAP_PROP_FRAME_HEIGHT, self.video_height)
  15. self.capture.set(cv2.CAP_PROP_FPS, self.fps)
  16. # 设置摄像头的缓存图片为1,为了能获取实时的图像
  17. self.capture.set(cv2.CAP_PROP_BUFFERSIZE, 1)
  18. def get_pic(self, image_dir=None, image_name=None, is_show=False, is_write=False):
  19. """
  20. 写入照片
  21. """
  22. if self.capture.isOpened():
  23. # 读取缓存中的图片,起到清空缓存的作用
  24. abandon_ret, abandon_frame = self.capture.read()
  25. # 用于处理/上传的图片
  26. ret, frame = self.capture.read()
  27. # 判断图片信息是否读取成功
  28. if ret is False:
  29. print('get picture failed')
  30. return None
  31. # 是否需要显示
  32. if is_show is True:
  33. cv2.imshow('image', frame)
  34. cv2.waitKey(200)
  35. # 是否需要写入到文件中
  36. if is_write is True:
  37. cv2.imwrite(image_dir + '/' + image_name, frame)
  38. print('get picture success')
  39. return frame
  40. def release_camera(self):
  41. """
  42. 释放摄像机资源
  43. """
  44. self.capture.release()
  45. cv2.destroyAllWindows()
  46. class oss(object):
  47. """对象存储类,将图片传至阿里云端"""
  48. def __init__(self):
  49. self.auth = oss2.Auth('LTAIkA49HkgVYUsW', '**********************')
  50. self.bucket = oss2.Bucket(self.auth, 'http://oss-cn-hangzhou.aliyuncs.com', '20190731')
  51. def put_image(self, image_dir, image_name):
  52. put_result = self.bucket.put_object_from_file(image_name, image_dir + '/' + image_name)
  53. # 状态为200表示成功的上传
  54. if put_result.status == 200:
  55. print('put success')
  56. def get_image(self):
  57. pass
  58. class gpio(object):
  59. """触发信号的控制"""
  60. event_flag = False # 判断是否有电平触发信号
  61. def __init__(self, pin):
  62. """GPIO初始化"""
  63. self.pin = pin
  64. # 设置引脚应用模式
  65. GPIO.setmode(GPIO.BCM)
  66. GPIO.setup(self.pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
  67. # 设计引脚触发模式为:上升沿触发模式,防抖的时间为1000ms
  68. GPIO.add_event_detect(self.pin, GPIO.RISING, callback=gpio.callback, bouncetime=1000)
  69. @staticmethod
  70. def callback(flag):
  71. """回调函数"""
  72. gpio.event_flag = True
  73. def stop_event(self):
  74. GPIO.remove_event_detect(self.pin)
  75. def start_event(self):
  76. GPIO.add_event_detect(self.pin, GPIO.RISING, callback=gpio.callback, bouncetime=1000)
  77. @staticmethod
  78. def release():
  79. """GPIO释放引脚资源"""
  80. GPIO.cleanup()
  81. if __name__ == "__main__":
  82. picture = None
  83. sleep_time = 0
  84. picture_path = './put'
  85. picture_name = '.jpg'
  86. gpio_pin = 18
  87. # oss配置
  88. oss_server = oss()
  89. # 开启摄像头
  90. camera = Camera(0)
  91. # GPIO初始化
  92. event = gpio(gpio_pin)
  93. while True:
  94. if gpio.event_flag is True:
  95. gpio.event_flag = False # 标志位置位
  96. event.stop_event() # 关闭事件触发
  97. picture_name = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())) + '.jpg'
  98. # 获取图片
  99. picture = camera.get_pic(picture_path, picture_name, is_show=True, is_write=True)
  100. if picture is not None:
  101. pass
  102. # oss_server.put_image(picture_path, picture_name)
  103. else:
  104. camera.release_camera()
  105. camera = Camera(0)
  106. # 删除照片,防止内存爆炸
  107. os.remove(picture_path + '/' + picture_name)
  108. event.start_event() # 开启事件触发
  109. # time.sleep(sleep_time)
  110. gpio.release()

参考:

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

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

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

    2015-10-26 angularjs结合aliyun浏览器端oos文件上传加临时身份验证例子 在服务端获取sts 源码: public class StsServiceSample { // 目前 ...

  2. ECS上nginx搭建反向代理通过内网访问阿里云OSS服务

    对于付不起钱的小伙计,为了给公司省钱,想尽一切招数.今天就来分享一个使用阿里云OSS存储搭配CDN使用的网站服务器部署方法. 简介 阿里云OSS 阿里云提供的一种文件存储方案,和我们以前接触的百度云B ...

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

    1.申请/购买OSS服务 在阿里云上申请/购买OSS服务, 然后在会得AccessKeyID,AccessKeySecret,bucketName 这三个东西 2.增删改查 在pom.xml文件上增加 ...

  4. 阿里云OSS服务开通STS安全令牌

    搭建直传服务需要完成以下准备工作: 开通OSS,并且创建Bucket. 开通STS服务. 登录 OSS管理控制台. 在OSS概览页中找到基础配置区域,单击 安全令牌,如下图所示: 进入到 安全令牌快捷 ...

  5. 阿里云OSS 服务端签名后直传之分片上传(结合element-ui的upload组件)

    分片上传(结合element-ui的upload组件实现自定义上传) async uploadFree(content){ let data = await this.getOssToken(); / ...

  6. 阿里云oss服务通用类

    在webconfig中配置信息 <?xml version="1.0" encoding="utf-8"?><configuration> ...

  7. 构建基于阿里云OSS文件上传服务

    转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50710132 <构建基于阿里云OSS文件上传服务> <构建基于OS ...

  8. thinkphp使用阿里云OSS最新SDK,文件部署

    这文章是建立在你已经注册号阿里云的OSS,和创建好Bucket前提下: 其实阿里云的帮助与文档写的很详细,这里只说一下源码方式 1.phpsdk下载地址(摘自阿里云OSS的帮助与文档)(也有我自己下载 ...

  9. ThinkPHP5使用阿里云OSS图片上传

    1.下载OSS文件放在网站根目录下(OSS文件下载地址:https://gitee.com/jth1234/oss_files.git) 2.在入口文件中加载OSS 3.config文件配置oss信息 ...

随机推荐

  1. K8S的部署方式

    K8S部署主要有两种方式:

  2. SQL-UPDATE触发器练习

    &练习一 如下所示三张表( student,grade,student_updata_before ): student表 grade表 Student_update_before表 # 触发 ...

  3. redis存取数据String

    一.连接不同数据库和存取String类型值 1.连接数据库 2.set和get多个 3.取值并赋值 取值返回的是赋值改变之前的值: 4.递增和递减 5.字符串尾部加值 6.商品编号自增应用

  4. 自定义-starter

    目录 说明 编写启动器 新建项目测试我们自己写的启动器 分析完毕了源码以及自动装配的过程,可以尝试自定义一个启动器来玩玩! 自动装配的过程 SpringBoot-静态资源加载-源码 SpringBoo ...

  5. 方法重载(Override)

    什么是方法的重写(override 或 overwrite)? 子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作. 应用: 重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参 ...

  6. Alibaba《Java开发手册》之Java代码规范笔记

    前言 一种工具被发明出来,那么针对这种工具的各种使用规则.条条框框就随之而来.无规矩不成方圆,无制度则无国家,无风格不成代码!治国有国法.排兵布阵有章法.那么写代码也有它界内通用的不成俗的约定.最近刚 ...

  7. Docker修改容器中的时间

    Docker修改容器中的时间 前言 在公司开发时使用 Docker 创建数据库(SQL Server)的实例十分方便,还原数据库也只要设置好共享文件夹,在 SQL Server Management ...

  8. (转载https://segmentfault.com/a/1190000016313947)了解RestFul Api架构风格设计

    最近几年REST API越来越流行,特别是随着微服务的概念被广泛接受和应用,很多Web Service都使用了REST API. REST是HTTP规范主要编写者之一的Roy Fielding提出的, ...

  9. linux下部署Elasticsearch6.8.1版本的集群

    一.准备工作 安装包的下载:elasticsearch-6.8.1.tar.gz 集群服务器:A     B 一.单节点elasticsearch的安装部署 a.进入es的下载目录home:解压tar ...

  10. centos7.5 SVN 搭建

    第一步:通过yum命令安装svnserve,命令如下: >yum -y install subversion 此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行 若需查看s ...