Mục lục:

Raspberry Pi Linux Motion Tích hợp Google Photos: 5 bước
Raspberry Pi Linux Motion Tích hợp Google Photos: 5 bước

Video: Raspberry Pi Linux Motion Tích hợp Google Photos: 5 bước

Video: Raspberry Pi Linux Motion Tích hợp Google Photos: 5 bước
Video: Đưa trợ lý ảo Google Assistant lên Gương Thông Minh với Raspberry Pi mới nhất 2021 2024, Tháng mười một
Anonim
Raspberry Pi Linux Motion Tích hợp Google Photos
Raspberry Pi Linux Motion Tích hợp Google Photos

Ý tưởng là tải ảnh và video được thực hiện bằng cam kích hoạt chuyển động được kết nối với Raspberry Pi để tải tệp lên đám mây. Phần mềm ‘Motion’ hỗ trợ tải lên Google Drive thông qua PyDrive. Trong bài viết này, "Chuyển động" được sử dụng để tải lên Google Photos.

Phần cứng:

Raspberry Pi 3B +

Webcam USB Logitech C920

Việc lựa chọn phần cứng không được xác định, tôi chỉ lấy những gì trong tầm tay.

Điều kiện tiên quyết:

Để thuận tiện, Raspberry pi nên ở trong mạng cục bộ của bạn - để điều khiển nó mà không cần màn hình / bàn phím và tải lên / tải xuống các tệp. Đối với điều này, bạn nên có tác nhân ssh trên PC của mình (ví dụ: putty).

Rất cám ơn ssandbac về một hướng dẫn tuyệt vời. Nếu bạn cần thêm thông tin về cách thiết lập môi trường, hãy xem bài viết này. Tôi đã mượn các bước cài đặt và cấu hình chuyển động từ nó và thêm một số thay đổi. Đặc biệt, thay vì gửi tệp và cảnh báo qua email, ví dụ này sử dụng tải lên album được chia sẻ ảnh của google và nhận thông báo về loại “ảnh đã thêm” trong thanh thông báo.

Dưới đây là các bước:

Bước 1: Cài đặt Linux Motion trên Raspberry

Đặc biệt trong ví dụ này đã được sử dụng chuyển động v4.0.

1.1 Cập nhật số pi

pi @ raspberrypi: ~ $ sudo apt-get cập nhật

pi @ raspberrypi: ~ $ sudo apt-get nâng cấp

1.2 Tải xuống chuyển động

pi @ raspberrypi: ~ $ sudo apt-get install chuyển động

1.3 Bây giờ hãy chỉnh sửa tệp này với các thay đổi sau

pi @ raspberrypi: ~ $ sudo nano /etc/motion/motion.conf

# Bắt đầu ở chế độ daemon (nền) và thiết bị đầu cuối phát hành (mặc định: tắt)

daemon trên

# Sử dụng tệp để lưu thông báo nhật ký, nếu stderr và nhật ký hệ thống chưa được xác định được sử dụng. (mặc định: không được xác định)

logfile /var/log/motion/motion.log

# Chiều rộng hình ảnh (pixel). Phạm vi hợp lệ: Phụ thuộc vào máy ảnh, mặc định: 352

chiều rộng 1920

# Chiều cao hình ảnh (pixel). Phạm vi hợp lệ: Phụ thuộc vào máy ảnh, mặc định: 288

chiều cao 1080

# Số khung hình tối đa được chụp mỗi giây.

tốc độ khung hình 30

# Chỉ định số lượng ảnh được chụp trước (vào bộ đệm) từ trước khi chuyển động

pre_capture 5

# Số khung hình cần chụp sau khi không còn phát hiện chuyển động

post_capture 5

# Xuất ảnh 'bình thường' khi phát hiện chuyển động (mặc định: bật)

output_pictures tắt

# Chất lượng (tính bằng phần trăm) được sử dụng bởi nén jpeg

chất lượng 100

# Sử dụng ffmpeg để mã hóa phim trong thời gian thực

tắt ffmpeg_output_movies

# hoặc phạm vi 1 - 100 trong đó 1 có nghĩa là chất lượng kém nhất và 100 là tốt nhất.

ffmpeg_variable_bitrate 100

# Khi tạo video, các khung hình có nên được sao chép theo thứ tự

ffmpeg_duplicate_frames false

# Bool để bật hoặc tắt extpipe (mặc định: tắt)

use_extpipe đang bật

extpipe ffmpeg -y -f rawvideo -pix_fmt yuv420p -video_size% wx% h -framerate% fps -i pipe: 0 -vcodec libx264 -preset cực nhanh -f mp4% f.mp4

target_dir / var / lib / motion

# Lệnh được thực thi khi tệp phim

; on_movie_end sudo python3 /var/lib/motion/photos.py% f.mp4 &

Bây giờ, hãy để lại phần cuối cùng có dấu chấm phẩy (đã nhận xét) để bỏ ghi chú sau khi đảm bảo rằng quá trình quay và tải lên video hoạt động.

1.4 Sau đó thay đổi

pi @ raspberrypi: ~ $ sudo nano / etc / default / motion

pi @ raspberrypi: ~ $ start_motion_daemon = vâng

Bước 2: Thiết lập API Google Photos cho Python

Thiết lập API Google Photos cho Python
Thiết lập API Google Photos cho Python
Thiết lập API Google Photos cho Python
Thiết lập API Google Photos cho Python

2.1 Khuyến nghị tạo tài khoản mới cho mục đích này để chia sẻ album với tài khoản chính của bạn để nhận thông báo khi tệp mới được thêm vào, cộng thêm dung lượng lưu trữ. Bật API Google Photos cho tài khoản bạn sẽ sử dụng để tải lên.

Bạn sẽ có tệp tin credentials.json sau đó.

2.2 Thiết lập môi trường Python

Về cơ bản, thiết lập môi trường chỉ được yêu cầu trên mâm xôi. Nhưng nó yêu cầu ủy quyền oauth sẽ thuận tiện hơn để thực hiện trên PC. Để thực hiện việc này trên raspberry, bạn cần kết nối màn hình / bàn phím với nó hoặc thiết lập một số giao diện người dùng máy tính từ xa. Tôi vừa cài đặt cùng một môi trường trên mâm xôi và cả PC. Vì vậy, các bước 2.2.1..2.2.3 đã được thực hiện trên PC, 2.2.1, 2.2.2, 2.2.5, 2.2.6 trên Rpi

2.2.1 cài đặt Python 3

2.2.2 Cài đặt các gói api của google theo hướng dẫn sử dụng * (xem 5.1)

Trên PC

cài đặt pip3 - nâng cấp google-api-python-client google-auth-httplib2 google-auth-oauthlib

Trên mâm xôi

pi @ raspberrypi: ~ $ sudo pip3 install - nâng cấp google-api-python-client google-auth-httplib2 google-auth-oauthlib

2.2.3 Kiểm tra việc tải kịch bản lên google photos.. Nó được đặt trên github của tôi. Đặt nó vào cùng một thư mục với credentials.json.

2.2.4 Chụp một số hình ảnh và kiểm tra tải lên

python3 photos.py image.jpg

Cài đặt các phần phụ thuộc bị thiếu nếu có và thử lại. Do đó, bạn sẽ nhận được token.pickle trong thư mục của script và cả một album được chia sẻ mới được tạo trong giao diện web Google Photos của bạn với image.jpg. Khi bạn nhận được token.pickle, bạn không cần phải có credentials.json cho photos.py trong cùng một thư mục nữa.

2.2.5 Chia sẻ album với tài khoản về những gì bạn muốn nhận thông báo trên phương tiện mới được thêm vào. Thêm tài khoản này vào điện thoại của bạn.

2.2.6 Đặt photos.py và token.pickle trong / var / lib / motion trên mâm xôi. Người dùng ‘pi’ không thể ghi vào ‘motion’s dir’s, vì vậy hãy tải lên / home / pi trước

scp photos.py token.pickle pi @ IP: / home / pi

Sau đó đăng nhập vào mâm xôi và di chuyển các tệp dưới sudo

ssh pi @ IP

pi @ raspberrypi: ~ $ sudo mv photos.py token.pickle / var / lib / motion

2.2.7 Kiểm tra cách tải lên hoạt động trên raspberry. Chụp một số hình ảnh bằng fswebcam và cố gắng tải nó lên

pi @ raspberrypi: ~ $ sudo fswebcam /var/lib/motion/image.jpg

pi @ raspberrypi: ~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/image.jpg

Sẽ có image-j.webp

Bước 3: Kiểm tra

3.1 Khởi động dịch vụ Chuyển động

pi @ raspberrypi: ~ $ sudo bắt đầu chuyển động dịch vụ

Bạn có thể thay đổi lệnh thành "dừng" hoặc "khởi động lại"

3.2 Bật nhật ký chuyển động

pi @ raspberrypi: ~ $ tail -f /var/log/motion/motion.log

3.2 Xem đầu ra camera trên một thiết bị khác được kết nối với cùng một mạng cục bộ. Nhập vào trình duyệt:

IP: 8081

3.3 Xem nhật ký chờ cho đến khi phát hiện chuyển động và tệp NAME.mp4 được ghi bằng / var / lib / motion. Sau đó khởi chạy tập lệnh tải lên theo cách thủ công

pi @ raspberrypi: ~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/NAME.mp4

Kiểm tra dấu vết con trăn. Chờ cho đến khi event_end hiển thị trong motion.log. Sau đó, đi tới anbom “helloworld” trong ảnh google của bạn và kiểm tra xem có video nào được tải lên không.

3.4 Nếu tải lên thành công, hãy bỏ ghi chú trong /etc/motion.conf dòng:

pi @ raspberrypi: ~ $ sudo nano /etc/motion.conf

# Lệnh được thực thi khi tệp phim đã sẵn sàng

on_movie_end sudo python3 /var/lib/motion/photos.py% f.mp4 &

pi @ raspberrypi: ~ $ sync

pi @ raspberrypi: ~ $ sudo khởi động lại chuyển động dịch vụ

3.5 Xem nhật ký chuyển động và trong album kiểm tra xem video có tự động tải lên không.

3.6 Tùy chọn chia sẻ album với tài khoản chính của bạn để nhận thông báo khi video hoặc ảnh mới được thêm vào.

Bước 4: Tùy chọn: Định cấu hình quyền truy cập web vào máy ảnh phát trực tuyến thời gian thực

Tùy chọn: Định cấu hình quyền truy cập web vào máy ảnh phát trực tuyến thời gian thực
Tùy chọn: Định cấu hình quyền truy cập web vào máy ảnh phát trực tuyến thời gian thực
Tùy chọn: Định cấu hình quyền truy cập web vào máy ảnh phát trực tuyến thời gian thực
Tùy chọn: Định cấu hình quyền truy cập web vào máy ảnh phát trực tuyến thời gian thực
Tùy chọn: Định cấu hình quyền truy cập web vào máy ảnh phát trực tuyến thời gian thực
Tùy chọn: Định cấu hình quyền truy cập web vào máy ảnh phát trực tuyến thời gian thực

Bước này dựa trên hướng dẫn của Michel’s Parreno. Tôi chỉ chọn FreeDNS thay vì NoIP như được đề xuất ở đây.

4.1 Định cấu hình quyền truy cập được cấp phép vào máy chủ chuyển động phát trực tuyến video:

pi @ raspberrypi: ~ $ sudo nano /etc/motion/motion.conf

# Đặt phương thức xác thực (mặc định: 0)

# 0 = bị vô hiệu hóa

# 1 = Xác thực cơ bản

# 2 = Thông báo MD5 (xác thực an toàn hơn)

stream_auth_method 2

# Xác thực luồng. Tên người dùng cú pháp: mật khẩu

# Mặc định: không được xác định (Đã tắt)

tên người dùng webcontrol_authentication: mật khẩu

# Tốc độ khung hình tối đa cho các luồng luồng (mặc định: 1)

stream_maxrate 30

# Chỉ giới hạn kết nối luồng đối với máy chủ cục bộ (mặc định: bật)

stream_localhost tắt

Nếu bạn không sử dụng giao diện điều khiển web từ mạng bên ngoài, hãy tắt nó đi (theo mặc định)

# Chỉ giới hạn kết nối kiểm soát đối với máy chủ cục bộ (mặc định: bật)

webcontrol_localhost trên

Ngoài ra, vì mâm xôi trực tuyến, tôi khuyên bạn nên thay đổi mật khẩu mâm xôi mặc định

pi @ raspberrypi: ~ $ passwd

Mặc dù cổng ssh 22 không được định tuyến lại cho mâm xôi, vẫn còn.

4.2 Truy cập trang FreeDNS

4.3 Đăng ký

4.4 Thêm miền phụ (Dành cho thành viên -> Miền phụ)

4.5 Chọn máy khách DNS để cài đặt trên Raspberry (Dành cho thành viên -> DNS động -> Tài nguyên DNS Synamic -> Máy khách DNS động)

Tôi đã chọn wget_script update.sh từ Adam Dean (ở cuối trang)

Có các trình giữ chỗ _YOURAPIKEYHERE_ và _YOURDOMAINHERE_. Để nhận được chúng, hãy truy cập (Dành cho thành viên -> DNS động)

Và trên trang bên dưới, bạn sẽ tìm thấy các ví dụ về tập lệnh với APIKEY và DOMAIN của bạn (tập lệnh được thêm vào 4.4). Tôi đã lấy các giá trị này từ Wget Script và thay thế _YOURAPIKEYHERE_ và _YOURDOMAINHERE_ trong update.sh

4.6 Sau đó chạy update.sh trên raspberry. Nó có thể yêu cầu dnsutils cho nslookup. Cài đặt nó sau đó:

pi @ raspberrypi: ~ $ sudo apt-get dnsutils

4.7 Sau đó, định cấu hình bộ định tuyến của bạn để định tuyến lại các yêu cầu của thế giới bên ngoài đến cổng 8081 đến ip của raspberry

4.8 Đặt trước ip cho MAC của mâm xôi của bạn trong cài đặt DHCP để Rpi sẽ luôn có cùng một ip

4.9 Sau đó nhập vào trình duyệt trên thiết bị không được kết nối với mạng cục bộ:

miền của bạn: 8081

Nhập thông tin đăng nhập mà bạn đã xác định trong motion.conf.

Kiểm tra cách hoạt động của video.

4.10 để cập nhật DDNS tự động thiết lập tác vụ cron. Xem quick_cron_example trên (Dành cho thành viên -> DNS động)

Bước 5: Mẹo

5.1 Hãy chú ý cài đặt các gói python trên raspberry. Tôi đã dành một ngày để gỡ lỗi điều này - vấn đề là từ bảng điều khiển, tập lệnh chạy tốt, nhưng được gọi từ lệnh gọi lại sự kiện chuyển động thì không. Điều làm cho nó tồi tệ hơn là dấu vết từ tập lệnh không có sẵn trong trường hợp thứ hai.

Lý do là theo hướng dẫn, tôi đã cài đặt các gói cho người dùng 'pi' (theo mặc định là trong thư mục / home / pi và bị hạn chế đối với những người dùng khác) nhưng để chạy tập lệnh dưới dạng con của dịch vụ 'chuyển động', các gói phải được cũng có sẵn cho người dùng 'chuyển động'. Vì vậy, cuối cùng tôi đã sửa nó bằng cách cài đặt các gói dưới dạng

sudo pip3…

Đây không phải là một cách thích hợp vẫn hoạt động. Cài đặt không có sudo dưới dạng pip3 - hệ thống đã gây ra lỗi cho tôi vì một số lý do.

Tương ứng, script cũng được gọi theo sudo (xem motion.conf).

Trong quá trình khắc phục sự cố này, tôi đã thực hiện rất nhiều thay đổi không cần thiết và không chắc chắn những gì cần thiết và bây giờ quá lười biếng để cuộn chúng trở lại từng bước và xem khi nào nó ngừng hoạt động. Đặc biệt, các quyền của quản trị viên chuyển động được cấp:

pi @ raspberrypi: ~ $ nhóm chuyển động

chuyển động: chuyển động người dùng video âm thanh adm sudo netdev pi

pi @ raspberrypi: ~ $ sudo cat /etc/sudoers.d/010_pi-nopasswd

pi ALL = (TẤT CẢ) NOPASSWD: TẤT CẢ

chuyển động ALL = (TẤT CẢ) NOPASSWD: TẤT CẢ

Cũng thay đổi chủ sở hữu tệp và quyền tương tự như tải lên Google Drive. Có lẽ nó có thể giúp bạn trong trường hợp bạn gặp vấn đề tương tự.

5.2 API Google Photos chỉ cho phép thêm tệp vào album được chia sẻ để bất kỳ ai có liên kết đều có thể truy cập. Không chia sẻ nó theo liên kết và xóa phim cũ hoặc chuyển chúng vào thùng rác hoặc khỏi album. Trong trường hợp sau, chúng vẫn còn trong tài khoản.

5.3 Trợ lý ảnh của Google phát hiện khuôn mặt, khá hữu ích nếu chất lượng máy ảnh tốt. Như một phần thưởng, nó tạo ra loại phương tiện truyền thông ưa thích gồm các tập hợp và gif, v.v.

5.4 Tôi đã cố gắng sử dụng modem USB 4G LTE để truy cập internet và đây là kết quả của tôi.5.4.1 Huawei E3372h-153 hoạt động với raspberry mà không gặp sự cố và phần mềm bổ sung 5.4.2 Cũng được kích hoạt điểm phát sóng để Rasperry chia sẻ kết nối internet thông qua wifi. Có https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ một hướng dẫn rất dễ thực hiện bằng cách sử dụng RaspAP. 5.4.3 DNS động không hoạt động trong mạng 4G của carrie của tôi. Có lời giải thích tại sao

5.5 Sau khi sử dụng hệ thống này trong một vài tuần, mặc dù video thuận tiện hơn để xem và tải lên, Google Photos hoạt động tốt hơn với hình ảnh. Ví dụ: nó chỉ cho phép nhóm các sự vật / khuôn mặt phân tích hình ảnh và chỉ sau đó tìm kiếm khuôn mặt / sự vật từ hình ảnh trong video, chứ không phải ngược lại. Vì vậy, tôi sẽ kiểm tra hình ảnh tải lên thay vì video.

Đề xuất: