في الآونة الأخيرة ، ظهرت مهمة يوميًا لتشكيل فاصل زمني مع زوج من كاميرات المراقبة المتصلة بـ IPEYE. إذا كنت مهتمًا بكيفية تعامل هذا الشخص مع الحد الأدنى من المعرفة بيثون ، أو إذا كنت تريد الإشارة إلى أخطائي ، فمرحباً بك في ...
مقدمة
قرر والدي التحرك وبناء منزل في منطقة أخرى. طلب مني المساعدة في المراقبة بالفيديو. إدخال البيانات:
- لا يوجد غرفة فنية.
- يمكن سرقة المعدات.
- بحاجة الى صورة عالية الجودة.
- يجب أن تكون الكاميرات في الهواء الطلق.
- كل ما تحتاجه هو 2 الكاميرات.
- اريد حقا كاميرات PTZ مع التكبير.
- أريد تطبيق جوال
بعد النظر في الأسعار في المتاجر للمعدات ذات العلامات التجارية ، تقرر شراء كاميرات PoE بدون اسم مع كل الكعك على علي. كانت الكاميرات رخيصة بما فيه الكفاية - حوالي 5 آلاف لكل منهما.
لم أكن أريد وضع DVR في موقع البناء ، لذلك تقرر استخدام حل سحابة. بعد وصول الكاميرات ، حاولت تكوين صداقات مع خدمات مختلفة بحيث يعمل كل شيء ، بما في ذلك PTZ. من بين جميع الخدمات التي جربتها ، تحولت إلى أصدقاء للكاميرات الصينية فقط باستخدام IPEYE.
هذا سينهي المقدمة. أعتقد أنه سيكون من الواضح الآن للجميع لماذا ستكون المحادثة حول هذه الخدمة.
تجربة مع IPEYE
الخدمة كخدمة. كل ما وعد به هو الوفاء. الدعم الفني يجيب على الأسئلة. النقطة الأساسية هي أنه يمكنك تحديد رابط لدفق rstp ، وتحريف إعدادات PTZ وسوف يعمل كل شيء. يعمل تطبيق أندرويد للجوال. من الممكن إنشاء مستخدمين ضيفين لكاميراتهم ومنح حقوق الوصول لكل قريب. تكون واجهة الويب في Vivaldi أحيانًا عربات التي تجرها الدواب ؛ وفي Chrome ، تكون هذه الثغرات أقل شيوعًا. قليلا مملة تصفح الأرشيف.
يمكن تنزيل الأرشيف من الكاميرا ، ولكن لمدة تصل إلى 3 ساعات. الإجراء هو مضيعة للوقت للغاية.
يبدو أن كل شيء على ما يرام ، لكنك تشعر بروحك أن هناك شيئًا غير صحيح. وليس هناك ما يكفي من عمق الأرشيف. يمكنك زيادة العمق ، ولكن الخيار الأكثر تكلفة - 12 شهرا سيكلف 25 ألف روبل في السنة لكاميرا واحدة (عند التسجيل بالكشف).
دعنا نأتي بشيء؟
هذا هو السؤال الذي سألني والدي. أراد والدي التقاط جميع مراحل البناء.
ما هي الخيارات لحل هذه المشكلة؟ يمكنك الانتقال إلى واجهة الويب يوميًا وتصدير العديد من مقاطع الفيديو من كل كاميرا. من سيؤدي هذه المهمة الكئيبة؟ لا احد! عدة مرات في اليوم لفتح كاميرات البث والتقاط لقطات الشاشة؟ حسنا ، أيضا الجنون. زيادة عمق الأرشيف إلى 1 سنة؟ حسنا ، حل رخيص جدا. أخبرني Google أن وظيفة TimeLapse مضمنة بالفعل في هذه الخدمة ، لكن الدقة منخفضة ولا يمكنك تنزيلها للأرشيف في المستقبل :(
محدث: يمكن تحميل timelapse الأصلي. للقيام بذلك ، افتح الفاصل الزمني في واجهة الويب. باستخدام أدوات المطور ، تفقد صفحة الويب وابحث عن رابط لملفنا. تنسيق الرابط:
sr
تقرر كتابة شيء لحفظ لقطات من الكاميرا بطريقة ما وتشكيل الفيديو النهائي.
تنصل
مؤلف هذا التأليف ليس مبرمجًا ولا يسعى إلى أن يصبح واحدًا. OOP يعرف الأساسيات بشكل سطحي. رشيقة ، الخ لم تدرس. وقبل شهر ، شاهد دورة فيديو قصيرة عن الثعبان وقرر استخدامها لحل المشكلة الحالية.
API
كان من الجيد جدًا أن تجد أن خدمة IPEYE هي
واجهة برمجة تطبيقات متوفرة للجمهور. توفر API أمثلة لـ PHP فقط ، لكنها أثبتت فائدتها.
بناءً على حقيقة أن جهاز الكمبيوتر الخاص بي لا يتم إيقافه مطلقًا ، تم تطوير المفهوم التالي:
- يقوم برنامج جدولة Windows بتشغيل برنامج نصي كل 30 دقيقة.
- يحدد البرنامج النصي من خلال واجهة برمجة التطبيقات (API) معرف المستخدم الخاص بالكاميرات.
- يستقبل البرنامج النصي من خلال API الصورة من الكاميرات ويحفظها في دليل.
- يقوم البرنامج النصي مرة واحدة يوميًا بإنشاء ملف فيديو لكل كاميرا.
- يرتبط الكتالوج الذي يحتوي على صور المصدر ومقاطع الفيديو النهائية بالسحابة ومشاركتها.
- الأقارب عندما يريدون مشاهدة الفاصل الزمني والعمل على الملفات كما يريدون.
للعمل مع واجهة برمجة التطبيقات ، كتبت وظيفتين: تسجيل الطلبات وتنفيذها على خادم واجهة برمجة التطبيقات.
writeLog ()def writeLog(logdata): if LogEnable == 1: log_time = datetime.now() log_time = log_time.isoformat(timespec='seconds') log_file = open(log_file_path, "a+") log_file.write(log_time + ": " + str(logdata) + "\n") log_file.close else: return True
getApiResponse () def getApiResponse(method, api_uri): if method == "GET": try: r = requests.get(api_url + api_uri, timeout = api_timeout) r.raise_for_status()
وفقًا لواجهة برمجة التطبيقات ، لدينا القدرة على الوصول إلى / devices / all والحصول على معلومات حول جميع المواضيع. كنت مرتبكًا على الفور من أن الترخيص غير مطلوب ، إذا كنت تعتقد أن وثائق واجهة برمجة التطبيقات ... عندما طلبت / الأجهزة / الكل ، حصلت على خطأ:
خطأ فادح: خطأ عميل 401: غير مصرح به ل url: api.ipeye.ru : 8111 / devices / all
لقد قمت بتعديل وظيفة getApiResponse الخاصة بي لإرسال بيانات الاعتماد الخاصة بي ، لكني حصلت أيضًا على خطأ 401. لا أدرج الوظيفة لأن لم تكن مفيدة في المستقبل.
اضطررت إلى الاتصال بالدعم الفني حول هذا الموضوع. أوضح فريق الدعم أنه من أجل استخدام واجهة برمجة التطبيقات (API) بترخيص ، يجب أولاً إبرام اتفاقية مع IPEYE وتكوين خادم الويب الخاص بك. ما نوع خادم الويب ولماذا لم يشرحوا لي ، ولكن في الوقت نفسه ، أعطوا تلميحًا أين يمكن الحصول على كاميرات مبتكرة والوصول إلى واجهة برمجة التطبيقات دون إذن.
المراسلات مع الدعمأنا: مساء الخير. هل من الممكن استخدام API؟ لم أجد كاميرات uuid في واجهة الويب. كنت أرغب في الحصول على قائمة بكاميراتي عندما سألت api.ipeye.ru : 8111 / devices / all ، لكن رابط اسم المستخدم / كلمة المرور الخاص بي لم ينجح.
IPEYE: كدخول / كلمة مرور ، يتم استخدام بيانات التفويض لمستخدم واجهة برمجة التطبيقات ، نحن نوفر الوصول على أساس تعاقدي.
وفقًا لذلك ، قائمة الكاميرات التي لن تراها لتسجيل الدخول الخاص بك ، ولكن لجميع كاميرات API المستخدم.
أنا: كم يكلف الوصول إلى واجهة برمجة التطبيقات (API) لكامرين؟
IPEYE: كل شيء أكثر تعقيدًا هناك ، ستحتاج إلى تشغيل موقعك واستخدام API الخاص بنا لإضافة كاميرات إليه ومواصلة العمل معهم.
هل يستحق الأمر القيام به من أجل 2 الكاميرات؟
أنا: بشكل عام ، من أجل الفهم ، أحتاج إلى الوصول إلى واجهة برمجة التطبيقات فقط لتنزيل لقطات الشاشة تلقائيًا من الكاميرات. لمزيد من تشكيل الفاصل الزمني.
IPEYE: وماذا api.ipeye.ru/doc#AppDeviceJPEGOnline لا يناسب في هذه الحالة؟
أنا: وأين يمكنني العثور على UUIDs من الكاميرات الخاصة بي؟
IPEYE: من شريط عنوان المتصفح ، على سبيل المثال. يظهر UUID نفسه في "رمز الموقع" كمعلمة devcode.
ماذا لدينا في بقايا الجافة؟ في الواقع ، يمكن العثور على كاميرات uuid في حسابك ، إذا نظرت إلى معلمات GET. هناك طريقة / جهاز / jpeg / عبر الإنترنت /: uuid /: اسم لالتقاط لقطة شاشة ، يوجد مستخدم ، وقد عرفنا بالفعل اسم الكاميرا.
أقوم بإنشاء وظيفة لحفظ الصور من دفق.
saveJpegFromStream () def saveJpegFromStream(uuid, name):
لقد قدمت طلبًا وأدركت أن شيئًا ما غير صحيح ... تلقينا الملف. الصورة من الكاميرا ، لكن الحجم صغير بشكل مثير للريبة - 66 كيلو بايت. أنا أنظر إلى الخصائص وأفهم أن 608 * 342 ليس بأي حال 1920 * 1080. عندما أطلب / device / thumb / online / uuid / 1920 / name ، أحصل على الملف 1920 * 1080 ، لكن هذا هو الملف السابق 608 * 342 الممتد إلى النطاق المطلوب. بالطبع ، هذا الوضع لم يناسبني.
أيضًا خلال التجارب ، اكتشف أن معلمة الاسم لم يتم التحقق منها أو استخدامها بأي طريقة. يمكنك إرسال ما تريد.
بعد ذلك ، خلصت إلى أن الأمر / device / url / rtsp / الأكثر فائدة هو الحصول على رابط إلى دفق RTSP. اضطررت إلى اللجوء إلى Google ، لأن لم يكن هناك فهم كيفية العمل مع RTSP.
getStreamRTSP () def getStreamRTSP(uuid, name): api_uri = "/device/url/rtsp/" + uuid writeLog("Trying get stream RTSP link for " + name + " " + uuid) response = json.loads(getApiResponse("GET", api_uri).text) writeLog("Stream RTSP link for " + name + ": " + str(response["message"])) return str(response["message"])
saveJpegFromRTSP def saveJpegFromRTSP(name, rtspLink): writeLog("Trying save RTSP screenshot for camera: " + name) rtspClient = cv2.VideoCapture(rtspLink) if rtspClient.isOpened(): _,frame = rtspClient.read() rtspClient.release()
بعد أن كتبت عدة وظائف أعلاه ، أدركنا أنه لم تكن هناك حاجة لاستخدام واجهة برمجة التطبيقات (API) على الإطلاق للمهمة الأولية :) لدي رابط مباشر إلى دفق rtsp للكاميرا ، وباستخدام الوظيفة الأخيرة يمكنني التقاط الصورة من الكاميرا. لكنني لم أبدأ في تغيير المفهوم في هذه الخطوة.
عند العمل من خلال واجهة برمجة التطبيقات ، هناك ميزتان: خادم IPEYE يهيئ البث بشكل أسرع بكثير من الكاميرا ، ويمكن إغلاق تدفق كاميرا rtsp بواسطة جدار الحماية.
jpg2mp4
الخطوة الأخيرة هي إضافة جميع صور كاميرا واحدة إلى الفيديو. اخترت الترميز mp4v ، لأنه تتيح لك MEGA تشغيل ملفات الفيديو هذه في واجهة ويب.
makeVideoFile () def makeVideoFile(name): height = 1080 width = 1920
كمرجع: تشغل ملفات 45 jpg بإجمالي حجم 37.3 ميغابايت بتنسيق فيديو 16.9 ميغابايت.
شكرا لقراءة مقالتي العامة الأولى. حاولت أن أصف كل شيء في شكل القصة ، وليس بسيطًا ، لأنني لم أرغب في الحصول على مقالة جافة في طريقي للخروج.
سأكون سعيدًا بالتعليقات ، لأنني قابلت الثعبان منذ أقل من شهر.
يمكن العثور على النص الكامل مع التعليقات الموسعة على
جيثب . أيضًا ، يأخذ البرنامج النصي في الاعتبار الفرق في المناطق الزمنية ، وتتم كتابة جميع الوظائف المتبقية لتوسيع نطاقها إلى عدد مختلف من الكاميرات بسرعة.