吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1001|回复: 1
收起左侧

[Python 原创] 换起拍照并上传至Google云端硬盘-随记

[复制链接]
lijin671 发表于 2024-1-3 17:37
本帖最后由 lijin671 于 2024-1-3 18:08 编辑

因为舍友老是乱动电脑,所以写了这个代码,保存证据,不怕一万就怕万一,Python不是很会,口下留情~

先去Google Cloud里面创建 OAuth、引入库、创建凭证

https://console.cloud.google.com/apis/credentials/consent?hl=zh-cn&project=sinuous-city-409603&supportedpurview=project

OAuth:只能启用测试版,然后将自己的Google账号添加进测试者。
API搜索启用:Google Drive API
最后是凭据,创建OAuth 2.0 客户端 ID,选择桌面应用,创建完成,下载json文件,记住路径,要在代码中修改路径。

import os
import datetime
import cv2
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload

# 定义调用摄像头和保存照片的函数
def take_photo(filename='photo.jpg', show=False):
    cam = cv2.VideoCapture(0)
    retval, img = cam.read()
    if retval:
        cv2.imwrite(filename, img)
        if show:
            cv2.imshow(filename, img)
    del(cam)

# 定义上传文件到Google Drive的函数
def upload_to_google_drive(filename):
    creds = None
    if os.path.exists('C:/Windows/Web/PhotouploadDrive/token.json'):  #因为要设置定时任务,所以请将路径改为绝对路径,防止执行是路径有误。
        creds = Credentials.from_authorized_user_file('C:/Windows/Web/PhotouploadDrive/token.json')  #因为要设置定时任务,所以请将路径改为绝对路径,防止执行是路径有误。
    if not creds or not creds.valid:
        flow = InstalledAppFlow.from_client_secrets_file(
            'C:/Windows/Web/PhotouploadDrive/xxxx.apps'
            '.googleusercontent.com.json',  #这个我是创建了Google项目,然后下载json文件的,xxx替换成你的json文件名,路径也要对应,最好是绝对路径,否则后面设定Windows任务会找不到。
                                                ['https://www.googleapis.com/auth/drive.file'])  #因为要设置定时任务,所以请将路径改为绝对路径,防止执行是路径有误。
        creds = flow.run_local_server(port=0)
        with open('C:/Windows/Web/PhotouploadDrive/token.json', 'w') as token_file:  #因为要设置定时任务,所以请将路径改为绝对路径,防止执行是路径有误。
            token_file.write(creds.to_json())
    service = build('drive', 'v3', credentials=creds)
    file_metadata = {'name': os.path.basename(filename), 'mimeType': 'image/jpeg'}
    media = MediaFileUpload(filename, mimetype='image/jpeg')
    service.files().create(body=file_metadata, media_body=media).execute()

# 获取当前时间,并打开摄像头照相,然后上传到Google Drive
if __name__ == '__main__':
    current_time = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
    photo_name = 'C:/Windows/Web/PhotouploadDrive/output/Photo_{}.jpg'.format(current_time)   #因为要设置定时任务,所以请将路径改为绝对路径,防止执行是路径有误。
    take_photo(photo_name)
    upload_to_google_drive(photo_name)

最后是Windows任务计划程序,创建基本任务,名称和描述看你自己填写,然后触发器可以先选计算机启动时,后面可以再添加新的,弄成多触发器,操作选启动程序,然后程序选择上面代码打包的exe文件,下一步,完成。然后查看这个任务,选择这个任务,右边有运行,可以测试是否成功运行,成功运行的话,会调用相机,拍照,然后再output里面有一份照片,然后Google硬盘里面也有一份,当然,保存的路径也可以按照你们的喜好更改,成功运行后,在触发器中添加其他的触发器,我是还有添加登录账户时拍照。

缺陷:其实缺陷挺多的,就好比调用了程序后,会有终端弹出,这个以后再改,然后是我原本想唤醒屏幕也拍照,好像需要用到第三方软件。。。还有Google验证是需要刷新的,我看网上是说可以再Python里面做自动刷新,但也还没来得及做,欢迎大佬补充、指正。

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

qiwaitfor 发表于 2024-1-4 08:57
学习了  谢谢分享!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 18:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表