计划任务-每日拍照
工具
首选docker 搭建的青龙, 青龙可以定时执行脚本并能很好的管控,青龙控制台
用法很简单
version: '2'
services:
web:
# alpine 基础镜像版本
image: whyour/qinglong:latest
# debian-slim 基础镜像版本
# image: whyour/qinglong:debian
volumes:
- ./data:/ql/data
ports:
- "0.0.0.0:5700:5700"
environment:
# 部署路径非必须,以斜杠开头和结尾,比如 /test/
QlBaseUrl: '/'
restart: unless-stopped
通过 task day.py 来执行 scripts 下的脚本, 也可以通过绝对路径来执行
本地自动日记上传
本地搭建了 手机上利用dayone写日记 -> 分享到阿里云盘->青龙检测到下载(创建简书)->添加到aligo便于搜索-> 提交到github(青龙环境需要安装github,且.ssh)->cloudflare部署
利用 billup 自动上传视频
每日拍照
- 最先是利用青龙,发现opencv调用硬件, 容器硬件共享特别麻烦
- 利用nssm.exe, 执行路径不太对
- 利用windows任务计划程序实现
opencv 调用相机,检测人物是否在相机中间范围,进行拍照, 然后利用简书上传, 利用消息推送图片地址到手机, 中间上传到阿里云盘
import datetime
import os
import cv2
import qiniu
import requests
now = datetime.datetime.now()
year = now.strftime("%Y")
name = now.strftime("%Y-%m-%d")
@staticmethod
def notice_ding(title, content):
json_data = {"title":title,"content":content,}
response = requests.post('https://xizhi.qqoq.net/*.send', json=json_data)
print(response.json())
dir = r'D:\Administrator\Pictures\profile\{}'.format(year)
filename = dir+ r'\{}.jpg'.format(name)
def getCookies():
import http.cookies
with open(r"D:\mxz\mxz_back\scripts\writenote\cookies.txt", "r", encoding="utf8") as f:
raw_cookie_string = f.read()
cookies_dict = http.cookies.SimpleCookie()
cookies_dict.load(raw_cookie_string)
# 转换为 JSON 对象
return {key: morsel.value for key, morsel in cookies_dict.items()}
cookies = getCookies()
headers = {
'authority': 'www.jianshu.com',
'accept': 'application/json',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'if-none-match': 'W/"4a70973d5c4e6e77e1b7944653a4b13d"',
'referer': 'https://www.jianshu.com/writer',
'sec-ch-ua': '"Microsoft Edge";v="119", "Chromium";v="119", "Not?A_Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
}
def upload_image(file:str):
(filepath, filename) = os.path.split(file)
print(filename)
params = {
'filename': filename,
}
response = requests.get('https://www.jianshu.com/upload_images/token.json', params=params, cookies=cookies, headers=headers)
data = response.json()
ret, info = qiniu.put_file(data["token"], data["key"], file)
return ret['url']
def take_photo_and_close():
# 打开默认摄像头
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
# 检查摄像头是否成功打开
if not cap.isOpened():
print("无法打开摄像头")
return
# 加载 Haarcascades 人脸检测器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# 获取并保存一帧图像
ret, frame = cap.read()
if ret:
# 将帧转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 使用 Haarcascades 检测人脸
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 如果检测到人脸,保存照片并退出循环
if len(faces) > 0:
x, y, w, h = faces[0]
center_x = x + w // 2
center_y = y + h // 2
#
# # 图像中央的范围,可以根据需要进行调整
central_range = 500
# 如果人脸在图像中央范围内,保存照片并退出循环
is_center = abs(center_x - frame.shape[1] // 2) < central_range and abs(center_y - frame.shape[0] // 2) < central_range
if is_center:
# 将图片保存至指定路径
if not os.path.exists(dir):
os.makedirs(dir)
cv2.imwrite(filename, frame)
from aligo import Aligo
aligo = Aligo()
file = aligo.upload_file(file_path=filename, parent_file_id="65a00c994b40f9930e854649bc593690b9ed155a")
url = upload_image(filename)
# 输出信息
print("已成功拍照并保存到目录:{}".format(dir))
notice_ding("已成功拍照并保存到目录", "".format(url))
# 显示视频流
# cv2.imshow('Video', frame)
# 关闭摄像头
cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
# 运行拍照并关闭摄像头的函数
if not os.path.exists(filename):
take_photo_and_close()
由于执行python 会弹出控制台, 可以利用vbs解决
Set objShell = CreateObject("WScript.Shell")
objShell.Run "python D:\mxz\mxz_back\scripts\day\day_photo.py", 0, True
WScript.Quit