Saturday 24 September 2016

Face Detection(Java)

Face Detection Is The Most Popular Application  in Many System Like The Observer or photo editor So i Will Introduce this program in java using Open CV technology
prerequisites 
1- Download    OpenCV  3.0 Library  
2- Download    NetBeans IDE 

Steps:
1- Add opencv jar file as in the image after right click on libraries 
(img 1)
2- go To jar File you already download in bin folder e from opencv extracted download folder
3- add Path of .dl file x86 or x64 from opencv downloaded folder as your machine to NetBeans
  like in the image 2
                                                                     

 (img 2)
4- Start The Java Code
       
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
import org.opencv.videoio.VideoCapture;

public class FaceDetection extends javax.swing.JFrame {
    private DaemonThread myThread = null;
    int count = 0;
     int i1  = 0;
    VideoCapture webSource = null;
    Mat frame = new Mat();
    MatOfByte mem = new MatOfByte();
    CascadeClassifier faceDetector = new CascadeClassifier(FaceDetection.class.getResource("haarcascade_frontalface_alt.xml").getPath().substring(1));
    MatOfRect faceDetections = new MatOfRect();
    class DaemonThread implements Runnable {
        protected volatile boolean runnable = false;
        @Override
        public void run() {
            synchronized (this) {
                while (runnable) {
                    if (webSource.grab()) {
                        try {
                            webSource.retrieve(frame);
                            Graphics g = jPanel1.getGraphics();
                            faceDetector.detectMultiScale(frame, faceDetections);
                            for (Rect rect : faceDetections.toArray()) {
                               System.out.println("ttt"+i1);
                               showResult(frame);
                          
                                 break;
                          
                            }
                           // Highgui.imencode(".bmp", frame, mem);
                           
                            Imgcodecs.imencode(".bmp", frame, mem);
                            Image im = ImageIO.read(new ByteArrayInputStream(mem.toArray()));
                            BufferedImage buff = (BufferedImage) im;
                            if (g.drawImage(buff, 0, 0, getWidth(), getHeight()-150 , 0, 0, buff.getWidth(), buff.getHeight(), null)) {
                                if (runnable == false) {
                                    System.out.println("Paused ..... ");
                                    this.wait();
                                }
                            }
                        } catch (Exception ex) {
                            System.out.println("Error");
                        }
                    }
                }
            }
        }
       public  void showResult(Mat img) {
    Imgproc.resize(img, img, new Size(640, 480));
    MatOfByte matOfByte = new MatOfByte();
    Imgcodecs.imencode(".jpg", img, matOfByte);
    byte[] byteArray = matOfByte.toArray();
    BufferedImage bufImage = null;
    try {
        InputStream in = new ByteArrayInputStream(byteArray);
        bufImage = ImageIO.read(in);
        JFrame frame = new JFrame();
        frame.getContentPane().add(new JLabel(new ImageIcon(bufImage)));
        frame.pack();
        frame.setVisible(true);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
    }
/////////
    /**
     * Creates new form FaceDetection
     */
    public FaceDetection() {
        initComponents();
        System.out.println(FaceDetection.class.getResource("haarcascade_frontalface_alt.xml").getPath().substring(1));
    }
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    //                           
    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 0, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 376, Short.MAX_VALUE)
        );
        jButton1.setText("Start");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        jButton2.setText("Pause");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(24, 24, 24)
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
            .addGroup(layout.createSequentialGroup()
                .addGap(255, 255, 255)
                .addComponent(jButton1)
                .addGap(86, 86, 86)
                .addComponent(jButton2)
                .addContainerGap(258, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jButton2))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        pack();
    }//                         
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        myThread.runnable = false;            // stop thread
        jButton2.setEnabled(false);   // activate start button 
        jButton1.setEnabled(true);     // deactivate stop button
        webSource.release();  // stop caturing fron cam

    }                                        
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        webSource = new VideoCapture(0); // video capture from default cam
        myThread = new DaemonThread(); //create object of threat class
        Thread t = new Thread(myThread);
        t.setDaemon(true);
        myThread.runnable = true;
        t.start();                 //start thrad
        jButton1.setEnabled(false);  // deactivate start button
        jButton2.setEnabled(true);  //  activate stop button

    }                                        
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        /* Set the Nimbus look and feel */
        //
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(FaceDetection.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(FaceDetection.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(FaceDetection.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(FaceDetection.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new FaceDetection().setVisible(true);
            }
        });
    }
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JPanel jPanel1;
                 
}
  
 

If any problem in running code on your PC write a Comment and i will Replay

Written By Technical Manager at highcoder.com

*مستقبل البرمجة في مصر* الاسبوع الثاني

سياسه عمل الشركات في اختيار الموظفين
تنقسم سياسه إختيار اي موظف في اي شركه علي المدير المالك و المدير الفني وان تواجد موظف الموارد البشريه وكل واحد له وجه نظره التي تخدم عمله من تخيلات موظف الموارد مرورا  للفني الذي يأتيك بأسئله من خبراته التي تعلمها في سنين ليختبرك فيها وانت مازلت بدايه مشوارك لتقليل طموحك في راتبك وآخرا المالك الذي يقترح من الاجر ماهو زهيد جدا في مقابل تعليمك تفاهات وغالبا ما يكون اعتمادك علي نفسك في التعلم باي شركه .
 وهذه السياسه  ترجع لأسباب عده منها خوف الشركة من دفع ملبغ لموظف قد لا يكون بالدرجه المطلوبه ومنها ايضا انه غير مستعد لان يدفع أجرا لتعليم موظف قد يذهب منه في اي لحظه فلذلك هي حلقه مفرغه  من هذا الجانب أما ثانيها رغبه المالك في زياده ربحه عاجلاا وليس اجلاا وثالثها وجود الكثير من الشباب المطحون الذي يرضي باي وضع في هذه المعيشه ولكن هذا  كله ليس مشكلة كبيره فهناك ماهو أسوأ في سياسة الاختيار نبدائها اولاا بموظف (HR) ينقسموا الي ثلاث اقسام اولهم من يسالك في خبراتك ومدي توافقك في العمل لديهم سواء من سياده الفرديه في المشاريع او فريق عمل وغالبا هذا القسم يكون مستمع أكتر من السؤال ويري مدي توافق خبراتك السابقة
 مع متطلبات الشركة في الوظيفه المطلوبة و هذا افضل موظف من وجه نظري  وغالبا ما يوفق في اختيارمن هو أكثر كفائه بين اثنين  اما القسم التاني فهذا الذي يكون عباره عن سلسلة امتحانات من (IQ)  ولغة(English) وامتحان (Technical)  وقبولك في هذا يدخلك في المرحله الاخري من الانترفيو قد تكمل القسم الاول او تكون هناك مقابله اخري (Technical) وهذا لا اعيب عليه كثيرا الا انني اري امتحانات (IQ) لافائده لها كثيرا لان كل مجال عمل له ذكاء مختلف فليس بالضروره من يحل السدوكو في ساعه اقل ذكاء ممن يحلها في دقائق قد يكون الاخير لايفعل في حياته الا ان يلعبها والشطرنج ايضا لعبه ذكاء إلا انها ممارسة  فليس ضروري من هو بطل العالم في الشطرنج ان يشغل اي وظيفة في مجال عمل له فالذكاء اقسام وليس عام فهناك من هو ذكي في تعداد الاحتمالات لحدوث مشكله وهناك من هو ذكي في اختيار الحل الانسب بدون احتمالات الا احتمال المشكله ذاتها وهناك ما هو ذكي في معرفه (BUGS) في سوفت وير وهناك من هو ذكي في حل مسائل رياضيه لشغل وقته  اذا تعسر امامه  (BUGS) واذكي رجل في العالم يعمل اداريا  لايقدر ان يبتكر حل لمشكله فنيا  اما القسم الاخير هو الذي يحاول ان يكون مبدعا او يسال اسئله غريبه نوعا ما مثل 
أين تري نفسك بعد عدة سنين ؟ ماالذي يجعلك سعيدا لاستقبال العمل صباحا ليلة السبت ؟ كيف تعامل مديرك اذا كان لايوفقك في الرائ؟ عدد صيدليات المنصوره وبنها؟ وزن بيتكم كام ؟ ..الخ .
 ليس المشكلة في الأسئله حرفيا انما المشكله في السائل لها فمثلاا لو كانت اجابه السؤال الاول ان اكون مديرا لهذه الشركة اجابه منطقية ولكنها قد تغضب الموظف لعده اسباب منها انه يحب مديره أوأنه لا يري فيك مديرا اذا كنت اصغر منه و غالبا سينظر اليك بتقزز وينسي انه يسال اسئله ليري اجاباتك فقط وربما ايضا تسالي ليس لانه يحب منك اجابه معينه بمعني ان معظمهم غير مستعد لاي اجابه غير متوقعه منك وانت ايضا تخاف ان تجيب اجابه منطقية لا تعجبه رغم ان اي أجابه منطقيه صحيحه  توافق سياسه الشركة .
اما الباقي اجابته متعدده وليس هذه الاسئله ايضا التي تجعل موظف اقوي من اخر حتي لو كانت هناك شركات كبيره عالميه تتبع هذه السياسه ليس ضرويا ان تكون سياسه صحيحه لانه فكر كل بلد مختلف بمعني مستوي الذكاء العام في النمسا يختلف كثيرا عن مصر يختلف عن السودان لان المعرفه والاحتكاك بالعالم المتقدم يذيد الذكاء تلقائيا فرجل نشاء في صحراء قاحله يكتسب خبرة او ذكاء الترحال او اختيار الكهوف ونحت الصخور لاختراع ادواته مثلاا بلطة للدفاع عن نفسه ؛ يختلف عن رجل نشاء في الغابة  يكستب ذكاء وخبره في تسلق الشجر ونحت الخشب لاختراع ادواته وقد تكون ايضا بلطة ولكنها من الخشب فكل يرتفع ذكائه من بيئته غالبا والذكاء الفطري غير قابل لحل مشكلات العالم انما المكتسب.
 وهناك سياسة اخري في اختيار الموظفين في الشركات لم ادرجها لانها لاتستحق لسؤها اولاا لانها غالبا ما تكون اسئله خبرات السنين لشاب خريج فلا يعرفها حتي يقل طموحه في راتبه او موظفين فقط يستقبلون ويحكون مع المتقدم للوظفيه بدون اي نية في توظيفه فقط لشهره الشركه او تدريب (HR)
او اخرون لا يعرفون سوي مطلوب موظف it خبره عشر سنين بدون اي تحديد وانني اري السوفت وير في مصر مازال ناشئا فلا داعي لموظف(HR) الا اذا كانت شركه كبيره و متطلباتها كثيره فالغرب لم يفكر في (HR)  الا بعد سيادتهم في صناعه السوفت وير ونحن ليس لنا ترتيب عالمي حتي نفكر في الشكليات قبل الخبرات 
يتبع.. وسنكمل الاسبوع القادم في كتابة كيفيه تطوير المبرمجين لانفسهم

written by: Technical Manager at highcoder.com

Wednesday 21 September 2016

مستقبل البرمجة في مصر *الأسبوع الاول*


  بسم الله بداية كل شي اما بعد 

بداية هدفي من كتابة هذا المقال رؤيتي للهاوية في مصر مبكرا في عمل حر مازال في بدايه نشأته بمعني أنه خطأ من الأفراد الفنية والإدارية معا  قبل البدء فإنني عملت في هذا المجال بمعظم تفاصيله لأكثر من ثلاث سنين ولذلك فانني أكتب علي رؤية إستنتاجية ليس أكثر وليس من طريق الهواه وسابدا بدايه بعرض المشكله قبل الحلول حتي تتوحد علي الأقل وجه النظر في  المشكله ذاتها للوصول لافضل حل .

مستقبل البرمجة في مصر يترتب علي عدة عوامل خاصة واخري عامة

اما الخاصة
v      سياسه عمل الشركات في إختيار الموظفين
v      كيفية تطور المبرمجين لانفسهم
v      توفر المادة العلمية لاي تكنولوجيا جديده في هذا المجال
v      كيفيه العمل في الشركات وكيفيه اداره الموارد الفنيه البشريه
v      نوع التخصصات المطلوبه وكيفيه تحسين الشركات للعاملين بها

اما العوامل العامه
v      بيئه مصر عموما في مجال العمل والي اي مدي تؤثر علي مجال البرمجة خصيصا
v      البيئه العلميه و الدراسية الحكومية في تطوير هذا المجال
v      طرق التدريس العامه في الجامعات والمؤسسات الخاصه
v       وعي المصريين بهذا المجال غير العاملين فيه

كل هذه عوامل تفسد مستقبل شباب مصر المبرمجين  فأكثر من 80 في المائه من الخريجين ليس عندهم أدني فكرة عن سوق العمل إلا أنه ان يقع فريسة لمستثمرين بأجور زهيده لأعمال معروفة وأفكار قديمه لا مجال لها للتنافس في سوق عالمي ولكن صعوبه العيش تدفع لأكثر من ذلك فيبدأ الشاب بتقديم سلسلة تنازلات لكل مرحله حياتية بضغط إحتياجاته الأوليه ولا تقف هذه التنازلات إلا عند فوات الأوان أو عند الموت فلذلك بنفس نسبه الخريجين تقريباً هي نسبه العمل الروتيني في شركات تطوير السوفت وير فلذلك نري دائما كل سنة تتخرج دفعه جديده بأقل أو تساوي نفس إمكانيات الدفعه الأقدم فقط مجرد نسخ متكرره لخطأ لن ينصلح في المستقبل القريب ولكن هناك نسبة أمل تكاد ان تكون ضيئله ان الشباب تستخدم مواقع التورنت(torrents) للتعلم او اليوتويب(YouTube) او كورسات من مواقع مثل ليندا(Lynda.com)  فلذلك في إغلاق هذه المواقع لمصر سنعود بلا فائده مثل ما كنا او ربما مازلنا .
ولكن ليس كل الشباب حالته ماديا تسمح لذلك بل انها النسبه الكبري وايضا قبل ذلك يحتاج الي لغه لكي يفهم علي الاقل سبعين بالمائه من هذه الكورسات  فهناك عمر يضيع قبل البدء من الصفر وهذه حقيقه مره؛ الا انها موجوده وليس الكل من الشباب له موجه في عمله هذا ربما كنت محظوظا اذا وجدت من يوجهك فيه في بدايه حياتك اما المبرمجين في مصر اكثر من 60 في المائه منهم يتجه الي برمجه الويب لسهولتها بغض النظر عن اللغه المستخدمه  فيها سواء أنصار ميكروسوفت او أنصار غيرهم ولكن الويب عموما بعد خبره معينه يصير به رتابه وملل ومعظمه متاح علي الانترنت أكوادا وأفكارا لأي شخص لدرجه انه قد يعمل  شخص في مجال تركيب اكواد فقط مهما كانت في مجال السوشيال او التوظيف او التجاره او الخدمات المدفوعه اونلاين (online) الخ.
 اما باقي الاربعين في المائه ثلاثين منهم يعمل في صيانه سوفت وير موجوده اصلاا لعملائها  فقط وتحديثات لانظمه كانت في بدايه تطويرها  ممتعه مثل المجال الطبي والمخازن والمحلات والمدارس وحسابات الربح و الخدمات البتروليه وحساب الاجور وتعاملات الموظفين... الخ معظمها انظمه معتمده علي تفاعل  للعميل(interaction) علي البرنامج مما جعل اكثر من تسعين في المائه لمبرمجين مصر لايعرفون شيئا في عملهم عن الالجورزمات(Algorithms) الا مجرد تجربه  وخبره الخطأ (try and error)حتي يعمل البرنامج صحيحا لفتره مدتها شهور علي الاكثر لكسب ثقه العميل بالتالي اخذ امولاا اكثر فلذلك لا تجد ابدا مبرمجين العاب في مصر ذوي خبره أو كفاءة إلا تركيب او تصميم الا في الخارج.
 وغالبا اي نجاح يتطلب كثيرا من العلم والعمل وقليلاا من الحظ لا ننكر ذلك لأنه جزء من واقعنا فتري من هم اقل معرفه وخبره في مواقع أفضل ممن هم اكثر منهم خبره  ولكن ليس هذا بمعني اليأس انما هناك أسباب أشد صفعة منها مثل عدم كتابه الالجوزمات و هاكر رانك (hackerrank.com) وغيره  يقول ذلك عندما تكتب برنامج بسيط فتجد نسبه نجاحه لاتتعدي الخمسين في المئه  فلذلك ان كنت تعمل في أنظمه كبيره تجد بعد فتره قد تصل الي شهور من العمل عليها من العميل تجدها تخرج نتائج غير مرغوب  فيها (Bugs)وهذا ضرر سببه  قلة وعي بالاوبجكت أورينتد(OOP) و(Design Patterns)  وهذه مقدمه بسيطه لوضع مؤلم ثم نبدا في النظر الي العوامل المذكوره سلفا سنتناول فقط هذا الاسبوع اول عامل في العوامل الخاصه ألا وهي:
سياسه عمل الشركات في اختيار الموظفين
تنقسم سياسه إختيار اي موظف في اي شركه علي المدير المالك و المدير الفني وان تواجد موظف الموارد البشريه وكل واحد له وجه نظره التي تخدم عمله من تخيلات موظف الموارد مرورا  للفني الذي يأتيك بأسئله من خبراته التي تعلمها في سنين ليختبرك فيها وانت مازلت بدايه مشوارك لتقليل طموحك في راتبك وآخرا المالك الذي يقترح من الاجر ماهو زهيد جدا في مقابل تعليمك تفاهات وغالبا ما يكون اعتمادك علي نفسك في التعلم باي شركه .
 وهذه السياسه  ترجع لأسباب عده منها خوف الشركة من دفع ملبغ لموظف قد لا يكون بالدرجه المطلوبه ومنها ايضا انه غير مستعد لان يدفع أجرا لتعليم موظف قد يذهب منه في اي لحظه فلذلك هي حلقه مفرغه  من هذا الجانب اما ثانيها رغبه المالك في زياده ربحه عاجلاا وليس اجلاا وثالثها وجود الكثير من الشباب المطحون الذي يرضي باي وضع في هذه المعيشه ولكن هذا  كله ليس مشكلة كبيره فهناك ماهو أسوأ  
يتبع...
written by: Technical Manager at highcoder.com

Oracle requires a subscription to use Java SE NOW

May be licenses won’t be available for Java SE 8 or later, but separate support contracts also go away after Microsoft acquire G ithub...