المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: مشروع مراقبه المكان باستخدام الكاميرا
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى مبرمجي لغة جافا JAVA
Wajdy Essam

السلام عليكم ورحمه الله وبركاته ،

قبل فتره بدأت باستخدام JMF وبدئت في مشروع المراقبه باستخدام الكاميرا وهو مشابه للمشروع الذي قام به أخ فادي عبد القادر في قسم برمجه الشبكات -هنا- مع أني لم أشاهد ذلك البرنامج (لكن نفس الفكره) .

السيناريو بسيط :
Client - Server Model
المعالجه (المراقبه والتحقق) من طرف العميل Heavy Client .
يقوم العميل بارسال العرض مباشره الى الخادم Video Streaming عن طريق برتوكول RTP .
في حال أكتشف العميل بأن هناك أختراق سوف يقوم بارسال تنبيه الى الخادم-والذي بدوره يقوم بتشغيل الأنذار- اضافه الى أن العميل يقوم بحفظ الصور التي تكون في الوضع غير الأمن (في ملف بالقرص سي) .
يوجد ملف Log لدى السيرفر يقوم بحفظ جميع الأوقات التي حصل فيها الأختراق .


أليه العمل :
يقوم العميل بعد الأتصال بالخادم وتشغيل الكاميرا ونقل الـ Video اليه (عن طريق عمل نسخه Clone من المشهد وارسال النسخه) ، في أنتظار العميل بأن يقوم بحفظ الصوره الأمنه حتى يبدأ عمليات المقارنه ، وبعدها عندما يضغط على زر حفظ الصوره الحاليه (ويعتبرها الصوره الأمنه ، ولا يمكن تغييرها الا بعد الخروج من البرنامج) ، هنا يبدأ Timer بأخذ صوره من العرض كل ثانيه ( عمل FrameGrabbingللمشهد ) ويقارنها بالصوره الأمنه ، في حال وجد أختلاف أرسل تنبيه للخادم (ويقوم بتغيير بعض من الـ Label وهي تعتبر كشريط لحاله البرنامج State) وبعدها يستقبل الخادم التنبيه ويغير في شريط الحاله الخاص به أيضا ويقوم بتشغيل الأنذار ... الى أن يرجع الوضع الى حالته الأمنه وهنا سوف يتوقف الأنذار (يمكن للخادم أن يقوم بتشغيله وايقافه بشكل يدوي أيضا) .


خوارزميه مقارنه الصورتين كالتالي :
تنظر الى حجم الصورتين فاذا اختلافا فذلك يدل على أن هناك أختلاف وبالتالي أختراق ..
في حال كان الحجم متساوي ، سوف أقارن كل بسكل في صوره الأولى مع كل بكسل في الأخرى :
و في البرنامج قمت بعمل ثلاث مستويات للحمايه (عالي ، متوسط ، ضعيف) ، وهنا أقصد مستوى سماحيه الأختلاف في عدد البكسلات ، أي في المستوى العالى لن أسمح بأكثر من ثلث (حجم الصوره على 3) أختلاف بين البكسلات في الصورتين ، فاذا كان أكثر فهذا يدل على وجود أختراق ، والا فالحاله أمنه .

أما اذا كانت درجه الحمايه متوسطه أو ضعيفه ، فلن أسمح بأكثر من (حجم الصوره على 4 ) أختلاف بين البكسلات في الصورتين . بالأضافه الى أنه في حاله كان هناك أختلاف بين البكسلين لن أراعى هذا الأختلاف الا اذا أكبر من 5 في المتوسط ، أو أكبر من 10 في المستوى الضعيف ..

ربما تبدوا الخوازميه قبيحه وسيئه للغايه ، لكن هذا الى أستطعت كتابته ! بالأضافه الى أنها تعمل بشكل جيد لدى ، فمستوى الحمايه المتوسط يعمل بشكل جيد جدا ، أما العالي فلا يعمل والسبب أن هناك أختلاف بين كل لقطه وأخرى وحتى إن كانت لنفس المشهد (يرجع السبب لأن الكاميرا التي استخدمتها سيئه جدا ، وسوف تلاحظ ذلك في الصور التاليه ) لذلك في المستوى العالي كل ثانيه سوف يكون هناك أختراق regular_smile.gif ، أما المستوى الضعيف فهو يعمل بشكل جيد ولكن هناك سماحيات أكثر من اللازم .


هذه صور الواجهات في البرنامج :

أولا شغل الملف Server والذي يقوم بتشغيل الملف LoggienScreen وهنا سوف يطلب منك
اسم المستخدم : root ، كلمه المرور : wajdy .



بعدها سوف تظهر شاشه الخادم ان كانت المعلومات صحيحه :



شريط الحاله باللون الأسفل يدل على حاله النظام (أمن ، غير أمن ، غير معروف في حال لم يكن هناك أتصال مع العميل) ، حاله الخادم (يعمل ، لا يعمل في حال لم نضغط على زر بدء عمليه المراقبه حتى يبدأ عمليه الـ Listen لأي كلاينت يريد الأتصال ) ، أسم العميل (غير معروف في حال لم يكن هناك اتصال ، غير ذلك سوف يظهر اسم العميل الذي اتصل هنا ) .


اعدادات الخادم : سوف ندخل أي أسم للمسؤول (مثلا Wajdy) ، ورقم البورت ودائما ما أحب أستخدام البورت 5000 regular_smile.gif ، بالطبع يمكنك أختيار أي بورت بعد 1024 لأنها محجوزه لخدمات النظام .


الأن نشغل ملف العميل والذي مفترض أن يعمل بالطبع في جهاز مختلف متصل مع هذا الجهاز ، لكني جربته على الـ Local Host ، وسأدخل عنوان الخادم الذي أريد الأتصال به ، وأسم العميل ورقم المنفذ ، وبعدها أضغط على أتصال ، وسوف يتصل بالخادم وسيتغير الـ Label هناك باسم المشرف هنا . بعدها نبدأ بالتقاط العرض من الكاميرا بالضغط على بدء المراقبه بالكاميرا (وهنا سوف يتنشط زر "حفظ الصوره" والذي يحدد لى الصوره الأمنه ) :



قمت بمراقبه الهاتف ، لكي أعرف من سوف يتصل بالساعه الفلانيه regular_smile.gif ، الوقت في الصوره 9 صباحا ، المفترض أن أجربه بعد متنصف الليل regular_smile.gif .

الى هنا حاله النظام سواء في الخادم أو العميل غير معروفه لأني لم أحدد الصوره الأمنه :



الأن قمت بضغط زر "حفظ الصوره الحاليه" في العميل ، ومن هنا سوف نبدأ بأخذ لقطه كل ثانيه ومقارنتها بالصوره الأمنه ، وشريط الحاله يدل على حال النظام في اللحظه :





هنا يد أمتدت لكي تمسك سماعه الهاتف ، وتم أكتشاف الأختلاف وتغيرت حاله النظام ، ويشتغل الأنذار في الخادم ، ويقوم الخادم بتسجيل التاريخ والوقت في ملف Log لديه ، ويقوم العميل بحفظ هذه الصوره الغير أمنه في ملف بالسي :



هنا قام أحدهم بالأتصال ، لاحظ أيضا تغير حاله النظام :




يمكن للخادم والعميل أجراء حوار بسيط بينهم Chat ، وستظهر في Text Area في الجهه الأخرى :




ملف اللوق يحتوي على التاريخ والزمن ، وأسم المشرف (العميل) في لحظه الأختراق :




يمكن للعميل تغيير نوع الحمايه (أثناء عمليه المراقبه ) :




كما ذكرت سوف يتم حفظ جميع الصور في السي ، في ملف ينشئه البرنامج باسم NotSecure Picture :





عن البرنامج و المبرمج :






ملاحظات أخيره :

البرنامج لن يعمل على أنظمه Linux ولذلك لأن أسم الكاميرا في تلك الأنظمه يختلف عن ويندوز ، حيث في ويندوز تبدأ هذه الـDevice بالأسم vfw ، ويختلف عن لينوكس على ما أظن ، أيضا لاحظ أني أستخدم Look & Feel الخاص بويندوز وبالتالي سوف يحصل exception في حال لم يجده (لا أدري هل سوف يعمل على لينوكس ؟) . أيضا قمت بحفظ الصور في ملف بالسي ، لذلك يجب التغيير في حال قمت بالعمل على نظام أخر .

أتصال العميل بالخادم يتم عبر البورت التي تحدده في بدايه البرنامج ، أما RTP Stream والتي سيبدأ ارسالها فور أن يبدأ العميل بالضغط على "بدء المراقبه" سيعمل على بورت مختلف وهو البورت الحالي + 2 .

لشرح الكود يحتاج أولا لفهم الـ Architecture الخاص بـ JMF وبعدها الأمر بسيط ، حيث في البرنامج أستخدمنا أربعه أمور في المكتبه :

أولا البحث عن جهاز الكاميرا باستخدام CaptureDeviceManager و CaptureDeviceInfo .

بعدها تشغيل الكاميرا ، ولم أعتمد على الـ Player والسبب أني لا أستطيع عمل Clone له ، وأنا احتاج لـ Clone لكي أرسل النسخه الثانيه لـ Server . لذلك أخترت Processor .

لكي ألتقط صوره Capture من المشهد سوف أستخدم FrameGrabbingControl ويعدها نحصل Buffer أحوله الى VideoFormat وأنشى منه Image وبعدها أحفظها لدي في القرص .

أخيرا أرسال النسخه الجديده بعد عمل Clone للخادم ولذلك باستخدم الـ DataSink .

يمكن أن نضيف خاصيه حفظ للفيديو في البرنامج ، فقط سوف نحتاج الى DataSink موجهه لملف لكي نحفظه هذا اذا كنا في العميل ، أما اذا كنا في الخادم علينا أن نتعامل مع الProcessor وليس Player حتى نكتب الفيديو في ملف AVI مثلا ، لذلك يجب التحويل من Player والتعامل مع Processor .


الملف المرفق Camera Monitor System يحتوي على مجلدين :
Executable File يحتوي على برنامج العميل والخادم بصيغه jar جاهزه للعمل .
Source Code يحتوي على السورس للبرنامج ، يمكنك فتحه بـ Netbeans 5 لأنه مكتوب به ..
ملف gong.au وهو الأنذار ، عليك وضعه في السي قبل بدء العمل بالبرنامج ..


أي سؤال ، أو نقد في الشفره، أو أقتراح يرحب به...

الى اللقاء .
بنت اليمن
السلام عليكم ..

ما شاء تبارك الله ... مجهود احسدك عليه (بالضبط اغبطك عليه regular_smile.gif )

لم اشاهد الكود بعد .. لكني على حسب ما فهمت ...انك تركز المراقبة على مشهد معين (ثابت) ... بعدها تراقب
ذلك الشيء بشكل عادي (فيديو) فإذا حدث اي اختلاف بين المشهد الثابت (الاصل) و ما يبثه الفيديو .. تعلن حالة إختراق
صحيح ؟؟

الفكرة تنفع لحماية خزنة ما ... صحيح ؟

ارجوا لك التوفيق و المزيد من المشاريع الرئعة regular_smile.gif
MKSoft
احلى تحية للمبرمج المحترف وجدي , فعلا برامجك ومشاريعك كتيير كتيير مفيدة . ونرجوا المزيد .
MKSoft
اتمنى اخي وجدي , وبدون ان اثقل عليك , ان تشرح لنا برنامجك من خلا الكود ..
javaRocks&Rolls
سلام

جميل جدا ,,, قد تشجع بعض أعضاء المنتدى لطرح بعض مشاريعهم السابقة.

هل ممكن تزودنا بال resources الي استخدمتها (كتب, مقالات, مشاريع)

شكرا
علاء الصالحي
السلام عليكم
أخ مجدي موضوع جميل جداً
تستحق كل احترام عليه
بالمناسبة عندي اقتراح بسيط أريد أن أطرحه عليك لتقليل نسبة الخطأ
ما رأيك في ان تستخدم median Filter على الصور قبل المقارنة
تستطيع مراجعة مقال كنت كتبته معالجة الصور في جافا

تحياتي
MR C++
اخي اذا ممكن تعطينا مكتبة media
واي مكتبات اخرى مستخدمها ..
علاء الصالحي
المكتبة التي تستخدم في الملتميديا
من شركة صن
اسمها jmf

تحياتي
Wajdy Essam

أشكركم جميعا ،،

بالنسبه للنظام ، فهو فعلا لمراقبه المواقع الثابته مثل الخزنات أو مكاتب مغلقه كما تفضلتي أختي الكريمه ، لكن في حال كانت لديك خزنه مليئه بالنقود $$ فأنا أفضل أن أقوم بمراقبتها شخصيا wink.gif بلا نظامي بلا كلام فاضي laugh.gif


أخي محمد ، لشرح الكود يحتاج أولا لفهم الكلاسات التي تتكون منها JMF ووظيفه كل منها ، لذلك أفضل أن نترك شرح هذا الكود الأن ، ونقوم بشرح البيئه بالكامل (ليست كبيره) ، قد تستغرق 10 دروس على الأكثر ، وبعدها يمكنك القيام بمشروعك الخاص سواء بالتعامل مع الصوت أو الصوره ، وهناك الكثير من الأفكار في المجال ... هكذا سيكون أفضل بكثير من شرح كود لبرنامج واحد .. أتمنى أن تكون فهمت القصد ، والا سأقوم بشرح الكود المره القادمه ...

أخي javaRocks&Rolls بالنسبه الى المصادر ، جيد أنك ذكرتني ، المصدر الأول :
JavaTM Media Framework API Guide

يمكن تحميله من الموقع على شكل PDF ، لكن للدول المسموحه فقط ، لذلك يمكنك تصفحه في الموقع .. الـ Guid لدي على شكل PDF اذا كنت تريده فسأقوم برفعه الى هنا ..

على العموم ، هذا الـGuid يعتبر الخطوه الأولى لك ، خاصه أول فصلين فمن خلاله سوف تتعرف على المصطلحات وبنيه الـ JMF .. الفصول الثلاثه الأخرى تبدأ في العملي ، ولكن تضع كود صغير غير مكتمل يشرح الموضوع المطلوب .. لذلك قد يواجه المبتدئ فيها بعض المشاكل ..

هنا النظر في الأكواد الأخرى ومحاوله تعديلها بالتأكيد سوف يفيد كثيرا جدا :
JMF 2.1.1 Solutions

هناك منتدى sun والخاص بـ JMF ، فيه الكثير أيضا ، لكن الأغلب هو أسئله لا تحتوي على أجابات أو أكواد مكرره .. تقريبا تصفحت المنتدى بالكامل regular_smile.gif ...

هناك موقع باللغه الصينيه ، صراحه لا أتذكره فيه أمثله ممتازه جدا ، ومكتوبه بشكل واضح جدا ، لكني للأسف لا يحضرني أسم الموقع ، سأضيفه المره القادمه باذنه تعالى ...

بالنسبه للكتب ، فلن تجد كتب جيده في الموضوع وذلك لعده أسباب ، أولا المكتبه قديمه جدا وSun غير مهتمه بها ، حيث أخر تحديث بها كان في 1999 ، وقامت Sun بازاله جزء من الكود والخاص بتشغيل ملفات Mp3 ، وحاليا لكي تشغل هذا النوع من الملفات تحتاج الى Plug-in للمكتبه ..

أمر أخر ، المكتبه تتعرف على أمتدادات معينه للصوت والفيديو ، وهناك أمتدادت كثيره شهيره لا تدعمها هذه المكتبه ..

ومع صدور مكتبات منافسه (أقوي بكثير من JMF ) مثل Quicktime ، تقريبا تدعم أغلب الأمتدادت ، وكل أمكانيات JMF تستطيع عملها بهذه المكتبه وأكثر أيضا ... حيث تستطيع بكل بساطه التعديل في ملفات الصوت والفيديو وعمل معالجه بسهوله ... في JMF نستطيع عمل Processing للـ Media لكن الأمر ليس بتلك السهوله !

المهم ، هناك كتابان يحتويان على فصل يتكلم عن المكتبه ، الكتب جيده وليست قديمه ..

الكتاب الأول :
Programming Cameras and Pan-Tilts: with DirectX and Java



الكتاب يتحدث عن برمجه الكاميرا ، بـ Visual C++ ، وفيه تطبيقات ممتازه جيده طبقت بهذه اللغه ، وهناك فصل يتحدث عن برمجه الكاميرا بـ JMF فيه ثلاثه أمثله ... أظن واحد لتشغيل ملفات فيديو ، والأخر لعمل معالجه لصوره الملتقطه ، والأخر لا أذكره حاليا ...


الكتاب الثاني :
WAP, Bluetooth, and 3G Programming: Cracking the Code



هذه السلسله ممتازه للغايه -المؤلفين مبرمجين من الهند - ، هناك فصل (العاشر على ما أظن) يتحدث عن JMF ، وفيه ثلاثه تطبيقات متكامله ، فيهم واحد voice Mail ، ولا أذكر الحاليين .... الكتاب جيد أيضا ، لكن جميع الفصول غير متعلقه بجافا الا هذا الفصل ...

الكتب تستطيع شرائها من أمازن regular_smile.gif .. أو تحملها من مواقع الكتب ، على ما أظن أني حملتها من pdfchm وحاليا دورت عليها هناك ولم أجدها sad.gif ..

لذلك يمكنني أن أرفعها لك أن أردت ذلك ...


أخي باشمهندس علاء ، فعلا كان يجب أن أستخدم JAI من البدايه لكني كسلت regular_smile.gif ، على العموم سأحاول مجددا أن أردت أن أقوم بالتطوير فيه .. شكرا للرابط (مدونتك ممتازه جدا) ...

بالتوفيق ،
MR C++
اخي الكريم حاولت كثيرا تنزيل حزمة jmf ولكن انا من سورية لذلك لايمكنني ان احمل اي شيء من موقع sun
فاذا ممكن اخي اي رابط لتحميل هذه الحزمة و documentaion بصيغة pdf
واكون لك من الشاكرين
MKSoft
السلام عليكم اخي وجدي
اترك لك كامل الحرية في شرح هذا النوع من المكتبات.
و ارجو منك ارفاتق الكتابين لوسمحت..
hamzalion
شكرا أخ wijdy Essam على هذا المشروع الرائع

بس ممكن تحمل المراجع على الموقع وضفنا ملفات السورس كود ذو الاحقة java وشوية شرح على الكود
javaRocks&Rolls
سلام

هذا هو ال
Java Media Framework API Guide
إضغط لإظهار المرفق

بس ما قدرتش ارفع javadoc تبع ال api لان حجمها اكبر من المسموح



في كتب بخصوص ال JMF بس ما حصلتهمش إذا اي حد عنده هذه الكتب قد تكون مفيده وهي:

Core Java Media Framework
Developing Multimedia Applications with the Java Media Framework
Programming with the Java Media Framework
Essential jmf: Java Media Framework



بنت اليمن
مشكور javaRocks&Rolls regular_smile.gif

كمان هذه الرابط ممكن ساعد :

http://www.ee.iitm.ac.in/~tgvenky/JMFBook/

MR C++
اخواني ارجو ارفاق حزمة jmf
لانني الى الان لم استطع تحميلها تقول العالم مقاطعنا وماحدا رضيان انو يعطينااياها كلما فتت على موقع بقلي انو الايب تبعي سوري محجوب عن خدمات التحميل
لهيك ارجوكم رفعل الحزمة واذا كان حجمها كبيرا ارفعوها الى اي موقع لرفع الملفات
javaRocks&Rolls
سلام

الاخ (MR C++) ممكن تنزل ال jmf من هذا اللينك
http://www.esnips.com/doc/c7aea0b5-1e9a-41...1e-windows-i586

وشكرا على اللينك يا بنت اليمن
MR C++
مشكور اخي على اللينك الف شكر
اخي ممكن تعطينا رابط ولو تقلنا عليك javadoc تبع الحزمة
javaRocks&Rolls
سلام

هذا هو javadoc تبع ال jmf api

إضغط لإظهار المرفق

MR C++
الف شكر javaRocks&Rolls
shado
015.gif

لكن هناك شي لم اقتنع به ...وخصوصا اني اقود معارك مع الهارد وير ولاول مرا في الكومبيوتر واترك السوفت وير لفترا

قد كتبت من فترا مقالة عن jini والتي استخدمتها في مشروع ما زلت قائم على عمله في تقديم خدمات اجهزة على طرفيات من كمرات وطابعات وغيرها ... بشكل server و clinet

اضطريت لاستخدام كمرات ذات interface card لكي استطيع ان اتحدكم بالــIP والــMAC Address والـport

وكانت عملية التعاملة سلسة نوعا ما في الاوامر والطلبات ... على ما يبدو انت لم تعمل هذا الشي او انك عملته ولم تذكر

فقط سؤالي اذا كانت كمرتك التي استخدمتها هي من انواع الكمرات ويب ام ماذا وكيف كانت برمجتها ام كمرات من نوع كروت TV ام ماذا

الله معك.
Wajdy Essam

الكاميرا هي كاميرا ويب عاديه ،

وباستخدام الدوال الموجوده في JMF تستطيع تشغيل الكام وأخذ وصوره منها وكذلك ارسال العرض لو أدرت ذلك ...

بالنسبه للكتب سأضيفها عندما يتوفر لدى خط سريع sad.gif
hamzalion
السلام عليكم ورحمة الله وبركاته
كل عام وجميع الامة الاسلامية بألف خير وبارك اللهم لكم في رمضان
اذا ممكن رفع مكتبة jmf على المنتدى لانو موقع sun محجوب عندنا
وبحثت في النت ولكن دون جدوى
M.Allaw
بصراحه أقف أحتراماً لك أخي وجدي على هذا الإنجاز الأكثر من رائع

بس ممكن تعطينا كود بسيط عن التعامل مع الصور ومقارنة البكسلات؟
Wajdy Essam

هناك طرق كثيره وفي حزم خاصه ، أنظر للحزمه اللى موجوده في موقع علاء ،

الطريقه التي استخدمتها هي مقارنه بكسل بكسل ، وهي طبعا غير جيده ، لأنه أي اختلاف في جوده البكسل سوف ثؤثر في النتيجه .. لذلك قمت بعمل متغير من عدد ما (لنقل 50) في كل اختلاف بين البكسلين سأسمح به الى وأنقص من المتغير الى ان يصبح صفر وبالتالى خلاص regular_smile.gif ، أي سماح بدرجه معينه .. طبعا هذا الكلام للصور الملتقطه من كاميرا غير جيده ، لو كانت جيده كل شيء بيعمل 100% ..

على العموم الكود موجود ، أطلع عليه وفيه كود المقارنه ، أيضا الكتاب :
Java Image Processing Cookbook

وهو كتاب يستخدم الحزمه Java Advanced Imaging (JAI) API وطبعا الحزمه ممتازه وتسهل الكثير .وأفضل من الطرق اليدويه ..

بالتوفيق regular_smile.gif ..
M.Allaw
كتاب روووووووووعه مشكور جداً حبيب قلبي
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2008 Invision Power Services, Inc.