1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

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

22 1,2K 7

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 788,66 KB

Nội dung

Đồ án theo dõi đối tượng di chuyển bằng camera 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 tách video thành các frame ảnh, sử dụng thư viện FFMPEG sử dụng các hàm trong OpenCV để xác định đối tượng di chuyển điều khiển camera theo đối tượng di chuyển

Trang 1

Hà Nội, 5/2013

Trang 2

2

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

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

Hà Nội, 5/2013

Trang 3

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

Trang 4

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

Trang 5

5

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

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

Trang 6

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)

Trang 7

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

Trang 8

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

Trang 9

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

Trang 10

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

Trang 11

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

Trang 12

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

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

Trang 13

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

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ó

Trang 14

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

Trang 15

15

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

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

Trang 16

bool bExists = false;

pDir = opendir (pzPath);

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

const char * DIR_FORMAT, const char * FILE_FORMAT){

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

const string EXT = ".jpg";

const int DELAY = 700; // mseconds

Trang 17

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

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

Trang 18

// semi delay and quit when press Q/q

int key = cvWaitKey (DELAY);

Trang 19

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:

Trang 20

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;

Trang 21

// resume the video capture from the stop

webcam.Start( this webcam.FrameNumber);

webcam = new WebCam ();

webcam.InitializeWebCam( ref imgVideo);

Trang 22

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

Ngày đăng: 16/06/2014, 00:18

HÌNH ẢNH LIÊN QUAN

Hình 1. Streaming video - Đồ án theo dõi đối tượng di chuyển bằng camera
Hình 1. Streaming video (Trang 7)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w