Skip to content

Assist parents in exporting their child's personal data from Procare, including photos, videos, notes, meals, and more.

License

Notifications You must be signed in to change notification settings

everbird/geekdadgo

Repository files navigation

Geek Dad Go

帮助家长从 Procare 下载自家宝宝的数据(包括但不限于照片、视频、Note、Meal等)

Why?

我家宝宝所在的 daycare 用 Procare 每天发照片/Note 等宝宝的每日活动记录,可惜 Procare 没有提供专门的导出功能,设计上对导出数据也并不算友好,对于想要自己保留一份数据的父母困难重重,具体来讲:

  1. 用浏览器访问的 Web 页面,仅能得到最近3个月的活动数据,不过照片和视频倒是有单独的页面,可以按指定的日/周/月提供下载(没有提供批量下载,想下载要一个一个点)
  2. 用手机访问的 App,可以按活动类别展示指定日期内的数据(目测一次最多选85天),但无法从 App 上复制粘贴文字信息(要保存只能截屏)
  3. 就算是手工下载或截屏的照片,照片的拍摄日期信息也没法一并保存(在按拍摄时间排序的照片流里,可能会用下载时间代替拍摄时间,或者显示为 NODATE,会显得很凌乱)

因此想找到一个拿到这些数据的办法,以便按自己的喜欢的方式管理(例如照片/图片放在 Amazon Photos,视频放在 Google Photos),摆脱只能在 Procare 中查看的囧境。

思路

对于照片和视频,先通过 userscript 把下载文件的url和元信息保存到一个 csv 文件,再通过命令行根据 csv 文件并行下载文件,并更新其元信息; 对于 Note、Meal 或其他,先在手机 App 上录制成 MP4 视频,再通过 python 脚本提取成按日聚合的图片;

Highlight Features

  • 从 mp4 视频中逐帧分析,提取每日 Note/Meal 等

  • OCR 识别日期和时间,更新 EXIF original date 信息(这样该照片在照片流按拍摄时间排序时,才会被放到对应那一天)

  • 按日将长图和多个有部分重叠的图片缝合(stitch)成一张图片

  • 可通过更改 config 微调对 mp4 视频的分析细节(仅测试过 iPhone X Max,其他厂商或型号手机录制的 mp4 可能需要调整参数,例如调整 OCR 识别日期、时间的正确位置,提高识别准确率)

如何安装?

# Dependencies of pytesseract and PyExifTool package used in python
brew install tesseract exiftool

推荐使用 pyenv 和 virtualenv 避免影响系统 python

# Use 3.9.2 for example, you can use whatever version >= 3
pyenv install 3.9.2

# Setup and activate a virtual environment
pyenv virtualenv 3.9.2 geekdadgo-runtime
pyenv activate geekdadgo-runtime

# Upgrade pip to avoid troubles
python -m pip install --upgrade pip

# Install geekdadgo
pip install git+https://github.com/everbird/geekdadgo.git@v0.1.1

# Download config file
wget -O ~/.geekdadgo.conf https://raw.githubusercontent.com/everbird/geekdadgo/main/config/.geekdadgo.conf
geekdadgo --help

如何导出照片/视频?

下面均以手机用 iPhone X Max,桌面系统用 macOS,浏览器用 Firefox 为例,不再做特殊说明。若使用不同,请自行做相应调整。

Step 1. 导出照片/视频索引 csv 文件

  1. 安装 GreaseMonkey (Firfox) 或 Tampermonkey (Chrome )
  2. 安装 geek-dad-go_exporter.user.js userscript 脚本 (点击链接即可提示安装,或者自己手工安装:点击 Greasemonkey/Tampermonkey 按钮,选 “New user script ...“,将文件内容复制粘贴后保存 )
  3. 打开或刷新 Procare Web 页面,例如 School Dashboard
  4. 点击页面右下角新出现的 "Export photo/video links" 按钮
  5. 在弹出对话框中分别填写 起始时间 和 结束时间,格式为 YYYY-MM-DD,例如 2023-07-12
  6. 等待生成并下载 csv 文件,你可以通过浏览器自带的 Web Developer Tools 在 Console 中查看进度

Step 2. 使用索引 csv 文件下载照片/视频

打开命令行终端(Terminal 或 iTerm2 之类),执行以下命令:

cat procare-photos-csv-2022-07-12_to_2023-05-24.csv | awk -F, '{ gsub(":", "-", $2); gsub(/\..*$/, "", $2); print $1,$2,$3}' | xargs -n3 -P8 sh -c 'wget -q -O photos_2022-07-12_to_2023-05-24/$0_$1.jpg $2'

该命令用 wget 并行下载 csv 文件中 url 对应的数据,所以执行前请确保 wget 已安装。下载时间跟网速和图片数量有关,附上例子如下:

~/Downloads/procare
❯ time cat procare-photos-csv-2022-07-12_to_2023-05-24.csv | awk -F, '{ gsub(":", "-", $2); gsub(/..$/, "", $2); print $1,$2,$3}' | xargs -n3 -P8 sh -c 'wget -q -O photos_2022-07-12_to_2023-05-24/$0_$1.jpg $2'
cat procare-photos-csv-2022-07-12_to_2023-05-24.csv 0.00s user 0.00s system 0% cpu 2:07.15 total
awk -F, '{ gsub(":", "-", $2); gsub(/..
$/, "", $2); print $1,$2,$3}' 0.04s user 0.01s system 0% cpu 2:53.29 total
xargs -n3 -P8 sh -c 'wget -q -O photos_2022-07-12_to_2023-05-24/$0_$1.jpg $2' 85.71s user 31.48s system 60% cpu 3:12.35 total

~/Downloads/procare 3m 12s
❯ cat procare-photos-csv-2022-07-12_to_2023-05-24.csv | wc -l
2114

Step 3. 更新照片的 EXIF original date (视频不需要此步骤)

执行以下命令:

geekdadgo update-dto -i ~/Downloads/procare/photos_2022-07-12_to_2023-05-24

所有 -i 参数对应目录中的 png, jpg, jpeg 文件都会被遍历,按文件名以下划线(_)分隔后末尾的时间来更新该图片的 EXIF original date。附上例子如下:

~/playground/geekdadgo main* ⇣
❯ time geekdadgo update-dto -i ~/Downloads/procare/photos_2022-07-12_to_2023-05-24
geekdadgo update-dto -i ~/Downloads/procare/photos_2022-07-12_to_2023-05-24 13.23s user 4.67s system 73% cpu 24.420 total

如何导出 Note / Meal 等?

开始之前,先准备好屏幕录制功能。在 Settings -> Control Center 中加入 Screen Recording,这样从屏幕右上角下划时,会有屏幕录制按钮。

screen recording settings screen recording button

打开 Procare 移动端 App,在 Activity 标签中点击宝宝名字右下方的漏斗图标,在 Activity Filter 页面,将默认的 "All Activities" 改为你想要保存的活动类型,例如 Note 或 Meals 等。再依次选择起始时间和结束时间后,点击 APPLY 按钮得到你所选择类别和时间范围的列表。注意 App 中时间范围目测一次最多选 85 天,所以推荐按月操作。

开始录制之前,先将屏幕一直划到底部,让所有需要加载的新数据全都显示出来,直到看到底部"This is the end of your activities"。

双击顶部状态栏回到页面最顶部,从屏幕右上角下划,选择屏幕录制按钮,在开始倒计时时回到 Procare 页面,屏幕左上角出现红色按钮时,开始录制屏幕。

尽量匀速上划,直到再次看到底部。然后点击左上角红色按钮结束录制。请保障所录制的内容不包含切换程序、加载、通知条等影响画面的元素,必要时可开启 Do Not Disturb 模式。

附上例子视频仅供参考:

blurred-procare-note-20221201-20221231.mov

将录制好的 mp4 文件传输到电脑上(例如我直接用的 AirDrop)

用以下命令将 mp4 文件按日提取成图片,放在 images 目录内:

geekdadgo run -o images -i procare-note-20230301-20230331.MP4 

注意你可以用 -o 指定自己的输出目录,用 --config-path 指定自定义配置,用 -vvvv 开启更多日志。另外配置文件 中 [app]部分的 debug设置为 true 可以开启调试模式,将处理过程中识别各个区域的结果按相应帧数输出成图片,以便按效果微调配置文件中的各个参数。

从上述例子视频提取出的文件如下:

notes output

附上具体图片:

img_procare-note-20221201-20221231_frame0065_s_2022-12-08T14-45-00 img_procare-note-20221201-20221231_frame0198_n_2022-12-07T14-20-00 img_procare-note-20221201-20221231_frame0229_n_2022-12-06T19-40-00 img_procare-note-20221201-20221231_frame0309_n_2022-12-05T20-22-00 img_procare-note-20221201-20221231_frame0403_m0_2022-12-02T13-56-00

提取后请自行验收一遍图片,若出现严重遗漏、OCR偏差、缝合错位等,可以调整配置文件中的相应参数来适应你的情况

用以下命令更新图片的 EXIF original date

geekdadgo update-dto -i images

如有必要,可以考虑用不同的配置文件,将同一个 mp4 文件的图片提取到不同目录,然后从中挑选出每日较好的那张(主要是因为,如果图片很长的话,有时 stitch 会错乱或模糊,所以不同配置的输出结果有可能有好有坏)。

About

Assist parents in exporting their child's personal data from Procare, including photos, videos, notes, meals, and more.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published