Thu hình từ camera

Một phần của tài liệu Đồ án tốt nghiệp: Xử lý ảnh phát hiện khuôn mặt người (Trang 69)

CHƯƠNG 4: XÂY DỰNG CHƯƠNG TRÌNH VÀ MỘT SỐ KẾT QUẢ MINH HỌA

4.4.1. Thu hình từ camera

Ta sử dụng thư viện sẵn có là Aforge.Net để thực hiện thu hình từ camera vào máy tính. Thư viện này chỉ điều khiển được các camera local, tức là các camera nối trực

tiếp với máy tính chạy chương trình này, chứ không điều khiển được các camera nối với các máy tính khác trong mạng máy tính (remote camera).

Đây là thư viện viết trên C#. Trong C# có một khái niệm là namespace, nó chứa một tập các lớp có liên quan hoặc các namespace khác. AForge là 1 namespace như vậy. Nó chứa nhiều namespace trong nó như: AForge.Imaging, AForge.Video.DirectShow, AForge.Video, … dùng cho xử lý ảnh và video (mở file video hoặc thu từ camera).

Trong thư viện này, để thực hiện thu hình từ camera, ta sử dụng thư viện AForge.Video.DirectShow. Trong thư viện này có các lớp phục vụ cho việc phát hiện ra các thiết bị camera gắn vào máy tính, thực hiện khởi động và tắt các camera. Các lớp đó như sau:

FilterInfoCollection: dùng phát hiện ra các thiết bị camera gắn với máy tính. Nó là một mảng các đối tượng FilterInfo, mỗi đối tượng này chứa thông tin về 1 thiết bị camera được phát hiện ra.

VideoCaptureDevice: đây là lớp trực tiếp điều khiển thiết bị camera, như cho chạy, dừng, lấy về các frame.

FilterCategory: lớp này định nghĩa các nguồn video khác nhau như từ file hay từ thiết bị camera.

Trình tự thực hiện thu hình từ camera khi sử dụng thư viện này như sau: 1. Dò xét xem có thiết bị camera được gắn với máy tính không.

FilterInfoCollection videoDevices =

new FilterInfoCollection( FilterCategory.VideoInputDevice );

Thuộc tính videoDevices.Count cho biết có bao nhiêu thiết bị camera đang được nối với máy tính. Nếu nó bằng 0 có nghĩa là không có thiết bị nào cả. 2. Tạo 1 đối tượng VideoCaptureDevice gắn với 1 camera được chọn, để điều

khiển nó.

VideoCaptureDevice videoSource = new VideoCaptureDevice( videoDevices[0].MonikerString );

Trong ví dụ này ta đã chọn điều khiển camera số 0. MonikerString là xâu đặc tả về thiết bị camera được chọn.

3. Cho chạy camera.

Đơn giản chỉ cần gọi phương thức Start của đối tượng VideoCaptureDevice vừa tạo.

videoSource.Start( );

Khi gọi phương thức này, hệ thống sẽ sinh ra 1 tiến trình ngầm. Tiến trình này sẽ liên tục gửi các frame hình ảnh thu được từ camera cho chương trình. 4. Dừng chạy camera.

Thực hiện 2 lệnh:

videoSource.WaitForStop();

Sau 2 lời gọi này, tiến trình ngầm sẽ chấm dứt hoạt động và camera cũng dừng hoạt động.

5. Nhận về các frame khung hình.

Đây là điều mà chúng ta quan tâm nhất. Khi có được frame chúng ta có thể làm bất kì điều gì chúng ta muốn lên frame đó. Để thực hiện điều này, ta cần đăng kí sự kiện NewFrame của đối tượng VideoCaptureDevice. Thực hiện như sau:

videoSource.NewFrame += new NewFrameEventHandler( video_NewFrame );

private void video_NewFrame( object sender, NewFrameEventArgs eventArgs )

{

// nhận new frame

Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone(); // xử lý frame nhận được tại đây

}

Kiểu delegate NewFrameEventHandler và lớp NewFrameEventArgs được khai báo trong thư viện AForge.Video (một phần của AForge, đã nói qua ở trên), chứ không có trong AForge.Video.DirectShow.

Một phần của tài liệu Đồ án tốt nghiệp: Xử lý ảnh phát hiện khuôn mặt người (Trang 69)