Bạn cũng muốn tự động gửi ảnh vừa chụp lên Internet nhưng lại không có thiết bị chạy iOS hoặc không có tiền mua ứng dụng ShutterSnitch hoặc đơn giản là bạn cũng võ vẽ tí shell script mà máy ảnh của bạn lại có tính năng gửi ảnh lên máy chủ ftp và tất nhiên là bạn có máy chủ, thế thì tội gì mà không thử.
Bài viết sẽ không hướng dẫn cấu hình để máy ảnh gửi ảnh lên máy chủ ftp, vì trong sách hướng dẫn đã có. Ở đây, tôi sẽ cho ảnh được gửi trực tiếp từ máy ảnh vào thư mục /home/canon/photos trên máy chủ.
Tôi tạo thêm thư mục /home/canon/sync kèm với hai thư mục con ./watermarked và ./original cùng một đoạn mã có tên là sync.sh với nội dung như sau:
#!/bin/bash
TARGET_DIR=DropboxCanon:Shared/Shooting
WATERMARK=yes
PHOTO_DIR=/home/canon/photos
BASE_DIR=/home/canon/sync
LOGO=/home/canon/sync/logo.png
SYNC_ACTION=move
if [ $WATERMARK == "yes" ]; then
SOURCE_DIR=${BASE_DIR}/watermarked
else
SOURCE_DIR=${BASE_DIR}/original
fi
cd "$BASE_DIR"
# Quit if this script may be running
if [ -f lock ]; then
echo "Another process running at " $(date +"%Y-%m-%d %H:%M:%S") | tee -a log.log
exit 0
fi;
# Quit if no photo exists
if ! ls -1 "$PHOTO_DIR"/*.JPG > /dev/null 2>&1; then
echo "No photos found" && exit 0
fi;
# Create the lock file
touch lock
# Processing photos
for photo in `ls -1 "$PHOTO_DIR" | grep -e ".JPG$"`; do
echo "Processing $photo"
# Check whether file completely uploaded or not
# `lsof' is very quick but needs root permission :(
# `identify -verbose' is kind of slow, files smaller than 2MB is acceptable
if ! identify -verbose "${PHOTO_DIR}/${photo}" | grep "Corrupt JPEG data"; then
if [ $WATERMARK == "yes" ]; then
/usr/bin/composite -blend 80 -gravity SouthEast \
-geometry 300x300+30+30 \
"${PHOTO_DIR}/${photo}" ./watermarked/"$photo"
fi
echo "Move un-edited photos to original folder"
mv "${PHOTO_DIR}/${photo}" ./original/
else
echo "File is not ready. Skipped."
fi
done
echo '[rclone] Syncing FTP Server -> Web Service.'
# Now sync the processed photos
rclone "$SYNC_ACTION" "$SOURCE_DIR" "$TARGET_DIR" && echo 'Finished FTP Server -> Web Service.'
# And remove the lock file
rm lock
Ở đây tôi sẽ chuyển ảnh đã đóng dấu tới thư mục Shared/Shooting trên Dropbox của mình và dùng rclone để làm việc này.
Tôi dùng cron để tự động chạy sync.sh mỗi phút một lần.
Để theo dõi quá trình xử lí thì tôi dùng inotifywatch, xem cho vui thôi chứ không liên quan gì đến quá trình tải ảnh này.
inotifywait -r -m ./sync -m ./photos -e create -e close_write -e move -e delete | while read path action file; do echo "$file appeared in $path via $action"; done
Còn đây là video ghi lại thử nghiệm thực tế:
Tôi không rõ là ShutterSnitch có cho phép kết nối nhiều máy ảnh cùng lúc không, nhưng cách này thì bao nhiêu máy cũng được, miễn là đường truyền đủ nhanh.
Tất nhiên là đây là giải pháp rất khó sử dụng đối với người không biết Linux và tương đối bất tiện nếu muốn thay đổi cấu hình. Nhưng các báo lớn, có đội CNTT giỏi thì tôi nghĩ chuyện này chỉ là chuyện nhỏ.
Bình luận