Tải bản đầy đủ (.pdf) (22 trang)

Đồ án theo dõi đối tượng di chuyển bằng camera

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (788.66 KB, 22 trang )

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
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

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







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.







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

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)
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.
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

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.


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
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
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 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
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ừ:

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ó
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);

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;
}

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

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
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;
}

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:

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;
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();
}
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.

×