الخميس، 28 يناير 2021

كود برنامج تطبيق دردشة جماعية في Java

 

تطبيق دردشة جماعية في Java

في هذا المنشور ، تمت مناقشة تطبيق دردشة جماعية يستخدم فئة MulticastSocket (Java Platform SE 7). MulticastSocket هو (UDP) DatagramSocket ، مع إمكانات إضافية للانضمام إلى "مجموعات" من مضيفي البث المتعدد الآخرين على الإنترنت.

التنفيذ

import java.net.*;

import java.io.*;

import java.util.*;

public class GroupChat

{

    private static final String TERMINATE = "Exit";

    static String name;

    static volatile boolean finished = false;

    public static void main(String[] args)

    {

        if (args.length != 2)

            System.out.println("Two arguments required: <multicast-host> <port-number>");

        else

        {

            try

            {

                InetAddress group = InetAddress.getByName(args[0]);

                int port = Integer.parseInt(args[1]);

                Scanner sc = new Scanner(System.in);

                System.out.print("Enter your name: ");

                name = sc.nextLine();

                MulticastSocket socket = new MulticastSocket(port);

              

                // Since we are deploying

                socket.setTimeToLive(0);

                //this on localhost only (For a subnet set it as 1)

                  

                socket.joinGroup(group);

                Thread t = new Thread(new

                ReadThread(socket,group,port));

              

                // Spawn a thread for reading messages

                t.start(); 

                  

                // sent to the current group

                System.out.println("Start typing messages...\n");

                while(true)

                {

                    String message;

                    message = sc.nextLine();

                    if(message.equalsIgnoreCase(GroupChat.TERMINATE))

                    {

                        finished = true;

                        socket.leaveGroup(group);

                        socket.close();

                        break;

                    }

                    message = name + ": " + message;

                    byte[] buffer = message.getBytes();

                    DatagramPacket datagram = new

                    DatagramPacket(buffer,buffer.length,group,port);

                    socket.send(datagram);

                }

            }

            catch(SocketException se)

            {

                System.out.println("Error creating socket");

                se.printStackTrace();

            }

            catch(IOException ie)

            {

                System.out.println("Error reading/writing from/to socket");

                ie.printStackTrace();

            }

        }

    }

}

class ReadThread implements Runnable

{

    private MulticastSocket socket;

    private InetAddress group;

    private int port;

    private static final int MAX_LEN = 1000;

    ReadThread(MulticastSocket socket,InetAddress group,int port)

    {

        this.socket = socket;

        this.group = group;

        this.port = port;

    }

      

    @Override

    public void run()

    {

        while(!GroupChat.finished)

        {

                byte[] buffer = new byte[ReadThread.MAX_LEN];

                DatagramPacket datagram = new

                DatagramPacket(buffer,buffer.length,group,port);

                String message;

            try

            {

                socket.receive(datagram);

                message = new

                String(buffer,0,datagram.getLength(),"UTF-8");

                if(!message.startsWith(GroupChat.name))

                    System.out.println(message);

            }

            catch(IOException e)

            {

                System.out.println("Socket closed!");

            }

        }

    }

}

 

احفظ الملف باسم GroupChat.java وقم بترجمته باستخدام javac ثم قم بتشغيل البرنامج باستخدام وسيطتي سطر أوامر كما هو محدد. يتم تحديد مضيف البث المتعدد بواسطة عنوان IP من الفئة D ورقم منفذ UDP قياسي. تقع عناوين IP للفئة D في النطاق من 224.0.0.0 إلى 239.255.255.255 ، ضمناً. العنوان 224.0.0.0 محجوز ويجب عدم استخدامه.

فيما يلي نموذج لإخراج البرنامج أعلاه:

 

code java

code java

code java

لقد استخدمنا عنوان IP لمضيف الإرسال المتعدد كـ 239.0.0.0 ورقم المنفذ كـ 1234 (نظرًا لأن أرقام المنافذ من 0 إلى 1023 محجوزة). هناك 3 أعضاء في المجموعة: الرجل الحديدي ، CaptainAmerica ، و Groot. ابدأ تشغيل جميع المحطات الثلاثة أولاً قبل إرسال الرسالة ، وإلا فستفقد الرسائل التي يتم إرسالها قبل بدء تشغيل الجهاز الطرفي (نظرًا لعدم وجود وسيلة تخزين مؤقت مدمجة لتخزين الرسائل). أحدهما لقبول إدخال المستخدم (باستخدام فئة java.util.Scanner) والآخر لقراءة الرسائل المرسلة من عملاء آخرين. ومن ثم قمت بفصل الخيط الذي يقوم بعمل القراءة في ReadThreadclass. لمغادرة المجموعة ، يمكن لأي مستخدم كتابة خروج لإنهاء الجلسة.

 

يتم تنفيذ البرنامج أعلاه على جهاز واحد. برمجة المقبس مخصصة للبرمجة الموزعة. يمكن أن يفي نفس الجزء من مقتطف الشفرة عند وجوده على أجهزة مختلفة مثبت عليها Java بهذا المطلب. هذا مجرد منطق خدمة العظام المجردة. سيكون المشروع أكثر روعة إذا تم تطوير الواجهة الأمامية. يمكنك استخدام Java's AWT (مجموعة أدوات النافذة المجردة) أو نظيرتها المتقدمة ، Java Swing لتطوير الواجهة الأمامية. نظرًا لأن هذا لن يكون جزءًا من برمجة Socket ، فأنا أتركه كما هو دون الخوض في التفاصيل.

 

يمكنك دمج ميزة أمان الشبكة عن طريق إجراء التشفير قبل إرسال الرسالة عبر الشبكة.

يمكن استخدام التقنيات البدائية مثل تشفير قيصر أو الطرق المتقدمة مثل RSA لأداء فك التشفير. يمكنك محاولة استخدام Java's RMI (استدعاء الطريقة عن بُعد) لأداء نفس المهمة.

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

 

الأربعاء، 27 يناير 2021

كود برنامج OpenCV لاكتشاف الوجه ( لغة C ++ )

برنامج OpenCV لاكتشاف الوجه ( لغة C ++ )

برنامج OpenCV لاكتشاف الوجه ( لغة C ++ )


 يستخدم هذا البرنامج مكتبة Opencv لإكتشاف الوجوه في بث مباشر من كاميرا الويب أو في ملف فيديو مخزن في الجهاز المحلي. يكتشف هذا البرنامج الوجوه في الوقت الحقيقي ويتتبعها. يستخدم مصنفات XML سابقة التدريب لنفسه. المصنفات المستخدمة في هذا البرنامج لها ملامح وجه مدربة عليها. يمكن استخدام المصنفات المختلفة لاكتشاف الكائنات المختلفة. متطلبات تشغيل البرنامج:

1) يجب تثبيت OpenCV على الجهاز المحلي.

 2) يجب إعطاء مسارات لملفات XML المصنف قبل تنفيذ البرنامج. يمكن العثور على ملفات XML هذه في دليل OpenCV “opencv / data / haarcascades”.

 3) استخدم 0 في capture.open (0) لتشغيل تغذية كاميرا الويب.

 4) من أجل الكشف في فيديو محلي ، وفر المسار إلى الفيديو. (capture.open (“path_to_video”)).

 

التنفيذ:

مرشح

تعديل

play_arrow

سطوع_4

// برنامج CPP لاكتشاف الوجه في الفيديو

// تضمين ملفات الرأس المطلوبة من دليل OpenCV

الكود The Code

#include "/usr/local/include/opencv2/objdetect.hpp"

#include "/usr/local/include/opencv2/highgui.hpp"

#include "/usr/local/include/opencv2/imgproc.hpp"

#include <iostream>

  

using namespace std;

using namespace cv;

  

// Function for Face Detection

void detectAndDraw( Mat& img, CascadeClassifier& cascade, 

                CascadeClassifier& nestedCascade, double scale );

string cascadeName, nestedCascadeName;

  

int main( int argc, const char** argv )

{

    // VideoCapture class for playing video for which faces to be detected

    VideoCapture capture; 

    Mat frame, image;

  


    // PreDefined trained XML classifiers with facial features

    CascadeClassifier cascade, nestedCascade; 

    double scale=1;

  

    // Load classifiers from "opencv/data/haarcascades" directory 

    nestedCascade.load( "../../haarcascade_eye_tree_eyeglasses.xml" ) ;

  

    // Change path before execution 

    cascade.load( "../../haarcascade_frontalcatface.xml" ) ; 

  

    // Start Video..1) 0 for WebCam 2) "Path to Video" for a Local Video

    capture.open(0); 

    if( capture.isOpened() )

    {

        // Capture frames from video and detect faces

        cout << "Face Detection Started...." << endl;

        while(1)

        {

            capture >> frame;

            if( frame.empty() )

                break;

            Mat frame1 = frame.clone();

            detectAndDraw( frame1, cascade, nestedCascade, scale ); 

            char c = (char)waitKey(10);

       

   

            // Press q to exit from window

            if( c == 27 || c == 'q' || c == 'Q'

                break;

        }

    }

    else

        cout<<"Could not Open Camera";

    return 0;

}

  

void detectAndDraw( Mat& img, CascadeClassifier& cascade,

                    CascadeClassifier& nestedCascade,

                    double scale)

{

    vector<Rect> faces, faces2;

    Mat gray, smallImg;

  

    cvtColor( img, gray, COLOR_BGR2GRAY ); // Convert to Gray Scale

    double fx = 1 / scale;

  

    // Resize the Grayscale Image 

    resize( gray, smallImg, Size(), fx, fx, INTER_LINEAR ); 

    equalizeHist( smallImg, smallImg );

  

    // Detect faces of different sizes using cascade classifier 

    cascade.detectMultiScale( smallImg, faces, 1.1, 

                            2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );

  


    // Draw circles around the faces

    for ( size_t i = 0; i < faces.size(); i++ )

    {

        Rect r = faces[i];

        Mat smallImgROI;

        vector<Rect> nestedObjects;

        Point center;

        Scalar color = Scalar(255, 0, 0); // Color for Drawing tool

        int radius;

  

        double aspect_ratio = (double)r.width/r.height;

        if( 0.75 < aspect_ratio && aspect_ratio < 1.3 )

        {

            center.x = cvRound((r.x + r.width*0.5)*scale);

            center.y = cvRound((r.y + r.height*0.5)*scale);

            radius = cvRound((r.width + r.height)*0.25*scale);

            circle( img, center, radius, color, 3, 8, 0 );

        }

        else

            rectangle( img, cvPoint(cvRound(r.x*scale), cvRound(r.y*scale)),

                    cvPoint(cvRound((r.x + r.width-1)*scale), 

                    cvRound((r.y + r.height-1)*scale)), color, 3, 8, 0);

        if( nestedCascade.empty() )

            continue;

        smallImgROI = smallImg( r );

          

        // Detection of eyes int the input image

        nestedCascade.detectMultiScale( smallImgROI, nestedObjects, 1.1, 2,

                                        0|CASCADE_SCALE_IMAGE, Size(30, 30) ); 

          

        // Draw circles around eyes

        for ( size_t j = 0; j < nestedObjects.size(); j++ ) 

        {

            Rect nr = nestedObjects[j];

            center.x = cvRound((r.x + nr.x + nr.width*0.5)*scale);

            center.y = cvRound((r.y + nr.y + nr.height*0.5)*scale);

            radius = cvRound((nr.width + nr.height)*0.25*scale);

            circle( img, center, radius, color, 3, 8, 0 );

        }

    }

  

    // Show Processed Image with detected faces

    imshow( "Face Detection", img ); 

}