الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تشغيل الكاميرا باستخدام JMyron Library

بدأه alionline في 10 أكتوبر 2012 · 5 رد · 881 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

كثيرا ما عانيت من مكتبة JMF وعدم عملها مع انظمة 64 بت

والحمد لله وجدت المكتبة JMyron التي تعمل على انظمة 32 و 64 بت وكذلك يمكنها متابعة اللوان

والطريقة سهلة بعد فتح الملف المضغوط

1- يتم نسخ ملفات ال DLL الى C:\windows\System32

2- استدعاء JMyron.jar الى مشروعك

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;

import JMyron.JMyron;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;

public class TestWebCam extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JTextField jTxtTolarane;
	private JLabel lblCameraView;
	private JLabel lblStillImage;
	private JColorChooser jcolorchooser;
	private JLabel lblTolarance;
	private JMyron m;//a camera object
	private int width = 320;
	private int height = 240;
	private int frameRate = 10; //fps
	private boolean captureOn;
	private BufferedImage captureImage;
	private int[] imageIntArray;
	//private int cR = 255, cG = 255, cB = 255;


	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                try {
					javax.swing.UIManager.setLookAndFeel(info.getClassName());
				} catch (ClassNotFoundException | InstantiationException
						| IllegalAccessException
						| UnsupportedLookAndFeelException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
                break;
            }
        }
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					TestWebCam frame = new TestWebCam();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public TestWebCam() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 675, 807);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
	    GridBagLayout gbl_contentPane = new GridBagLayout();
	    gbl_contentPane.columnWidths = new int[]{66, 180, 246, 0};
	    gbl_contentPane.rowHeights = new int[]{276, 325, 22, 50, 25, 0};
	    gbl_contentPane.columnWeights = new double[]{0.0, 0.0, 0.0, Double.MIN_VALUE};
	    gbl_contentPane.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
	    contentPane.setLayout(gbl_contentPane);

	    JButton btnStart = new JButton("Start");
	    btnStart.addActionListener(new ActionListener() {
	    	public void actionPerformed(ActionEvent arg0) {
	    		startCapture();
	    	}
	    });

	    lblStillImage = new JLabel("");
	    lblStillImage.setBackground(new java.awt.Color(102, 102, 102));
	    lblStillImage.setForeground(new java.awt.Color(102, 102, 102));
	    lblStillImage.setBorder(javax.swing.BorderFactory.createEtchedBorder());
	    lblStillImage.setPreferredSize(new java.awt.Dimension(320, 240));
	    GridBagConstraints gbc_lblStillImage = new GridBagConstraints();
	    gbc_lblStillImage.fill = GridBagConstraints.BOTH;
	    gbc_lblStillImage.insets = new Insets(0, 0, 5, 5);
	    gbc_lblStillImage.gridwidth = 2;
	    gbc_lblStillImage.gridx = 0;
	    gbc_lblStillImage.gridy = 0;
	    contentPane.add(lblStillImage, gbc_lblStillImage);

	    lblCameraView = new JLabel("");
	    lblCameraView.setBackground(new java.awt.Color(102, 102, 102));
	    lblCameraView.setForeground(new java.awt.Color(102, 102, 102));
	    lblCameraView.setBorder(javax.swing.BorderFactory.createEtchedBorder());
	    lblCameraView.setPreferredSize(new java.awt.Dimension(320, 240));
	    GridBagConstraints gbc_lblCameraView = new GridBagConstraints();
	    gbc_lblCameraView.fill = GridBagConstraints.BOTH;
	    gbc_lblCameraView.insets = new Insets(0, 0, 5, 0);
	    gbc_lblCameraView.gridx = 2;
	    gbc_lblCameraView.gridy = 0;
	    contentPane.add(lblCameraView, gbc_lblCameraView);

	    jcolorchooser=new JColorChooser();
	    //jcolorchooser.setLocation(0, 0);
	    GridBagConstraints gbc_jcolorchooser = new GridBagConstraints();
	    gbc_jcolorchooser.fill = GridBagConstraints.BOTH;
	    gbc_jcolorchooser.insets = new Insets(0, 0, 5, 0);
	    gbc_jcolorchooser.gridwidth = 3;
	    gbc_jcolorchooser.gridx = 0;
	    gbc_jcolorchooser.gridy = 1;
	    contentPane.add(jcolorchooser, gbc_jcolorchooser);

	    lblTolarance = new JLabel("Tolarance");
	    GridBagConstraints gbc_lblTolarance = new GridBagConstraints();
	    gbc_lblTolarance.fill = GridBagConstraints.HORIZONTAL;
	    gbc_lblTolarance.insets = new Insets(0, 0, 5, 5);
	    gbc_lblTolarance.gridx = 0;
	    gbc_lblTolarance.gridy = 2;
	    contentPane.add(lblTolarance, gbc_lblTolarance);

	    jTxtTolarane = new JTextField();
	    jTxtTolarane.setText("10");
	    GridBagConstraints gbc_jTxtTolarane = new GridBagConstraints();
	    gbc_jTxtTolarane.anchor = GridBagConstraints.NORTHWEST;
	    gbc_jTxtTolarane.insets = new Insets(0, 0, 5, 5);
	    gbc_jTxtTolarane.gridx = 1;
	    gbc_jTxtTolarane.gridy = 2;
	    contentPane.add(jTxtTolarane, gbc_jTxtTolarane);
	    jTxtTolarane.setColumns(10);

	    GridBagConstraints gbc_btnStart = new GridBagConstraints();
	    gbc_btnStart.anchor = GridBagConstraints.NORTHWEST;
	    gbc_btnStart.insets = new Insets(0, 0, 0, 5);
	    gbc_btnStart.gridwidth = 2;
	    gbc_btnStart.gridx = 0;
	    gbc_btnStart.gridy = 4;
	    contentPane.add(btnStart, gbc_btnStart);

	}

	private void configureMycron() {
        m = new JMyron();//make a new instance of the object
        m.start(width, height);//start a capture at 320x240        
        //m.findGlobs(0);//disable the intelligence to speed up frame rate
        m.findGlobs(1);


        int tol=Integer.parseInt(jTxtTolarane.getText());
        m.trackColor(jcolorchooser.getColor().getRed(),
        		jcolorchooser.getColor().getGreen(),
        		jcolorchooser.getColor().getBlue(), tol);
        //set labels
        lblCameraView.setBounds(new Rectangle(width, height));

    }

    private void getCameraImage() {
        captureImage = new BufferedImage(width, height, BufferedImage.OPAQUE);
        m.update();//update the camera view
        imageIntArray = m.image(); //get the normal image of the camera
        captureImage.setRGB(0, 0, width, height, imageIntArray, 0, width);
    }

    private void startCapture() {
        configureMycron();
        captureOn = true;
        Runnable capture = new Runnable() {

            public void run() {
                while (captureOn) {
                    try {
                        getCameraImage();
                        lblCameraView.setIcon(new ImageIcon(captureImage));
                        //lblStillImage.setIcon(new ImageIcon(bi));
                        test();

                        Thread.sleep(frameRate);
//                        repaint();
                    } catch (InterruptedException ex) {
                    //    Logger.getLogger(JmyronWebCam.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
        };
        Thread t = new Thread(capture);
        t.start();
        lblCameraView.setSize(width,height);
        lblStillImage.setSize(width, height);
        //jButtonStart.setEnabled(false);
    }

    private void test() {
        //lblStillImage.setIcon(new ImageIcon(captureImage));
        Graphics g2d = lblStillImage.getGraphics();

        g2d.drawImage(captureImage, 0, 0, rootPane);

        int[][] globBoxes = m.globBoxes();
            for (int i = 0; i < globBoxes.length; i++) {
                int[] boxArray = globBoxes;

                int x=boxArray[0];
                int y=boxArray[1];
                int w=boxArray[2];
                int h=boxArray[3];

                g2d.setColor(Color.RED);
                g2d.drawRect(x, y, w, h);
        }

        lblStillImage.paintComponents(g2d);
        lblStillImage.validate();
        this.validate();
    }




}

تحياتي وسلامي

للجميع

:blush: :blush: :blush:

JMyron0025.rar

تم تعديل هذه المشاركة بواسطة alionline في 10 أكتوبر 2012 في 23:50

3
#2

اعذروني

بسبب النت الضعيف

تم انزال الموضع مرتين

ارجو من ادارة الموقع حذف الموضع الذي لا يحتوي

المكتبة

ولكم جزيل الشكر

#3
alionline كتب:

السلام عليكم

كثيرا ما عانيت من مكتبة JMF وعدم عملها مع انظمة 64 بت

والحمد لله وجدت المكتبة JMyron التي تعمل على انظمة 32 و 64 بت وكذلك يمكنها متابعة اللوان

والطريقة سهلة بعد فتح الملف المضغوط

1- يتم نسخ ملفات ال DLL الى C:\windows\System32

2- استدعاء JMyron.jar الى مشروعك

للاسف لم تعمل معى بعد ان قومت بعمل ما شرحته سابقا

Software Developer
Mahmoudkelany.com


 

#4

الكود دا اشتغل معايا

import JMyron.*;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.Timer;

public class SimpleCamera extends JFrame {

	private JMyron camera;
	private int width = 320;
	private int height = 240;
	private VideoPane vp;
	private int frameRate = 15;

	public static void main(String[] args) {
    	new SimpleCamera().setVisible(true);
	}

	public SimpleCamera() {
    	setDefaultCloseOperation(EXIT_ON_CLOSE);
    	setSize(width, height);
    	camera = new JMyron();
    	camera.start(width, height);
    	camera.findGlobs(0);//disable the intelligence to speed up frame rate

    	vp = new VideoPane();
    	add(vp);

    	Timer videoTimer = new Timer(1000 / frameRate, new ActionListener() {
        	public void actionPerformed(ActionEvent evt) {
            	vp.repaint();
        	}
    	});
    	videoTimer.start();
	}

	private class VideoPane extends JComponent {

    	BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

    	public void paint(Graphics g) {
        	camera.update();//update the camera view
        	int[] img = camera.image(); //get the normal image of the camera
        	bi.setRGB(0, 0, width, height, img, 0, width);
        	g.drawImage(bi, 0, 0, width, height, this);
    	}
	}
}

لكن لدى سوال لماذا الحجم 320*240

واذا غيرت الحجم بتخرب صورة الكاميرا ؟؟؟

Software Developer
Mahmoudkelany.com


 

#5

السلام عليكم

اخ محمود

على برنامج الــNetbeans تعمل بدون مشاكل ولكن على الـــEclipse تظهر رسالة خطا

ظننت ان المشكلة في الEclipse

وبعد التجربة وجد الخطا وهو

1- يجب نسخ الملفات الثلاث الى المسار C:\Windows

وهن

DSVL.dll

JMyron.dll

myron_ezcam.dll

2- تشغيل البرنامج على منصة 32 بت الخاص بالـــJDK

سواء ان كانت 1.6 او 1.7

الحجم 320*240

اتصور هذا حجم النقاوة التي تقدر علية هذا المكتبة

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

تحاتي

:) :) :)

1
#6

+1

بارك الله فيك اخوي ونتمنى برامج اخرى كهذه

تحياتي الك

556891961.gif

I am learning from you

it is the programmer eye

مواضيع مشابهة