Đồ á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 1Hà Nội, 5/2013
Trang 22
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 33
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 44
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 55
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 6và 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 77
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 88
- 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 99
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 1010
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 1111
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 1212
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 1313
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 1414
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 1515
for(int i = middle_x-window; i < middle_x+window; i++)
for(int j = middle_y-window; j < middle_y+window; j++)
Trang 16bool 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 1919
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 2020
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