家裡的外籍看護是來照料失智的父親,對外籍看護來說,在人生地不熟的台灣,唯一的慰藉大概就是手機另一頭的家人吧! 可以看見外籍看護時時刻刻手機不離身、耳機黏在耳朵上、手上有兩三台手機、隨時充電備戰的狀態,相信有外籍看護的家庭,都是一樣的狀況吧!
身為雇主的我們也能體諒,但若是因此影響到交付的任務,也不是我們所樂見的。起初,透過口頭提醒的方式,"ita 爸爸睡覺時間到了,該幫他安裝正壓呼吸器囉!"、"ita 該準備爸爸的晚餐囉!"...etc。對於我來說,時時掛心此時該作什麼事,非常勞心,兼且隨著年紀越來越大,自己的事都快記不住了,還要記得提醒外籍看護,這真是太折磨人了。既然手機成癮,那就透過手機提醒吧!外籍看護不看手機訊息的話,就再去提醒她看訊息吧!
google 是個人戶的好夥伴,gcp 平台上的各項服務,在低使用量的情形下幾乎免費。
這次使用 google apps script、google sheet、Line Notify 輕鬆在半天的時間完成目標。
不帶太多說明,直接參考代碼。本篇主要帶個想法兼實作,順帶拿 google apps script 練練手。
完整的 Github 專案請參考: HeyIta
]]>家裡的外籍看護是來照料失智的父親,對外籍看護來說,在人生地不熟的台灣,唯一的慰藉大概就是手機另一頭的家人吧! 可以看見外籍看護時時刻刻手機不離身、耳機黏在耳朵上、手上有兩三台手機、隨時充電備戰的狀態,相信有外籍看護的家庭,都是一樣的狀況吧!
身為雇主的我們也能體諒,但若是因此影響到交付的任務,也不是我們所樂見的。起初,透過口頭提醒的方式,"ita 爸爸睡覺時間到了,該幫他安裝正壓呼吸器囉!"、"ita 該準備爸爸的晚餐囉!"...etc。對於我來說,時時掛心此時該作什麼事,非常勞心,兼且隨著年紀越來越大,自己的事都快記不住了,還要記得提醒外籍看護,這真是太折磨人了。既然手機成癮,那就透過手機提醒吧!外籍看護不看手機訊息的話,就再去提醒她看訊息吧!
google 是個人戶的好夥伴,gcp 平台上的各項服務,在低使用量的情形下幾乎免費。
這次使用 google apps script、google sheet、Line Notify 輕鬆在半天的時間完成目標。
不帶太多說明,直接參考代碼。本篇主要帶個想法兼實作,順帶拿 google apps script 練練手。
完整的 Github 專案請參考: HeyIta
]]>臉書上偶爾會跳出多年前的貼文、相片、影片,每每看到都會湧上不少回憶。隨著日子一天一天過去,卻越來越不想公開自己的生活到社群平台。不過我有NAS耶,裡面存放了過去十多年的相片、影片。如果可以像臉書一樣,每天從去年同期的相片庫裡,隨機挑幾張相片來回憶就好了。
我的 NAS 是 Synology DS214Play,裡面有四十萬張相片,空間占用大約1.5T,一直在找適合的 Synology 套件,試用過 Memory,不過光轉檔就轉到昏天暗地了,更遑論要瀏覽相片了。找不到,乾脆動手做吧!
程式每天從相片庫裡隨機找出過去幾年與今日同日期的相片,例如今天是 2020/6/2,往前找出 2019/6/2、2018/6/2、2017/6/2,以此類推。經由各種通訊平台傳送相片。
首先整理一下擁有的技能跟環境
先到 DSM 上將 SSH 登入開啟
透過 Putty 登入 NAS
從 github 將專案打包到 nas 上並解壓縮
$ wget --no-check-certificate --content-disposition https://github.com/sporting/PhotoYourHistory/archive/v1.20.6.1.tar.gz
$ tar -xvzf PhotoYourHistory-1.20.6.1.tar.gz
$ mv PhotoYourHistory-1.20.6.1 PhotoYourHistory
設定環境
建立 virtualenv 環境
$ cd PhotoYourHistory
$ python3 -m venv env
$ source env/bin/activate
設定要監控的目錄
$ python init/SetRootDir.py /var/services/photo/
設定通訊平台
$ python init/SetBotToken.py [YOUR_TELEGRAM_BOT_ACCESS_TOKEN]
$ python init/SetUserData.py ERIC "TELEGRAM" [TELEGRAM_ID] 艾力克
$ python init/SetUserData.py ERIC "LINE NOTIFY" [LINE_NOTIFY_TOKEN] 艾力克
設定你想收到的相片分類,例如 ERIC 想收到關於 自己及ALICE、LINDA的相片訊息
$ python init/SetCareCatagory.py ERIC ERIC ALICE LINDA
在建立相片索引資料庫之前,請先建立相片分類引擎,請在 db 資料夾中建立一個檔案名稱為 MyCatalogEncoder.py 的檔案
$ touch db/MyCatalogEncoder.py
可以透過 vim 編輯或是回到 DSM 上編輯內容,請依據你的相片目錄管理原則,進行分類
>>> from db.CatalogEncoder import CatalogEncoder
>>> class MyCatalogEncoder(CatalogEncoder):
>>> def default(self, dir):
if dir.find('ERIC')>=0:
return 'ERIC,ALICE,LINDA'
s = ''
if dir.find('ERIC')>=0 or dir.find('mobile-eric')>=0:
s = 'ERIC' if s=='' else s+',ERIC'
if dir.find('ALICE')>=0 or dir.find('mobile-alice')>=0:
s = 'ALICE' if s=='' else s+',ALICE'
if dir.find('LINDA')>=0 or dir.find('mobile-linda'):
s = 'LINDA' if s=='' else s+',LINDA'
return 'ERIC,ALICE,LINDA' if s=='' else s
可選功能,如果你想在手機平台上透過瀏覽器直接播放 Synology Nas 上面的影片,請將 Nas Domain、Port、登入 NAS 帳號密碼設定進資料庫,NAS 帳號密碼可以新增一個只有 photo 權限的帳號。程式會使用這個帳號取得登入 Nas 的 SID,並產生等同 DSFile 的觀看連結。
$ # ex: python init/SetNasHostIPPort.py yourSynologyNas.dscloud.me 5001
$ python init/SetNasHostIPPort.py [YOUR_NAS_DOMAIN_OR_IP] [YOUR_NAS_PORT]
$ python init/SetNasLoginAccountPwd.py [YOUR_NAS_LOGIN_ACCOUNT] [YOUR_NAS_LOGIN_PASSWORD]
可選功能,有時候拍了相片卻忘掉這照片在哪裡拍的,可以透過 Google Map GeoLocation API 將地址夾帶在訊息之中。請至 google cloud 申請 API KEY,並設定進資料庫
$ python init/SetGoogleMapApi.py [YOUR_GOOGLE_MAP_API_KEY]
最後請在 DSM 控制台的任務排程表新增兩個排程,一個是更新相片資料庫索引,一個是發送相片到指定的通訊平台
更新相片資料庫索引的排程請執行以下 command (YOUR_REPOSITORY_DIRECTORY 請設定剛才 PhotoYourHistory 的完整目錄,例如 /var/services/homes/eric/PhotoYourHistory/)
我是設定在半夜 12:00 執行
$ export LANG='en_US.UTF-8'
$ export LC_ALL='en_US.UTF-8'
$ cd [YOUR_REPOSITORY_DIRECTORY]
$ source env/bin/activate
$ PYTHONIOENCODING=utf-8 python DailyInsertMonitorDir.py
$ PYTHONIOENCODING=utf-8 python DailyIndexingNewFiles.py
發送相片到指定的通訊平台排程請執行以下 command
我是設定在早上 6:00 執行,以便在起床後可以觀看
$ export LANG='en_US.UTF-8'
$ export LC_ALL='en_US.UTF-8'
$ cd [YOUR_REPOSITORY_DIRECTORY]
$ source env/bin/activate
$ PYTHONIOENCODING=utf-8 python DailyPushPhotoThisDay.py
預設每個日期隨機挑選三張相片,如果想調整隨機發送的相片數量,可逕行修改 DailyPushPhotoThisDay.py 裡的相片數,例如改成每天五張相片
>>> # -*- coding: UTF-8 -*-
>>> from datetime import datetime
>>> from db.SaUsersDB import dbUsersHelper
>>> import mysys.PushPhoto as PhotoService
>>> if __name__ == "__main__":
>>> duh = dbUsersHelper()
>>> users = duh.getSMSUsers()
>>> PhotoService.Push(users,datetime.today(),5)
收到訊息如下
如何決定相片的日期?
Reply: 一般拍攝的相片裡會存放 Exif 資訊,以 Exif 資訊內的日期為主,而不參考檔案建檔、修改、存取日期。如果沒有 Exif 的檔案,需自行更新相片資料庫裡的 PHOTO_UTC_TS、PHOTO_UTC_DATE。
拍攝相片會有時區的問題?
Reply: 因為要找出"與今日同期"的相片,需對相片時區的日期進行轉換。
在 NAS 裡進行相片管理,新增、修改、移動、刪除目錄後,如何更新相片資料庫?
Reply: 監控指定目錄以進行檔案及目錄等索引。
發送訊息的成本?
Reply: LINE 2.0 有 500 則免費訊息,超過就要收費。程式僅考慮最低成本,採用 Line Notify、Telegram Bot。
家庭影片能不能也當訊息發送?
Reply: 可以,可是影片沒有 Exif 資訊,只能以建檔日期等資訊做為參考。
發送相片或是家庭影片檔案會不會很大?
Reply: 考量瀏覽相片的順暢,以縮圖進行發送。考量影片的檔案大小,以發送 Synology Nas 連結的方式,在手機上直接觀賞串流影片。
Nas 裡有很多 User 自己的相片,我並不想收到其他人的相片。
Reply: 須將照片進行分類,本程式是以目錄名稱進行預分類,輔以每個 User 想觀看的不同分類進行通知提醒。例如目錄名稱有Eric、Alice字樣的,分類為ERIC, ALICE。而 Eric 想得到 Eric, Alice 相關的照片通知提醒。
可以像 Synology Package Memory 一樣有人臉辨識功能並進行分類嗎?或是只要發送有人像的照片即可?
Reply: face-recognition 套件裝不起來,不然我也想做!有人有辦法安裝起來嗎?拜託告訴我!
臉書上偶爾會跳出多年前的貼文、相片、影片,每每看到都會湧上不少回憶。隨著日子一天一天過去,卻越來越不想公開自己的生活到社群平台。不過我有NAS耶,裡面存放了過去十多年的相片、影片。如果可以像臉書一樣,每天從去年同期的相片庫裡,隨機挑幾張相片來回憶就好了。
我的 NAS 是 Synology DS214Play,裡面有四十萬張相片,空間占用大約1.5T,一直在找適合的 Synology 套件,試用過 Memory,不過光轉檔就轉到昏天暗地了,更遑論要瀏覽相片了。找不到,乾脆動手做吧!
程式每天從相片庫裡隨機找出過去幾年與今日同日期的相片,例如今天是 2020/6/2,往前找出 2019/6/2、2018/6/2、2017/6/2,以此類推。經由各種通訊平台傳送相片。
首先整理一下擁有的技能跟環境
先到 DSM 上將 SSH 登入開啟
透過 Putty 登入 NAS
從 github 將專案打包到 nas 上並解壓縮
$ wget --no-check-certificate --content-disposition https://github.com/sporting/PhotoYourHistory/archive/v1.20.6.1.tar.gz
$ tar -xvzf PhotoYourHistory-1.20.6.1.tar.gz
$ mv PhotoYourHistory-1.20.6.1 PhotoYourHistory
設定環境
建立 virtualenv 環境
$ cd PhotoYourHistory
$ python3 -m venv env
$ source env/bin/activate
設定要監控的目錄
$ python init/SetRootDir.py /var/services/photo/
設定通訊平台
$ python init/SetBotToken.py [YOUR_TELEGRAM_BOT_ACCESS_TOKEN]
$ python init/SetUserData.py ERIC "TELEGRAM" [TELEGRAM_ID] 艾力克
$ python init/SetUserData.py ERIC "LINE NOTIFY" [LINE_NOTIFY_TOKEN] 艾力克
設定你想收到的相片分類,例如 ERIC 想收到關於 自己及ALICE、LINDA的相片訊息
$ python init/SetCareCatagory.py ERIC ERIC ALICE LINDA
在建立相片索引資料庫之前,請先建立相片分類引擎,請在 db 資料夾中建立一個檔案名稱為 MyCatalogEncoder.py 的檔案
$ touch db/MyCatalogEncoder.py
可以透過 vim 編輯或是回到 DSM 上編輯內容,請依據你的相片目錄管理原則,進行分類
>>> from db.CatalogEncoder import CatalogEncoder
>>> class MyCatalogEncoder(CatalogEncoder):
>>> def default(self, dir):
if dir.find('ERIC')>=0:
return 'ERIC,ALICE,LINDA'
s = ''
if dir.find('ERIC')>=0 or dir.find('mobile-eric')>=0:
s = 'ERIC' if s=='' else s+',ERIC'
if dir.find('ALICE')>=0 or dir.find('mobile-alice')>=0:
s = 'ALICE' if s=='' else s+',ALICE'
if dir.find('LINDA')>=0 or dir.find('mobile-linda'):
s = 'LINDA' if s=='' else s+',LINDA'
return 'ERIC,ALICE,LINDA' if s=='' else s
可選功能,如果你想在手機平台上透過瀏覽器直接播放 Synology Nas 上面的影片,請將 Nas Domain、Port、登入 NAS 帳號密碼設定進資料庫,NAS 帳號密碼可以新增一個只有 photo 權限的帳號。程式會使用這個帳號取得登入 Nas 的 SID,並產生等同 DSFile 的觀看連結。
$ # ex: python init/SetNasHostIPPort.py yourSynologyNas.dscloud.me 5001
$ python init/SetNasHostIPPort.py [YOUR_NAS_DOMAIN_OR_IP] [YOUR_NAS_PORT]
$ python init/SetNasLoginAccountPwd.py [YOUR_NAS_LOGIN_ACCOUNT] [YOUR_NAS_LOGIN_PASSWORD]
可選功能,有時候拍了相片卻忘掉這照片在哪裡拍的,可以透過 Google Map GeoLocation API 將地址夾帶在訊息之中。請至 google cloud 申請 API KEY,並設定進資料庫
$ python init/SetGoogleMapApi.py [YOUR_GOOGLE_MAP_API_KEY]
最後請在 DSM 控制台的任務排程表新增兩個排程,一個是更新相片資料庫索引,一個是發送相片到指定的通訊平台
更新相片資料庫索引的排程請執行以下 command (YOUR_REPOSITORY_DIRECTORY 請設定剛才 PhotoYourHistory 的完整目錄,例如 /var/services/homes/eric/PhotoYourHistory/)
我是設定在半夜 12:00 執行
$ export LANG='en_US.UTF-8'
$ export LC_ALL='en_US.UTF-8'
$ cd [YOUR_REPOSITORY_DIRECTORY]
$ source env/bin/activate
$ PYTHONIOENCODING=utf-8 python DailyInsertMonitorDir.py
$ PYTHONIOENCODING=utf-8 python DailyIndexingNewFiles.py
發送相片到指定的通訊平台排程請執行以下 command
我是設定在早上 6:00 執行,以便在起床後可以觀看
$ export LANG='en_US.UTF-8'
$ export LC_ALL='en_US.UTF-8'
$ cd [YOUR_REPOSITORY_DIRECTORY]
$ source env/bin/activate
$ PYTHONIOENCODING=utf-8 python DailyPushPhotoThisDay.py
預設每個日期隨機挑選三張相片,如果想調整隨機發送的相片數量,可逕行修改 DailyPushPhotoThisDay.py 裡的相片數,例如改成每天五張相片
>>> # -*- coding: UTF-8 -*-
>>> from datetime import datetime
>>> from db.SaUsersDB import dbUsersHelper
>>> import mysys.PushPhoto as PhotoService
>>> if __name__ == "__main__":
>>> duh = dbUsersHelper()
>>> users = duh.getSMSUsers()
>>> PhotoService.Push(users,datetime.today(),5)
收到訊息如下
如何決定相片的日期?
Reply: 一般拍攝的相片裡會存放 Exif 資訊,以 Exif 資訊內的日期為主,而不參考檔案建檔、修改、存取日期。如果沒有 Exif 的檔案,需自行更新相片資料庫裡的 PHOTO_UTC_TS、PHOTO_UTC_DATE。
拍攝相片會有時區的問題?
Reply: 因為要找出"與今日同期"的相片,需對相片時區的日期進行轉換。
在 NAS 裡進行相片管理,新增、修改、移動、刪除目錄後,如何更新相片資料庫?
Reply: 監控指定目錄以進行檔案及目錄等索引。
發送訊息的成本?
Reply: LINE 2.0 有 500 則免費訊息,超過就要收費。程式僅考慮最低成本,採用 Line Notify、Telegram Bot。
家庭影片能不能也當訊息發送?
Reply: 可以,可是影片沒有 Exif 資訊,只能以建檔日期等資訊做為參考。
發送相片或是家庭影片檔案會不會很大?
Reply: 考量瀏覽相片的順暢,以縮圖進行發送。考量影片的檔案大小,以發送 Synology Nas 連結的方式,在手機上直接觀賞串流影片。
Nas 裡有很多 User 自己的相片,我並不想收到其他人的相片。
Reply: 須將照片進行分類,本程式是以目錄名稱進行預分類,輔以每個 User 想觀看的不同分類進行通知提醒。例如目錄名稱有Eric、Alice字樣的,分類為ERIC, ALICE。而 Eric 想得到 Eric, Alice 相關的照片通知提醒。
可以像 Synology Package Memory 一樣有人臉辨識功能並進行分類嗎?或是只要發送有人像的照片即可?
Reply: face-recognition 套件裝不起來,不然我也想做!有人有辦法安裝起來嗎?拜託告訴我!