22
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TVIỄN THÔNG ====o0o==== BÁO CÁO ĐỒ ÁN 1 ĐỀ TÀI: THEO DÕI ĐỐI TƯỢNG DI CHUYN BNG CAMERA Nhóm: 03 GVHD: TS. Phạm Văn Tiến Hà Nội, 5/2013

Báo cáo đồ án 1

Embed Size (px)

Citation preview

Page 1: Báo cáo đồ án 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN TỬ VIỄN THÔNG

====o0o====

BÁO CÁO

ĐỒ ÁN 1 ĐỀ TÀI:

THEO DÕI ĐỐI TƯỢNG DI CHUYỂN BẰNG

CAMERA

Nhóm: 03

GVHD:

TS. Phạm Văn Tiến

Hà Nội, 5/2013

Page 2: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

2

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN TỬ VIỄN THÔNG

====o0o====

BÁO CÁO

ĐỒ ÁN 1 ĐỀ TÀI:

THEO DÕI ĐỐI TƯỢNG DI CHUYỂN BẰNG

CAMERA

Các thành viên

STT Họ và Tên MSSV

1 Đỗ Mạnh Cường 20101210

2 Nguyễn Đình Hiếu 20101514

3 Trần Thị Hiền 20101500

4 Nguyễn Văn Sang 20102609

5 Nguyễn Duy Linh 20101773

Hà Nội, 5/2013

Page 3: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

3

MỤC LỤC

MỤC LỤC ............................................................................................................................ 3

LỜI NÓI ĐẦU ...................................................................................................................... 4

I. MÔ TẢ HỆ THỐNG .................................................................................................... 5

II. TRIỂN KHAI HỆ THỐNG ........................................................................................... 6

1. Streaming video...................................................................................................... 6

1.1. Giới thiệu ......................................................................................................... 6

1.2. Kỹ thuật streaming video ................................................................................ 6

1.3. Giao thức RTSP ................................................................................................... 8

2. Tách ảnh từ video và xử lí ảnh để phát hiện di chuyển dùng Opencv tích hợp

Visual studio .................................................................................................................. 12

2.1. Giới thiệu ....................................................................................................... 12

2.2. Các thành phần chức năng của OpenCv ....................................................... 12

2.3. Cách thực hiện. ............................................................................................. 13

KẾT LUẬN ......................................................................................................................... 19

Page 4: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

4

LỜI NÓI ĐẦU

Hệ thống giám sát thông minh đang là bài toán thu hút nhiều sự quan tâm và

nghiên cứu trong những năm gần đây. Phát hiện, phân loại và theo dõi đối tuợng di

chuyển là những ứng dụng quan trọng của hệ thống an ninh và hệ thống giám sát. Các

quá trình này có quan hệ mật thiết với nhau, quyết định tính hiệu quả và chính xác của hệ

thống giám sát thông minh.

Trên cơ sở những kiến thức đã học cùng với đề tài “ Theo dõi đối tượng di chuyển

bằng camera” sẽ là một cơ hội để chúng em tìm tòi những kiến thức mới về phần mềm

cũng như rèn luyện các kỹ năng làm việc nhóm và quản lý thời gian hiệu quả. Chúng em

xin cảm ơn sự giúp đỡ của thầy Phạm Văn Tiến và anh Nguyễn Văn Kiệm đã giúp đỡ

chúng em hoàn thành đồ án này.

Tuy nhiên do thời gian và kiến thức còn hạn chế nên chúng em chỉ hoàn thành

được một số hạng mục, rất mong nhận được sự thông cảm của thầy.

Page 5: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

5

I. MÔ TẢ HỆ THỐNG

1. Mô hình

2. Phân công công việc

MỤC

CÔNG VIỆC

MÔ TẢ

THÀNH VIÊN

1 Xác định phương hướng

mục tiêu

Xác định hướng làm, liệt kê

công việc, phân công công viêc

Cả nhóm thống nhất cùng

nhau

2 Stream video từ camera lên

form

Thiết kể form với các nút điểu

khiển được bật tắt camera và

hiển thị lên form

Đỗ Mạnh Cường

Trần Thị Hiền

Nguyễn Văn Sang

3 Xử lý video với thư viện

FFMPEG

Tách video thành các frame ảnh,

sử dụng thư viện FFMPEG

Nguyễn Duy Linh

Nguyễn Văn Sang

Nguyễn Đình Hiếu

4 Xử lý ảnh sử dụng

OpenCV, xác định đối

tượng di chuyển

Từ các frame ảnh, sử dụng các

hàm trong thư viện OpenCV để

xác định đối tương di chuyển

Nguyễn Duy Linh

Nguyễn Văn Sang

Nguyễn Đình Hiếu

5 Điều khiển camera theo đối

tượng di chuyển

Điều khiển camera theo đối

tượng di chuyển

Đỗ Mạnh Cường

Trần Thị Hiền

Nguyễn Đình Hiếu

6 Lập báo cáo Lập báo cáo cá nhân và báo cáo

nhóm

Nguyễn Duy Linh

Trần Thị Hiền

Đỗ Mạnh Cường

Page 6: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

6

II. TRIỂN KHAI HỆ THỐNG

1. Streaming video

1.1. Giới thiệu

Streaming video là một kỹ thuật được sử dụng khá phổ biến trong các ứng dụng mạng.

Rất nhiều các địa chỉ ứng dụng rộng rãi trong thực tế như: các phần mềm (media player,

web browser, ...) trên các máy khách truy cập và xem video từ các máy chủ theo mô hình

server/client; các ứng dụng hội họp trực tuyến, đào tạo từ xa; giám sát, điều khiển từ xa

qua hình ảnh thời gian thực, v.v... Trong đó có nhiều ứng dụng sử dụng hệ thống nhúng

triển khai kỹ thuật này.

Streaming video sử dụng cách thức phát lại các đoạn video được lưu trữ trên các máy tính

trên mạng tới người dùng đầu cuối muốn xem đoạn video mà không cần tải đoạn

video đó về trên máy tính. Về bản chất, streaming video là quá trình chia nhỏ file video

thành các frame, rồi lần lượt gửi từng frame tới một bộ đệm trên máy tính của người xem

và hiển thị nội dung frame đó. Và quá trình này tuân thủ chặt chẽ về ràng buộc theo thời

gian, nói khác là tuân thủ chặt chẽ theo giao thức RTSP, RTP và RTCP.

1.2. Kỹ thuật streaming video

Các bước thực hiện kỹ thuật streaming video:

- Phần mềm máy khách (media player, web browser, ...) cần kết nối được và xác định file

video trên máy streaming server muốn xem.

- Yêu cầu streaming file video đó sẽ được gửi tới streaming server để tìm file video đó.

- Chương trình thực hiện streaming chạy trên máy streaming server sẽ chia file video

thành các frame rồi gửi các frame đó tới máy yêu cầu sử dụng các giao thức ràng buộc về

thời gian (RTSP, RTP, RTCP).

- Khi các frame về máy khách, sẽ được lưu trữ trong vùng đệm và nội dung các frame

sẽ được giải mã (decode) và hiển thị thông qua các chương trình chơi video (ví dụ VLC)

Page 7: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

7

Hình 1. Streaming video

Một số khái niệm được sử dụng trong streaming video:

- Streaming video (luồng video) thực chất là quá trình truyền các frame của file video tới

người nhận.

- Demand streaming (stream theo yêu cầu) là quá trình streaming một file video có sẵn (

đã được lưu trên ổ cứng ) tới người nhận.

- Live streaming (stream từ một nguồn tạo video) là quá trình streaming trực tiếp từ các

frame video được tạo ra từ các thiết bị thu nhận video (như camera ) tới người nhận.

- H.264 , VP8 là các thuật toán mã hóa cho các luồng video.

- Bitstream là khái niệm ám chỉ một luồng video từ máy chủ streaming tới máy khách

nhận các frame video dựa vào giao thức MMS hay RTP.

Page 8: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

8

- Codec: thuật ngữ ám chỉ chung cho các thuật toán mã hóa đường truyền trong quá trình

streaming audio hay video.

- RTSP (Real Time Streaming Protocol) là giao thức mạng điều khiển quá trình

streaming video hay streaming audio.

- RTP (Real-time Transport Protocol ) là giao thức chuẩn định dạng cho gói tin

(packet) video hay audio được truyền trên mạng.

1.3. Giao thức RTSP

RTSP (Real Time Streaming Protocol) là một giao thức điều khiển trên mạng được thiết

kế để sử dụng giao tiếp giữa máy client và máy streaming server. Giao thức này được sử

dụng để thiết lập và điều khiển phiên giao dịch giữa các máy tính (end points).

Về hình thức giao thức RTSP cũng có nét tương đồng với giao thức HTTP, RTSP định

nghĩa một bộ các tín hiệu điều khiển tuần tự, phục vụ cho việc điều khiển quá trình

playback. Trong khi giao thức HTTP là giao thức không có trạng thái thì RTSP là giao

thức có xác định trạng thái. Một định danh được sử dụng khi cần thiết để theo dõi các

phiên giao dịch hiện tại của quá trình streaming video gọi là số hiệu session. Cũng giống

như HTTP, RTSP sử dụng TCP là giao thức để duy trì một kết nối đầu cuối tới đầu cuối

và các thông điệp điểu khiển của RTSP được gửi bởi máy client tới máy server. Nó cũng

thực hiện điều khiển lại các đáp trả từ máy server tới máy client. Cổng mặc định được sử

dụng bởi giao thức này là 554.

Để thực hiện kỹ thuật streaming video theo giao thức RTSP nhất thiết máy client phải gửi

lên máy server ( streaming server) những request sau và phải theo một trình tự nhất định.

Đầu tiên, máy client sẻ gửi yêu cầu OPTIONS kèm với đường link trỏ tới file video cần

xem tới máy server, để máy server chấp nhận đường link này.

Hình 2: OPTIONS Request

Page 9: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

9

Nếu máy server trả về mã chấp nhận đường link trên thì máy client tiếp tục gửi yêu

cầu DESCRIBE tới máy server để máy server phân tích đường link. Một yêu cầu

DESCRIBE bao gồm một đường link RTSP có dạng (rtsp:// ) và kiểu dữ liệu đáp

trả từ phía server. Cổng mặc định được sử dụng cho giao thức RTSP là 554 và

cổng này được sử dụng cho cả giao thức của tầng giao vận UDP và TCP. Thông

điệp đáp lại từ máy server cho yêu cầu DESCRIBE của máy client bao gồm bản tin

miêu tả chi tiết phiên giao dịch( Session Description Protocol – SDP). Ngoài ra

trong thông điệp trả về từ máy server còn liệt kê các đường link thích hợp hơn tới

file video cần chơi khi mà trong file video đó có trộn lẫn giữa phụ đề và âm thanh.

Và điều quan trọng nhất ở trong bản tin miêu tả phiên giao dịch này là streamid

của luồng video và streamid của luồng âm thanh khi mà đoạn video đó có lồng âm

thanh vào trong các frame.

Page 10: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

10

Hình 3: DESCRIBE Request

yêu cầu DESCRIPTION thì máy client sẽ tiếp tục gửi tiếp yêu cầu SETUP tới máy server.

Một yêu cầu SETUP sẽ chỉ ra cách mà một dòng dữ liệu ( single media stream ) bắt buộc

phải được truyền đi như thế nào. Và yêu cầu SETUP bắt buộc phải được hoàn thành

trước khi một yêu cầu PLAY được gửi từ máy client. Yêu cầu SETUP bao gồm một đường

link tới file video cần streaming và một thông tin đặc tả cho phần giao vận. Đặc tả

nàybao gồm 2 cổng trong đó có một cổng cục bộ trên máy client dành cho việc nhận cac

gói tin RTP (audio và video) và cổng còn lại dùng để nhận các gói tin RTCP ( meta

information ). Máy server sẽ đáp trả lại bằng các xác nhận các tham số đã được lựa Sau

khi máy client nhận được thông điệp đáp trả từ máy server sau chọn, và điền vào các

phần còn thiếu ví dụ như máy server có thể chọn lại cổng của mình. Mỗi luồng dữ liệu sẽ

được cấu hình cụ thể sau khi yêu cầu SETUP được hoàn tất trước khi máy client gửi yêu

cầu PLAY.

Code:

Hình 4: SETUP Request

Sau khi hoàn tất yêu cầu SETUP, cấu hình được các luồng dữ liệu để chuẩn bị streaming,

máy client sẽ gửi yêu cầu PLAY để thực hiện truyền các frame dữ liệu thật sự từ máy

Page 11: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

11

server tới máy client , và các frame dữ liệu này sẽ được lưu trong một bộ đệm của máy

client, các frame này sẽ được giải mã ( decode ), rồi được hiển thị bởi trình chơi file

video và âm thanh ( VLC). Yêu cầu PLAY bao gồm một đường dẫn trỏ tới file video cần

phát giống như các yêu cầu trước đó. Đường link này có thể là đường tổng hợp ( để phát

các luồng dữ liệu) hoặc là môt đường link đơn lẻ ( chỉ phát một luồng dữ liệu duy nhất ).

Trong yêu cầu PLAY, máy client cũng sẽ chỉ ra một dải ( range) chỉ rõ một cách cụ thể số

hiệu frame bắt đầu được gửi và số hiệu frame kết thúc, Nếu như không chỉ rõ tham số

này, thì toàn bộ các frame sẽ được gửi tới máy client. Và nếu như luồng dữ liệu có bị tạm

dừng ( pause) thì luồng dữ liệu này cũng sẽ được phục hồi ở frame mà nó tạm dừng

truyền.

Hình 5: PLAY Request

Trong quá trình streaming video, nếu như người dùng muốn tạm dừng quá trình

streaming thì sẽ gửi yêu cầu PAUSE tới máy server, yêu cầu này sẽ làm tạm dừng một

hay nhiều luồng dữ liệu đang truyền các frame về máy client. Máy server sẽ tạm dừng

gửi các frame dữ liệu tới máy client.

Hình 6: PAUSE Request

Page 12: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

12

Trong quá trình streaming video, nếu như người dùng muốn dừng hẳn quá trình

streaming thì sẽ gửi yêu cầu TEARDOWN để dừng truyền và kết thúc một phiên giao dịch

của giao thức RTSP. Máy server sẽ đáp trả lại thông điệp xác nhận cho yêu cầu

TEARDOWN và sẽ dừng gửi các frame tới máy client.

Hình 7: TEARDOWN Request

2. Tách ảnh từ video và xử lí ảnh để phát hiện di chuyển dùng Opencv tích hợp

Visual studio

2.1. Giới thiệu

OpenCV là thư viện mở dùng cho xử lý ảnh trên máy tính (computer vision) có sẵn

trên trang http://SourceForge.net/projects/OpenCVlibrary. OpenCV được thiết kế để làm

cho việc tính toán trở nên thuận tiện hơn với các ứng dụng thời gian thực. Một trong

những mục tiêu của OpenCV là cung cấp một cấu trúc thị giác máy tính dễ sử dụng cho

người dùng để có thể xây dựng các ứng dụng xử lý ảnh tương đối phức tạp một cách

nhanh chóng. Thư viện OpenCV chứa hơn 500 hàm có thể ứng dụng trong nhiều lĩnh vực

như giám sát nhà máy, phân tích ảnh y khoa, an ninh và robotic. Do thị giác máy tính và

việc học máy ( machine learning) thường đi đôi với nhau nên OpenCV cũng kèm theo

thư viện học máy đầy đủ Machine Learning Library (MLL). Thư viện phụ này vào việc

nhận dạng ( recognition ) và việc xếp nhóm ( clustering).

2.2. Các thành phần chức năng của OpenCv

CXCORE : chứa các định nghĩa về các kiểu dữ liệu cơ sở. Ví dụ các cấu trúc dữ

liệu cho ảnh, điểm và hình chữ nhật được định nghĩa trong cxtypes.h. CXCORE

Page 13: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

13

cũng chứa các đại số tuyến tính ( linear algebra), phương pháp thống kê ( statistic

method), chức năng duy trì và điều khiển chuỗi. Một số ít các chức năng đồ họa để

vẽ trên ảnh cũng đặt ở đây.

CV : chứa các thuật toán về xử lý ảnh và định kích cỡ camera, các chức năng hình

họa máy tính (computational geometry function) cũng được đặt ở đây.

CVAUX : được mô tả trong tài liệu của OpenCv là chứa các mã đã lỗi thời và các

mã thử nghiệm. Tuy nhiên các giao diện đơn cho phần nhận diện khuôn mặt cũng

trong module này.

HIGHGUI và CVCAM được đặt trong cùng thư mục là "otherlibs"

HIGHGUI : chứa các giao diện vào ra cơ bản và các khả năng cửa sổ đa nền tảng.

CVCAM : chứa các giao diện cho video truy cập qua DirectX trên nền Windows

32 bits.

2.3. Cách thực hiện:

Lấy nguồn từ:

http://www.cedricve.me/2013/02/05/opencv-simple-motion-detection/

Phát hiện chuyển động là quá trình phát hiện một sự thay đổi trong vị trí của một đối

tượng liên quan đến môi trường xung quanh hay sự thay đổi trong môi trường xung

quanh liên quan đến một đối tượng. Phát hiện chuyển động có thể được thực hiện bằng cả

hai phương pháp cơ khí và điện tử. Khi phát hiện chuyển động được thực hiện bởi các

sinh vật tự nhiên, nó được gọi là nhận thức của chuyển động.

Chuyển động có thể được phát hiện bởi:

o Hồng ngoại (cảm biến thụ động và hoạt động)

o Quang học (video và máy ảnh hệ thống)

o Tần số vô tuyến năng lượng (radar, lò vi sóng và phát hiện chuyển động chụp cắt

lớp)

o Âm thanh (micro và cảm biến âm thanh)

o Rung động (điện ma sát, địa chấn, và quán tính-chuyển đổi cảm biến)

o Từ tính (cảm biến từ trường và từ kế)

Làm thế nào phát hiện chuyển động với hình ảnh?

Giả sử chúng ta có 2 hình ảnh, những hình ảnh là một dãy tuyến tính với một độ trễ c

giữa chúng. Nếu chúng ta so sánh mỗi điểm ảnh của 2 hình ảnh, và chúng ta nhận thấy

chúng đều như nhau, chúng ta có thể kết luận 2 hình ảnh giống hệt nhau. Nhưng nếu

không, chúng ta có thể nói rằng, có một cái gì đó đã xảy ra trong thời gian trễ . Ai đó có

Page 14: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

14

thể đặt một đối tượng ở phía trước của máy ảnh, hoặc đi ngang qua. Và có, đây là ý tưởng

sẽ được sử dụng để phát hiện chuyển động.

Phương pháp mà được mô tả, được gọi là "hình ảnh sai". Đó là kết quả của trừ đi 2 hình

ảnh.

Trong ví dụ này, chúng ta sẽ sử dụng 3 hình ảnh, chúng được gọi trước, hiện tại và tiếp

theo. Trước tiên chúng ta trừ những hình ảnh trước và hiện tại và sau đó là hình ảnh hiện

tại và tiếp theo. Sau này chúng tôi sẽ làm một hoạt động XOR hợp lý giữa các kết quả

của cả hai và ngưỡng kết quả cuối cùng để làm cho nó chỉ chính xác cho sự thay đổi lớn.

Sau khi lấy ngưỡng kết quả sẽ là như thế này, các chấm trắng chỉ ra những thay đổi. (Bạn

có thể thử nghiệm với hàm ngưỡng, để có được kết quả tốt hơn).

Tiếp theo chúng ta sẽ đặt một cửa sổ ở trung tâm của hình ảnh (kết quả lấy ngưỡng). Và

chúng ta sẽ tìm kiếm những thay đổi, điều này có nghĩa là xem xét cho các điểm ảnh với

giá trị lớn hơn không (điều này sẽ cho thấy chuyển động). Khi chuyển động được phát

hiện (một điểm ảnh có giá trị> 0) thì tìm kiếm sẽ dừng lại và hình ảnh sẽ được lưu lại.

absdiff(next_frame, current_frame, d1);

absdiff(current_frame, prev_frame, d2);

bitwise_xor(d1, d2, result);

..

threshold(result, result, 140, 255, CV_THRESH_BINARY);

Page 15: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

15

for(int i = middle_x-window; i < middle_x+window; i++)

for(int j = middle_y-window; j < middle_y+window; j++)

if(result.at<int>(j,i)>0)

{

movement = true;

break;

}

Page 16: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

16

C++ Code

#include <opencv2/opencv.hpp>

#include <iostream>

#include <time.h>

#include <dirent.h>

#include <sstream>

#include <dirent.h>

#include <sys/types.h>

#include <sys/stat.h>

using namespace std;

using namespace cv;

bool directoryExists( const char* pzPath )

{

if ( pzPath == NULL) return false;

DIR *pDir;

bool bExists = false;

pDir = opendir (pzPath);

if (pDir != NULL)

{

bExists = true;

(void) closedir (pDir);

}

return bExists;

}

bool saveImg(Mat image, const string DIRECTORY, const string EXTENSION,

const char * DIR_FORMAT, const char * FILE_FORMAT){

stringstream ss;

time_t seconds;

struct tm * timeinfo;

char TIME[80];

time (&seconds);

timeinfo = localtime (&seconds);

// convert dir...

strftime (TIME,80,DIR_FORMAT,timeinfo);

ss.str("");

ss << DIRECTORY << TIME;

if(!directoryExists(ss.str().c_str()))

mkdir(ss.str().c_str(), 0777);

// convert image name

strftime (TIME,80,FILE_FORMAT,timeinfo);

ss.str("");

ss << DIRECTORY << TIME << EXTENSION;

// save image

return imwrite(ss.str().c_str(), image);

}

int main (int argc, char * const argv[]){

// const

const string DIR = "/Users/cedric/Desktop/OpenCVTester/pics/";

const string EXT = ".jpg";

const int DELAY = 700; // mseconds

Page 17: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

17

// save image

return imwrite(ss.str().c_str(), image);

}

int main (int argc, char * const argv[]){

// const

const string DIR = "/Users/cedric/Desktop/OpenCVTester/pics/";

const string EXT = ".jpg";

const int DELAY = 700; // mseconds

string DIR_FORMAT = "%d%h%Y";

string FILE_FORMAT = DIR_FORMAT + "/" + "%d%h%Y_%H%M%S";

// create all necessary instances

CvCapture * camera = cvCaptureFromCAM(CV_CAP_ANY);

Mat original = cvQueryFrame(camera);

Mat next_frame = original;

Mat current_frame = cvQueryFrame(camera);

Mat prev_frame = cvQueryFrame(camera);

cvtColor(current_frame, current_frame, CV_RGB2GRAY);

cvtColor(prev_frame, prev_frame, CV_RGB2GRAY);

cvtColor(next_frame, next_frame, CV_RGB2GRAY);

Mat d1, d2, result;

int window = 200;

bool movement;

while (true){

movement = false;

absdiff(next_frame, current_frame, d1);

absdiff(current_frame, prev_frame, d2);

bitwise_xor(d1, d2, result);

int middle_y = result.rows/2;

int middle_x = result.cols/2;

// Center window

threshold(result, result, 140, 255, CV_THRESH_BINARY);

for(int i = middle_x-window; i < middle_x+window; i++)

for(int j = middle_y-window; j < middle_y+window; j++)

if(result.at<int>(j,i)>0)

{

movement = true;

break;

}

if(movement==true)

saveImg(original,DIR,EXT,DIR_FORMAT.c_str(),FILE_FORMAT.c_str());

imshow("Motion", result);

prev_frame = current_frame;

current_frame = next_frame;

// get image from webcam

next_frame = cvQueryFrame(camera);

cvtColor(next_frame, next_frame, CV_RGB2GRAY);

// semi delay and quit when press Q/q

Page 18: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

18

imshow("Motion", result);

prev_frame = current_frame;

current_frame = next_frame;

// get image from webcam

next_frame = cvQueryFrame(camera);

cvtColor(next_frame, next_frame, CV_RGB2GRAY);

// semi delay and quit when press Q/q

int key = cvWaitKey (DELAY);

if (key == 'q' || key == 'Q')

break;

}

return 0;

}

Page 19: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

19

KẾT LUẬN

Dưới sự giúp đỡ của thầy cùng với sự cố gắng của cả nhóm thì nhóm em đã đạt được một

số kết quả như sau :

truyền được video từ camera lên form của C#

Giao diện như sau:

Page 20: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

20

Phần code:

//Class WebCam.cs

- Chứa các hàm thực hiện chức năng chính:

+ Start() : Khởi động Camera

+Stop() : ngừng tạm thời hoạt động của Camera

+Continue() : tiếp tục quá trình hoạt động

+ResolutionSetting() : Định dạng cho camera

AdvanceSetting(): kiểm tra nguồn camera cũng như chỉnh các thong số lien quan

class WebCam { private WebCamCapture webcam; private System.Windows.Forms.PictureBox _FrameImage; private int FrameNumber = 30; public void InitializeWebCam(ref System.Windows.Forms.PictureBox ImageControl) { webcam = new WebCamCapture(); webcam.FrameNumber = ((ulong)(0ul)); webcam.TimeToCapture_milliseconds = FrameNumber; webcam.ImageCaptured += new WebCamCapture.WebCamEventHandler(webcam_ImageCaptured); _FrameImage = ImageControl;

Page 21: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

21

} void webcam_ImageCaptured(object source, WebcamEventArgs e) { _FrameImage.Image = e.WebCamImage; } public void Start() { webcam.TimeToCapture_milliseconds = FrameNumber; webcam.Start(0); } public void Stop() { webcam.Stop(); } public void Continue() { // change the capture time frame webcam.TimeToCapture_milliseconds = FrameNumber; // resume the video capture from the stop webcam.Start(this.webcam.FrameNumber); } public void ResolutionSetting() { webcam.Config(); } public void AdvanceSetting() { webcam.Config2(); } }

//Chương trình chính Form1.cs public partial class mainWinForm : Form { public mainWinForm() { InitializeComponent(); } WebCam webcam; private void mainWinForm_Load(object sender, EventArgs e) { webcam = new WebCam(); webcam.InitializeWebCam(ref imgVideo); } private void bntStart_Click(object sender, EventArgs e) { webcam.Start(); }

Page 22: Báo cáo đồ án 1

June 6, 2013 [BÁO CÁO ĐỒ ÁN 1]

22

private void bntStop_Click(object sender, EventArgs e) { webcam.Stop(); } private void bntContinue_Click(object sender, EventArgs e) { webcam.Continue(); } private void bntCapture_Click(object sender, EventArgs e) { imgCapture.Image = imgVideo.Image; } private void bntSave_Click(object sender, EventArgs e) { Helper.SaveImageCapture(imgCapture.InitialImage); } private void bntVideoFormat_Click(object sender, EventArgs e) { webcam.ResolutionSetting(); } private void bntVideoSource_Click(object sender, EventArgs e) { webcam.AdvanceSetting(); }

cả nhóm đã có những tìm hiểu nhất định về ffmpeg, opencv

củng cố thêm kiến thức của Visual stidio

tinh thần làm việc theo nhóm.

Xin cảm ơn thầy Phạm Văn Tiến và anh Nguyễn Văn Kiệm đã giúp đỡ chúng em rất

nhiều trong đồ án này.