جدول المحتويات:

تكامل صور Raspberry Pi Linux Motion في Google: 5 خطوات
تكامل صور Raspberry Pi Linux Motion في Google: 5 خطوات

فيديو: تكامل صور Raspberry Pi Linux Motion في Google: 5 خطوات

فيديو: تكامل صور Raspberry Pi Linux Motion في Google: 5 خطوات
فيديو: Getting Started with Volumio, the Music Server on a Rpi that works with Home Assistant 2024, يوليو
Anonim
Raspberry Pi Linux Motion صور جوجل التكامل
Raspberry Pi Linux Motion صور جوجل التكامل

الفكرة هي تحميل الصور ومقاطع الفيديو التي تم إنشاؤها باستخدام كاميرا تنشيط الحركة متصلة بـ Raspberry Pi لتحميل الملفات إلى السحابة. يدعم برنامج "Motion" التحميل إلى Google Drive من خلال PyDrive. في هذه المقالة ، يتم استخدام "Motion" للتحميل إلى صور Google.

المعدات:

Raspberry Pi 3B +

USB كاميرا ويب لوجيتك C920

لم يتم تحديد اختيار الأجهزة ، لقد أخذت ما كان في متناول اليد.

المتطلبات الأساسية:

لتوفير الراحة ، يجب أن يكون Raspberry pi في شبكتك المحلية - للتحكم فيه بدون شاشة / لوحة مفاتيح وتحميل / تنزيل الملفات. لهذا يجب أن يكون لديك وكيل ssh على جهاز الكمبيوتر الخاص بك (مثل المعجون).

شكراً جزيلاً لـ ssandbac على البرنامج التعليمي الرائع. إذا كنت بحاجة إلى مزيد من المعلومات حول كيفية إعداد البيئة ، فراجع هذه المقالة. لقد استعرت تثبيت الحركة وتكوين خطوات منه وأضفت بعض التغييرات. على وجه الخصوص ، بدلاً من إرسال الملفات والتنبيهات بالبريد الإلكتروني ، يستخدم هذا المثال التحميل إلى صور Google ، الألبوم المشترك والحصول على إشعارات من نوع "الصور المضافة" في شريط التنبيهات.

فيما يلي الخطوات:

الخطوة 1: قم بتثبيت Linux Motion على Raspberry

تم استخدام الحركة v4.0 بشكل خاص في هذا المثال.

1.1 تحديث pi

pi @ raspberrypi: ~ $ sudo apt-get update

pi @ raspberrypi: ~ sudo apt-get Upgrade $

1.2 تنزيل الحركة

pi @ raspberrypi: ~ sudo apt-get install motion

1.3 الآن قم بتحرير هذا الملف بالتغييرات التالية

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

# ابدأ في وضع الخفي (الخلفية) وإطلاق المحطة (الافتراضي: إيقاف التشغيل)

تم تشغيل البرنامج الخفي

# استخدم ملفًا لحفظ رسائل السجلات ، إذا لم يتم تحديد stderr ويتم استخدام سجل النظام. (افتراضي: غير محدد)

logfile /var/log/motion/motion.log

# عرض الصورة (بكسل). النطاق الصالح: يعتمد على الكاميرا ، الافتراضي: 352

العرض 1920

# ارتفاع الصورة (بكسل). النطاق الصالح: يعتمد على الكاميرا ، الافتراضي: 288

ارتفاع 1080

# الحد الأقصى لعدد الإطارات التي سيتم التقاطها في الثانية.

فراميراتي 30

# يحدد عدد الصور الملتقطة مسبقًا (المخزنة مؤقتًا) من قبل الحركة

ما قبل الالتقاط 5

# لم يعد يتم اكتشاف عدد الإطارات المطلوب التقاطها بعد الحركة

بعد التقاط 5

# إخراج الصور "العادية" عند اكتشاف الحركة (افتراضي: تشغيل)

إخراج الصور قبالة

# الجودة (بالنسبة المئوية) التي سيتم استخدامها بواسطة ضغط jpeg

الجودة 100

# استخدم ffmpeg لتشفير الأفلام في الوقت الفعلي

ffmpeg_output_movies قبالة

# أو النطاق من 1 إلى 100 حيث 1 يعني أسوأ جودة و 100 هو الأفضل.

100

# عند إنشاء مقاطع فيديو ، يجب تكرار الإطارات بالترتيب

ffmpeg_duplicate_frames خطأ

# Bool لتمكين أو تعطيل extpipe (الافتراضي: إيقاف)

use_extpipe على

extpipe ffmpeg -y -f rawvideo -pix_fmt yuv420p -video_size٪ wx٪ h -framerate٪ fps -i pipe: 0 -vcodec libx264 -preset ultrafast -f mp4٪ f.mp4

target_dir / var / lib / motion

# أمر ينفذ عندما يكون ملف الفيلم

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

اترك الأخير بفاصلة منقوطة في الوقت الحالي (مُعلق) لإلغاء التعليق بعد التأكد من أن تسجيل الفيديو وتحميله يعمل.

1.4 ثم التغيير

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

pi @ raspberrypi: ~ $ start_motion_daemon = نعم

الخطوة 2: إعداد Google Photos API لـ Python

قم بإعداد Google Photos API لـ Python
قم بإعداد Google Photos API لـ Python
قم بإعداد Google Photos API لـ Python
قم بإعداد Google Photos API لـ Python

2.1 يوصى بإنشاء حساب جديد لهذا الغرض لمشاركة ألبوم مع ألبومك الرئيسي للحصول على إشعارات عند إضافة ملفات جديدة ، بالإضافة إلى مساحة تخزين أكبر. قم بتمكين Google Photos API للحساب الذي ستستخدمه للتحميل.

يجب أن يكون لديك ملف الاعتماد. json بعد ذلك.

2.2 إعداد بيئة بايثون

في الأساس ، إعداد البيئة مطلوب على التوت فقط. ولكنه يتطلب إذن oauth وهو أكثر ملاءمة لإنجازه على جهاز الكمبيوتر. للقيام بذلك على توت العليق ، تحتاج إلى توصيل الشاشة / لوحة المفاتيح بها أو إعداد بعض واجهة مستخدم سطح المكتب البعيد. لقد قمت للتو بتثبيت نفس البيئة على توت العليق وجهاز الكمبيوتر على حد سواء. لذلك تم إجراء الخطوات 2.2.1..2.2.3 على الكمبيوتر الشخصي ، 2.2.1 ، 2.2.2 ، 2.2.5 ، 2.2.6 على Rpi

2.2.1 قم بتثبيت Python 3

2.2.2 تثبيت حزم google api وفقًا للدليل * (انظر 5.1)

على جهاز الكمبيوتر

تثبيت pip3 - ترقية google-api-python-client google-auth-HTplib2 google-auth-oauthlib

على توت العليق

pi @ raspberrypi: ~ sudo pip3 install - ترقية google-api-python-client google-auth-HTplib2 google-auth-oauthlib

2.2.3 تحقق من تحميل البرنامج النصي على صور google.. يتم وضعه على جيثب الخاص بي. ضعه في نفس الدليل باستخدام ملف الاعتماد.

2.2.4 التقط بعض الصور واختبر التحميل

python3 photos.py image.jpg

قم بتثبيت التبعيات المفقودة إذا كانت موجودة وحاول مرة أخرى. نتيجةً لذلك ، يجب أن تحصل على token.pickle في دليل النص البرمجي وأيضًا ألبوم مشترك جديد تم إنشاؤه في واجهة الويب الخاصة بصور Google باستخدام image.jpg. عندما تحصل على token.pickle ، لن تحتاج إلى بيانات اعتماد. json لـ photos.py في نفس الدليل بعد الآن.

2.2.5 شارك الألبوم مع الحساب بشأن ما تريده لتلقي إشعارات بالوسائط الجديدة المضافة. أضف هذا الحساب إلى هاتفك.

2.2.6 ضع photos.py و token.pickle في / var / lib / motion على التوت. لا يستطيع مستخدم "pi" الكتابة إلى "مسار الحركة" لذا قم بالتحميل إلى / home / pi أولاً

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

ثم قم بتسجيل الدخول إلى raspberry وانقل الملفات تحت sudo

ssh pi @ IP

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

2.2.7 تحقق من كيفية عمل التحميل على التوت. التقط بعض الصور باستخدام fswebcam وحاول تحميلها

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

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

يجب أن يكون هناك image-j.webp

الخطوة 3: الاختبار

3.1 خدمة بدء الحركة

pi @ raspberrypi: ~ بدء حركة خدمة sudo $

يمكنك تغيير الأمر إلى "إيقاف" أو "إعادة تشغيل"

3.2 تمكين سجلات الحركة

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

3.2 اعرض إخراج الكاميرا على جهاز آخر متصل بنفس الشبكة المحلية. أدخل في المتصفح:

IP: 8081

3.3 بالنظر إلى السجلات ، انتظر حتى يتم اكتشاف الحركة ويتم كتابة الملف NAME.mp4 في / var / lib / motion. ثم قم بتشغيل تحميل البرنامج النصي يدويًا

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

افحص آثار الثعبان. انتظر حتى يظهر event_end في motion.log. ثم انتقل إلى ألبوم "helloworld" في صور google الخاصة بك وتحقق مما إذا كان هناك مقطع فيديو تم تحميله.

3.4 إذا كان التحميل ناجحًا ، فقم بإلغاء التعليق في /etc/motion.conf السطر:

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

# يتم تنفيذ الأمر عندما يكون ملف الفيلم جاهزًا

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

pi @ raspberrypi: ~ $ sync

pi @ raspberrypi: ~ إعادة تشغيل حركة خدمة sudo $

3.5 بالنظر إلى سجلات الحركة وفي الألبوم ، تحقق مما إذا تم تحميل الفيديو تلقائيًا.

3.6 اختياريًا شارك الألبوم مع حسابك الرئيسي للحصول على إشعار عند إضافة الفيديو أو الصورة الجديدة.

الخطوة 4: اختياري: قم بتهيئة الوصول عبر الويب إلى كاميرا البث المباشر

اختياري: قم بتهيئة الوصول عبر الويب إلى كاميرا البث المباشر
اختياري: قم بتهيئة الوصول عبر الويب إلى كاميرا البث المباشر
اختياري: قم بتهيئة الوصول عبر الويب إلى كاميرا البث المباشر
اختياري: قم بتهيئة الوصول عبر الويب إلى كاميرا البث المباشر
اختياري: قم بتهيئة الوصول عبر الويب إلى كاميرا البث المباشر
اختياري: قم بتهيئة الوصول عبر الويب إلى كاميرا البث المباشر

تستند هذه الخطوة إلى برنامج Parreno التعليمي لميشيل. لقد اخترت للتو FreeDNS بدلاً من NoIP على النحو الموصى به هنا.

4.1 تكوين الوصول المصرح به إلى خادم حركة دفق الفيديو:

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

# تعيين طريقة المصادقة (الافتراضي: 0)

# 0 = معطل

# 1 = المصادقة الأساسية

# 2 = ملخص MD5 (المصادقة الأكثر أمانًا)

طريقة_التدفق 2

# المصادقة للتيار. اسم المستخدم النحوي: كلمة المرور

# الافتراضي: غير محدد (معطل)

اسم مستخدم webcontrol_authentication: كلمة المرور

# الحد الأقصى لمعدل الإطارات لتدفقات الدفق (الافتراضي: 1)

30

# تقييد اتصالات الدفق على المضيف المحلي فقط (افتراضي: تشغيل)

Stream_localhost معطلة

إذا كنت لا تنوي استخدام واجهة التحكم في الويب من الشبكة الخارجية ، فاتركها معطلة (افتراضيًا)

# تقييد اتصالات التحكم على المضيف المحلي فقط (الافتراضي: تشغيل)

webcontrol_localhost قيد التشغيل

أيضًا ، نظرًا لأن raspberry ينتقل عبر الإنترنت ، أوصي بتغيير كلمة مرور التوت الافتراضية

pi @ raspberrypi: ~ $ passwd

على الرغم من عدم إعادة توجيه منفذ ssh 22 إلى التوت ، لا يزال.

4.2 اذهب إلى موقع FreeDNS

4.3 التسجيل

4.4 إضافة مجال فرعي (للأعضاء -> نطاقات فرعية)

4.5 اختر عميل DNS للتثبيت على Raspberry (للأعضاء -> Dynamic DNS -> Synamic DNS Resources -> Dynamic DNS Clients)

لقد اخترت wget_script update.sh من Adam Dean (في أسفل الصفحة)

هناك عناصر نائبة _YOURAPIKEYHERE_ و _YOURDOMAINHERE_. للحصول عليها ، انتقل إلى (للأعضاء -> Dynamic DNS)

وستجد في الصفحة أدناه أمثلة على البرامج النصية باستخدام APIKEY و DOMAIN (الذي تمت إضافته في 4.4). أخذت هذه القيم من Wget Script واستبدلت _YOURAPIKEYHERE_ و _YOURDOMAINHERE_ في update.sh

4.6 ثم قم بتشغيل update.sh على raspberry. قد يتطلب الأمر dnsutils لـ NSLOOKUP. قم بتثبيته بعد ذلك:

pi @ raspberrypi: ~ $ sudo apt-get dnsutils

4.7 ثم قم بتكوين جهاز التوجيه الخاص بك لإعادة توجيه طلبات العالم الخارجية إلى منفذ 8081 إلى عنوان IP الخاص بـ Raspberry

4.8 احتفظ بـ IP الخاص بـ MAC الخاص بـ raspberry في إعداد DHCP حتى يكون لـ Rpi نفس عنوان IP دائمًا

4.9 ثم أدخل المتصفح على جهاز غير متصل بالشبكة المحلية:

مجالك: 8081

أدخل بيانات الاعتماد الخاصة بك التي حددتها في motion.conf.

اختبر طريقة عمل الفيديو.

4.10 لتحديث DDNS تلقائيًا إعداد مهمة cron. راجع quick_cron_example في (للأعضاء -> Dynamic DNS)

الخطوة 5: نصائح

5.1 انتبه عند تثبيت حزم بايثون على توت العليق. لقد أمضيت يومًا في تصحيح هذا الخطأ - كانت المشكلة أنه من وحدة التحكم ، يعمل البرنامج النصي بشكل جيد ، لكن استدعائي من رد اتصال حدث الحركة لم يحدث. ما جعل الأمر أسوأ هو أن الآثار من النص لم تكن متوفرة في الحالة الأخيرة.

كان السبب هو أنه باتباع الدليل قمت بتثبيت الحزم لمستخدم 'pi' (والذي يكون افتراضيًا في الدليل / home / pi ومقيد للمستخدمين الآخرين) ولكن لتشغيل البرنامج النصي باعتباره تابعًا لخدمة 'الحركة' ، يجب أن تكون الحزم متاح لمستخدم "الحركة" كذلك. لذا أخيرًا قمت بإصلاحه بتثبيت الحزم كـ

sudo pip3 …

هذه ليست الطريقة الصحيحة ما زالت تعمل. التثبيت بدون sudo مثل pip3 - كان النظام يعطيني أخطاء لسبب ما.

في المقابل ، يُطلق على النص أيضًا اسم sudo (انظر motion.conf).

خلال عملية استكشاف الأخطاء وإصلاحها هذه ، قمت بالعديد من التغييرات غير الضرورية ولست متأكدًا مما هو ضروري والآن كسول جدًا للتراجع عنها بشكل تدريجي ومعرفة متى تتوقف عن العمل. على وجه الخصوص ، حقوق مسؤول الحركة الممنوحة:

pi @ raspberrypi: ~ حركة المجموعات $

الحركة: مستخدمو الحركة sudo الصوت والفيديو netdev بي

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

pi ALL = (ALL) NOPASSWD: الكل

الحركة ALL = (ALL) NOPASSWD: الكل

تم أيضًا تغيير مالكي الملفات والأذونات المشابهة للتحميل على Google Drive. ربما قد يساعدك في حالة لديك مشكلة مماثلة.

5.2 تتيح Google Photos API إضافة ملفات إلى الألبومات المشتركة فقط حتى يتمكن أي شخص لديه الرابط من الوصول إليها. لا تشاركه عن طريق رابط واحذف الأفلام القديمة أو نقلها إلى سلة المهملات أو من الألبوم. في الحالة الأخيرة يظلون في الحساب.

5.3 يكتشف مساعد صور Google الوجوه ، وهو أمر مفيد جدًا إذا كانت جودة الكاميرا جيدة. كمكافأة ، فإنه يصنع نوعًا من الوسائط الرائعة من التجميعات والصور المتحركة وما إلى ذلك.

5.4 حاولت استخدام مودم 4G LTE USB للوصول إلى الإنترنت وإليكم نتائجي. 5.4.1 يعمل Huawei E3372h-153 مع التوت بدون مشاكل وبرامج إضافية 5.4.2 أيضًا تمكين نقطة الاتصال بحيث تشارك Rasperry اتصال الإنترنت عبر wifi. يوجد https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ دليل سهل حقًا حول كيفية القيام بذلك باستخدام RaspAP. 5.4.3 لم يعمل نظام أسماء النطاقات الديناميكي في شبكة 4G في كاري. هناك تفسير لماذا

5.5 بعد استخدام هذا النظام لمدة أسبوعين ، على الرغم من أن مقاطع الفيديو أكثر ملاءمة للعرض والتحميل ، تعمل صور Google بشكل أفضل مع الصور. على سبيل المثال ، يمكن تجميع الأشياء / الوجوه من تحليل الصور فقط ، وبعد ذلك فقط البحث عن الوجوه / الأشياء من الصور في مقاطع الفيديو ، ولكن ليس العكس. لذلك سأقوم باختبار الصور بتحميل مقاطع الفيديو بدلاً من ذلك.

موصى به: