রিয়েল-টাইম ক্যামেরা থেকে ইমেজ ক্যাপচার

রিয়েল-টাইম ইমেজ প্রসেসিং (Real-Time Image Processing) - জাভা দিয়ে ডিজিটাল ইমেজ প্রসেসিং (Digital Image Processing using Java) - Computer Science

354

রিয়েল-টাইম ক্যামেরা থেকে ইমেজ ক্যাপচার (Real-Time Image Capture from Camera)

রিয়েল-টাইম ক্যামেরা থেকে ইমেজ ক্যাপচার একটি গুরুত্বপূর্ণ প্রযুক্তি, যা কম্পিউটার ভিশন, ফেস রিকগনিশন, এবং সিকিউরিটি সিস্টেমে ব্যাপকভাবে ব্যবহৃত হয়। Java ব্যবহার করে আপনি সহজেই ক্যামেরা থেকে রিয়েল-টাইম ইমেজ ক্যাপচার করতে পারেন। নিচে JavaFX এবং OpenCV এর সাহায্যে কিভাবে ক্যামেরা থেকে রিয়েল-টাইম ইমেজ ক্যাপচার করতে হয় তার উদাহরণ দেয়া হলো।


Java এবং OpenCV ব্যবহার করে ক্যামেরা থেকে ইমেজ ক্যাপচার

প্রথমে, OpenCV লাইব্রেরি ডাউনলোড এবং প্রজেক্টে যুক্ত করতে হবে। এরপর OpenCV এর VideoCapture ক্লাস ব্যবহার করে ক্যামেরা স্ট্রিম থেকে ফ্রেম ক্যাপচার করা যায়।

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.videoio.VideoCapture;

public class CameraCaptureExample {
    public static void main(String[] args) {
        // OpenCV লাইব্রেরি লোড করা
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

        // ক্যামেরা ইনিশিয়ালাইজ করা
        VideoCapture camera = new VideoCapture(0); // '0' ডিফল্ট ক্যামেরা বোঝায়

        // চেক করা ক্যামেরা সফলভাবে ইনিশিয়ালাইজ হয়েছে কিনা
        if (!camera.isOpened()) {
            System.out.println("Error: Camera not found!");
            return;
        }

        Mat frame = new Mat();
        
        System.out.println("Press 's' to save an image or 'q' to quit.");

        while (true) {
            // ক্যামেরা থেকে ফ্রেম ক্যাপচার করা
            if (camera.read(frame)) {
                // ফ্রেম প্রক্রিয়াকরণ (এখানে সরাসরি প্রদর্শন নয়, কনসোলে নির্দেশনা)
                System.out.println("Frame captured.");

                // সেভ অপশন
                System.out.println("Enter 's' to save this frame or 'q' to quit:");
                char ch = (char) System.in.read();
                if (ch == 's') {
                    Imgcodecs.imwrite("captured_image.jpg", frame);
                    System.out.println("Image saved as captured_image.jpg");
                } else if (ch == 'q') {
                    break;
                }
            }
        }

        // ক্যামেরা রিলিজ করা
        camera.release();
        System.out.println("Camera released.");
    }
}

কোডের ব্যাখ্যা

  1. ক্যামেরা ইনিশিয়ালাইজ:
    • VideoCapture camera = new VideoCapture(0); দ্বারা ডিফল্ট ক্যামেরা ইনিশিয়ালাইজ করা হয়েছে।
  2. ফ্রেম ক্যাপচার:
    • camera.read(frame) ফাংশন ক্যামেরা থেকে ফ্রেম পড়ে Mat অবজেক্টে সংরক্ষণ করে।
  3. ফ্রেম সেভ করা:
    • Imgcodecs.imwrite() ফাংশন দ্বারা ফ্রেমটি সংরক্ষণ করা হয়েছে। এটি captured_image.jpg নামে ইমেজ ফাইল হিসেবে সংরক্ষণ করে।
  4. ক্যামেরা রিলিজ:
    • camera.release() দ্বারা ক্যামেরা রিলিজ করে এবং প্রোগ্রাম বন্ধ করা হয়েছে।

JavaFX ব্যবহার করে ক্যামেরা ফিড দেখানো

JavaFX ব্যবহার করে ক্যামেরা ফিড সরাসরি উইন্ডোতে দেখানো যেতে পারে। নিচে JavaFX এবং OpenCV এর সাহায্যে ক্যামেরা ফিড দেখানোর উদাহরণ দেয়া হলো:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.videoio.VideoCapture;
import org.opencv.imgproc.Imgproc;
import org.opencv.core.CvType;
import org.opencv.core.MatOfByte;
import javafx.embed.swing.SwingFXUtils;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import javax.imageio.ImageIO;

public class CameraFeedApp extends Application {
    private VideoCapture camera;
    private ImageView imageView;

    @Override
    public void start(Stage primaryStage) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

        camera = new VideoCapture(0);
        if (!camera.isOpened()) {
            System.out.println("Error: Camera not found!");
            return;
        }

        imageView = new ImageView();
        StackPane root = new StackPane(imageView);
        Scene scene = new Scene(root, 640, 480);

        primaryStage.setTitle("Camera Feed");
        primaryStage.setScene(scene);
        primaryStage.show();

        new Thread(() -> {
            Mat frame = new Mat();
            while (camera.read(frame)) {
                Imgproc.cvtColor(frame, frame, Imgproc.COLOR_BGR2RGB);
                Image image = mat2Image(frame);
                javafx.application.Platform.runLater(() -> imageView.setImage(image));
                
                try {
                    Thread.sleep(33); // প্রায় ৩০ FPS
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    private Image mat2Image(Mat mat) {
        MatOfByte buffer = new MatOfByte();
        Imgcodecs.imencode(".jpg", mat, buffer);
        try {
            BufferedImage img = ImageIO.read(new ByteArrayInputStream(buffer.toArray()));
            return SwingFXUtils.toFXImage(img, null);
        } catch (Exception e) {
            System.out.println("Error: Unable to convert Mat to Image.");
            return null;
        }
    }

    @Override
    public void stop() {
        if (camera.isOpened()) {
            camera.release();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

কোডের ব্যাখ্যা

  1. JavaFX সেটআপ:
    • start() মেথডে ক্যামেরা ইনিশিয়ালাইজ এবং ImageView-এ ক্যামেরা ফিড দেখানো হয়েছে।
  2. Frame Read Thread:
    • নতুন Thread তৈরি করে ক্যামেরা থেকে ফ্রেম পড়া হয়েছে এবং imageView তে সেট করা হয়েছে, যাতে ক্যামেরা ফিড সরাসরি JavaFX UI-তে দেখা যায়।
  3. mat2Image() মেথড:
    • Mat অবজেক্টকে Image এ রূপান্তর করতে এই মেথডটি ব্যবহার করা হয়েছে।
  4. FPS কন্ট্রোল:
    • Thread.sleep(33); লাইনটি দ্বারা ফ্রেম রেট প্রায় ৩০ FPS এ নিয়ন্ত্রিত হয়েছে।

উপসংহার

এই উদাহরণগুলোতে Java এবং OpenCV ব্যবহার করে কিভাবে ক্যামেরা থেকে রিয়েল-টাইম ইমেজ ক্যাপচার এবং JavaFX UI-তে ক্যামেরা ফিড দেখানো যায় তা ব্যাখ্যা করা হয়েছে। OpenCV লাইব্রেরি ব্যবহার করে ক্যামেরা থেকে ফ্রেম ক্যাপচার, সংরক্ষণ এবং প্রক্রিয়া করার কাজগুলো সহজেই সম্পন্ন করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...