1. Mở đầu Hiện nay các khu vực bảo tồn động vật,thực vật gồm một số động thực vật quý cần được bảo vệ. Ở đây thường xảy ra các vụ trộm cắp động thực vật do vậy yêu cầu một hệ thống phát hiện,theo dõi và cảnh báo khi đối tượng xâm nhập vào khu vực này dựa vào việc xử lý tín hiệu video được gửi về từ camera. Hiện tại đã có nhiều phần mềm theo dõi, giám sát được sử dụng rộng rãi cho các hệ thống giám sát và an ninh,tuy nhiên hầu hết họ chỉ sử dụng các loại camera cố định không có cơ cấu xoay, hoặc ít nhất có cơ cấu đế xoay thì cũng phải điều khiển quay bằng tay trên giao diện. Một phần nữa là các phần mền chủ yếu được cài lên máy tính chạy hệ điều hành window hay linux vì vậy chỉ triển khai được ở trong nhà và tiêu tốn nhiều năng lượng. Thay vì dùng máy tính thông thường ý tưởng của em là triển khai xây dựng một phần mềm trên máy tính nhúng vừa nhỏ gọn, dễ dàng triển khai ngay cả trong nhà hay ngoài trời,và một phần quan trọng là tiêu tốn ít năng lượng hơn so với máy tính thông thường. Những thiết bị này có thể chạy nhiều ngày liên tiếp vì vậy sẽ đảm bảo việc giám sát được thực hiện liên tục.Sau khi phát hiện có đối tượng nào đó xâm nhập ngoài việc điều khiển camera bám theo đối tượng phần mền còn gửi bản tin cảnh báo về trung tâm để báo cho người trực canh theo dõi vào màn hình hiển thị. Trong khuôn khổ đề tài này,em đi sâu vào việc nghiên cứu và xây dựng phần mềm sử dụng các thuật toán để phân tích,phát hiện đối tượng di chuyển trong một luồng video dựa trên thư viện opencv được biên dịch và cài đặt trên máy tính nhúng chạy hệ điều hành android. Em rất cảm ơn sự hướng dẫn,chỉ bảo nhiệt tình và đặc biệt là sự hỗ trợ thiết bị của TS. Phạm Văn Tiến đã giúp em hoàn thành đề tài này. 1.1. Khái niệm máy tính nhúng Thiết bị phần cứng được dùng trong hệ thống này là kit SBC-8530 với các tính năng sau: CPU DM3730 32bit,1Ghz là một bộ xử lý được tích hợp nhân Cotex-A8 đồng thời có chip chuyên xử lý số (DSP) chạy ở tốc độ 800Mhz với tính năng xử lý tín hiệu số tốc độ cao phù hợp cho các ứng dụng đa phương tiện. Kit hỗ trợ đầy đủ các giao diện như màn hình hiển thị S-VIDEO, USB, Audio input/output, Ethenet, wifi, Touch Screen, UART, SPI, Camera... Hình 1-1 Sơ đồ khối của Kit SBC-8530 Máy tính nhúng có thể chạy được các hệ điều hành linux 2.6.32,WINCE và Android 2.2. Hệ điều hành có thể được boot từ bộ nhớ Nand flash (512Mbytes) hoặc từ TF card. Để nhằm mục đích phát huy tối đa khả năng xử lý đa phương tiện của máy tính nhúng, em đã cài hệ điều hành Android lên kit. Android là hệ diều hành phát triển chủ yếu trên các thiết bị di động, tuy nhiên trong những năm gần đây các thiết bị nhúng khác như: máy tính nhúng arm, một số đầu phát HD, HD player cũng được cài đặt hệ điều hành android.
1 TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI BÁO CÁO ! " #$%&'( %)*+%, Sinh viên thực hiện: NGUYỄN VĂN KIỆM Lớp ĐT1-K53 Giảng viên hướng dẫn: TS.PHẠM VĂN TIẾN ! / 01!23451111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111116 1.1. Khái niệm máy tính nhúng 4 1.2. Thư viện hỗ trợ lập trình,phát triển đa phương tiện FFmpeg 6 1.3. Thư viện xử lý ảnh Opencv 7 7189:98;8<=>1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111? 2.1. Tổng quát chung 9 2.2. Xây dựng thuật toán xử lý ảnh 10 2.2.1 Thu thập và phân tách luồng video 10 2.2.2 Thuật Toán phát hiện sự chuyển động 12 2.2.3 Thuật toán bám theo đối tượng 14 2.3. Xây dựng module restreaming video về Server 21 2.4. Xây dựng module trực canh 21 @19A5B3C3DE.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111177 3.1. Hạng mục xử lý ảnh để xác định đối tượng di chuyển 22 3.2. Hạng mục streaming video 22 3.2.1 Hạng mục trực canh 22 3.2.2 Thu thập tín hiệu phát hiện di chuyển từ các sensor 22 61DF=>G8HIJ=9G8KL111111111111111111111111111111111111111111111111111111111111111111111117@ /;58MN:8BL11111111111111111111111111111111111111111111111111111111111111111111111111111111111111176 2 M=8N 8O=8PQ 3 1. !2345 Hiện nay các khu vực bảo tồn động vật,thực vật gồm một số động thực vật quý cần được bảo vệ. Ở đây thường xảy ra các vụ trộm cắp động thực vật do vậy yêu cầu một hệ thống phát hiện,theo dõi và cảnh báo khi đối tượng xâm nhập vào khu vực này dựa vào việc xử lý tín hiệu video được gửi về từ camera. Hiện tại đã có nhiều phần mềm theo dõi, giám sát được sử dụng rộng rãi cho các hệ thống giám sát và an ninh,tuy nhiên hầu hết họ chỉ sử dụng các loại camera cố định không có cơ cấu xoay, hoặc ít nhất có cơ cấu đế xoay thì cũng phải điều khiển quay bằng tay trên giao diện. Một phần nữa là các phần mền chủ yếu được cài lên máy tính chạy hệ điều hành window hay linux vì vậy chỉ triển khai được ở trong nhà và tiêu tốn nhiều năng lượng. Thay vì dùng máy tính thông thường ý tưởng của em là triển khai xây dựng một phần mềm trên máy tính nhúng vừa nhỏ gọn, dễ dàng triển khai ngay cả trong nhà hay ngoài trời,và một phần quan trọng là tiêu tốn ít năng lượng hơn so với máy tính thông thường. Những thiết bị này có thể chạy nhiều ngày liên tiếp vì vậy sẽ đảm bảo việc giám sát được thực hiện liên tục.Sau khi phát hiện có đối tượng nào đó xâm nhập ngoài việc điều khiển camera bám theo đối tượng phần mền còn gửi bản tin cảnh báo về trung tâm để báo cho người trực canh theo dõi vào màn hình hiển thị. Trong khuôn khổ đề tài này,em đi sâu vào việc nghiên cứu và xây dựng phần mềm sử dụng các thuật toán để phân tích,phát hiện đối tượng di chuyển trong một luồng video dựa trên thư viện opencv được biên dịch và cài đặt trên máy tính nhúng chạy hệ điều hành android. Em rất cảm ơn sự hướng dẫn,chỉ bảo nhiệt tình và đặc biệt là sự hỗ trợ thiết bị của TS. Phạm Văn Tiến đã giúp em hoàn thành đề tài này. 1.1. 8H=;NNHRS=8=8T=> Thiết bị phần cứng được dùng trong hệ thống này là kit SBC-8530 với các tính năng sau: CPU DM3730 32bit,1Ghz là một bộ xử lý được tích hợp nhân Cotex-A8 đồng thời có chip chuyên xử lý số (DSP) chạy ở tốc độ 800Mhz với tính năng xử lý tín hiệu số tốc độ cao phù hợp cho các ứng dụng đa phương tiện. Kit hỗ trợ đầy đủ các giao 4 diện như màn hình hiển thị S-VIDEO, USB, Audio input/output, Ethenet, wifi, Touch Screen, UART, SPI, Camera Hình 1-1 Sơ đồ khối của Kit SBC-8530 Máy tính nhúng có thể chạy được các hệ điều hành linux 2.6.32,WINCE và Android 2.2. Hệ điều hành có thể được boot từ bộ nhớ Nand flash (512Mbytes) hoặc từ TF card. Để nhằm mục đích phát huy tối đa khả năng xử lý đa phương tiện của máy tính nhúng, em đã cài hệ điều hành Android lên kit. Android là hệ diều hành phát triển chủ yếu trên các thiết bị di động, tuy nhiên trong những năm gần đây các thiết bị nhúng khác như: máy tính nhúng arm, một số đầu phát HD, HD player cũng được cài đặt hệ điều hành android. 5 Android được phát triển bởi Google và dựa trên nền tảng linux.Hơn nữa nó sử dụng một máy ảo tùy chỉnh được thiết kế để tối ưu hóa bộ nhớ và tài nguyên phần cứng. Hình 1-2 Cấu trúc tổng quát của một hệ điều hành android 1.2. 8DP;=8UIE/VGIO=8WG8HIJ=3MG8DX=>;=YYNGK> FFMPEG là một trong những thư viện mở, miễn phí, phổ biến, hữu ích quan trọng nhất liên quan đến vấn đề nén (compress), giải nén (decompress), xử lý và truyền nhận video, audio hiện nay. FFMPEG được đánh giá cao bởi tốc độ, khả năng hỗ trợ đa môi trường từ window, linux (android) tới mac, từ máy bàn mạnh mẽ tới các thiết bị nhúng yếu ớt. Ngoài ra sự uyển chyển trong cấu trúc dễ dàng mở rộng và hỗ trợ đa dạng khiến nó trở nên đáp ứng hầu như mọi nhu cầu của nhà phát triển. Được viết bằng C dựa theo chuẩn ISO C90 và vài cú pháp của ISO C99. Được xây dựng để biên dịch bằng trình biên dịch gcc Thư viện FFMPEG bao gồm: 6 MP.LZK.: hỗ trợ các bộ nén/mã hóa và giải nén/giải mã cho video và audio MPZKP.K: tạo nền giao tiếp với các thiết bị,trình quản lý thiết bị nhập xuất video,audio. MP[/KI: tập hợp các thủ tục xử lý,chỉnh sửa,hiệu ứng trên video,audio MP[LINM: quản lý các định dạng nhập xuất,cấu trúc file(avi,mpeg, ) giao thức truyền nhận audio,video(http,rtsp ) \]\.M/K:d ùng cho việc thay đổi tỷ lệ,co giãn kích cỡ,chuyển đổi định dạng điểm ảnh,không gian )^LNNM=Z/=K=KI[M.K_ YY/MR: một ứng dụng nhỏ nhằm play audio, video dùng để test các API của ffmpeg. YY!,: ứng dụng có khả năng đọc audio, video từ nhiều nguồn khác nhau, thực hiện xử lý, chuyển đổi, chỉnh sửa và xuất ra các kiểu định dạng khác nhau, phương thức khác nhau. [[GIL`K: một ứng dụng có khả năng đọc, thu thập thông tin mô tả cả các nguồn đa phương tiện khác nhau và xuất báo cáo một cách trực quan cho người dùng. [[\KIPKI: có khả năng làm một máy chủ dịch vụ để stream video / audio dưới các giao thức như RTP/RTSP/HTTP. 1.3. 8DP;=ab/cB=8GK=.P OpenCV (Open Computer Vision library) do Intel phát triển, được giới thiệu năm 1999 và hoàn thiện thành phiên bản 1.0 năm 2006. Thư viện OpenCV - gồm khoảng 500 hàm – được viết bằng ngôn ngữ lập trình C và tương thích với các hệ điều hành Windows, Linux, Mac OS đóng vai trò xác lập chuẩn giao tiếp, dữ liệu, thuật toán cho lĩnh vực CV và tạo điều kiện cho mọi người tham gia nghiên cứu và phát triển ứng dụng. 7 Hình 1-3 Tổ chức thư viên Opencv Tổ chức thư viện OpenCV khá đơn giản (xem Hình), bao gồm 4 module chính và 2 module mở rộng: - CXCORE chứa các định nghĩa 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 cũng chứa đại số tuyến tính và phương pháp thống kê, 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 được đặ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 cũng được đặt ở đây. - CVAUX được mô tả trong tài liệu của OpenCV như chứa các mã cũ và thứ nghiệm. Tuy nhiên, các giao diện đơn cho sự nhận diện ảnh ở trong module này. Code sau này chúng được chuyên dụng cho nhận diện mặt và chúng được ứng dụng rộng rãi cho mục đích đó. - 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, nó cũng chứa các khả năng cửa sổ mở rộng và vào ra video. CVCAM chứa các giao diện cho video truy cập qua DirectX trên nền Windows 32 bits OpenCV là công cụ hữu ích cho những người bước đầu làm quen với xử lý ảnh số vì các ưu điểm sau: 8 - OpenCV là công cụ chuyên dụng: Được Intel phát triển theo hướng tối ưu hóa cho các ứng dụng xử lí và phân tích ảnh, với cấu trúc dữ liệu hợp lý, thư viện tạo giao diện, truy xuất thiết bị phần cứng được tích hợp sẵn. OpenCV thích hợp để phát triển nhanh ứng dụng. - OpenCV là công cụ mã nguồn mở: Không chỉ là công cụ miễn phí (với BSD license), việc được xây dựng trên mã nguồn mở giúp OpenCV trở thành công cụ thích hợp cho nghiên cứu và phát triển, với khả năng thay đổi và mở rộng các mô hình, thuật toán. 2. 89:98;8<=> 2.1. d=>A5H.85=> Mô hình hệ thống Hinh 2-1 Mô hình hoạt động hệ thống 9 Yêu cầu hệ thống: -Phân tích và xử lý ảnh, điều khiển camera bám theo chuyển động -Tương tác 2 chiều với thiết bị camera -Có thể giao tiếp hai chiều với các cảm biến cảnh báo chuyển động. -Có khả năng hiển thị hình ảnh, phát tín hiệu cảnh báo nhân viên (còi hú, đèn …) -Có giao diện người dùng, dễ dàng tương tác và điểu khiển -Giao tiếp với mạng internet liên kết với server 2.2. eRZf=>85VLH=ab/cB=8 71710858VGPG8e=H.8/5g=>PZKL Một luồng video đã được mã hóa để giảm sự dư thừa về mặt không gian và thời gian vì vậy các frame liên tiếp có sự ràng buộc và phụ thuộc lẫn nhau. Với sự hỗ trợ mạnh mẽ của thư viện FFMPEG trong việc giải mã(decompress) một luồng video thành các ảnh rời rạc hi=Zj.88DP;=YY!,.8LNHRS=8=8T=>.8CR8;358=8M=ZILZ h0download sourcecode ffmpeg từ website http://ffmpeg.org/releases h7Tạo file configure để cấu hình biên dịch cho thiết bị nhúng nhân là chip arm: ./configure \ disable-everything \ arch=arm5te \ enable-neon \ target-os=linux \ cross-prefix=arm-linux-androideabi- \ extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated" \ 10 [...]... định đối tượng di chuyển Đã xác định được tâm của đối tượng di chuyển khi đối tượng này đi vào tầm nhìn của camera Xử lý và gửi bản tin yêu cầu quay camera khi đối tượng vượt khỏi tầm quan sát 3.2 Hạng mục streaming video Khi có tín hiệu yêu cầu xem video, phần mền trên máy tính nhúng đã streaming được video về server Luồng video ở đây là luồng RTSP với video được mã hóa MPEG-4 hoặc H264, chất lượng video. .. nếu số điểm ảnh của nó lớn hơn một mức độ báo động xác định trước chúng ta có thể báo hiệu về một sự kiện chuyển động Lưu đồ thuật toán được thể hiện ở hình 13 Hình 2-2 Thuật toán phát hiện đối tượng di chuyển 2.2.3 Thuật toán bám theo đối tượng Trước khi nói về thuật toán bám theo đối tượng em xin đề cập đến vấn đề là như thế nào để lấy được tâm vùng chuyển động Hình dưới đây thể hiện kết quả của quá... canh là thực sự cần thiết.Người dùng không phải luôn luôn nhìn vào màn hình video mà chỉ khi nào hệ thống phát hiện có đối tượng xâm nhập thì mới yêu cầu phát ra một tín hiệu( còi,loa) để thông báo cho người trực xem video. Khi đó luồng video mới được nén và truyền về server Phần mềm xem video trên server phải liên tục cập nhật tín hiệu gửi về từ máy tính nhúng 21 3 Kết quả đạt được 3.1 Hạng mục xử lý ảnh... khoảng cách xa ,hệ thống được thiết kế yêu cầu máy tính nhúng không chỉ có nhiệm vụ xử lý phát hiện chuyển động mà còn phải streaming video từ camera về máy tính trực canh khi có tín hiệu yêu cầu.Để giảm thiểu tiêu tốn băng thông và cải thiện chất lượng cũng như tốc độ truyền video ,tín hiệu video máy tính nhúng thu thập từ camera được mã hóa thành luồng MPEG-4 hoặc H264 Nén video (hay mã hóa video) là quá... hóa MPEG-4 hoặc H264, chất lượng video khá tốt. tuy nhiên khi camera bắt đầu thực hiện tác vụ quay thì video vẫn còn bị đứng hình một thời gian 3.2.1 Hạng mục trực canh Video về server và view được trên giao di n khi có sự kiện đối tượng di chuyển, đồng thời tín hiệu báo hiệu( còi,loa) cũng được bật để thông báo cho người trực 3.2.2 Thu thập tín hiệu phát hiện di chuyển từ các sensor Thông qua giao tiếp... tin báo hiệu từ các node sensor cảm biến hồng ngoại,mini rada qua mạng không dây zigbee 22 Hình 3-1 Nút cảm biến hồng ngoại Hình:Bản tin báo về từ sensor nhận được trên máy tính nhúng khi có đối tượng di chuyển 4 Hướng phát triển tiếp theo - Phát triển và hoàn thiện mạch điều khiển động cơ quay webcam bám theo đối tượng di chuyển, đồng thời nhận tín hiệu từ các node sensor sau đó gửi lên để máy tính... Đối với phương pháp thứ nhất thì đơn giản và giảm được việc xử lý Tuy nhiên, cách tiếp cận có một bất lợi lớn - điều gì sẽ xảy ra, ví dụ nếu có một đối tượng đang di chuyển ở frame đầu tiên, nhưng sau đó nó đã biến mất.Phương pháp thứ hai thì xử lý phức tạp hơn, xử lý nhiều hơn nhưng lại thích nghi với mọi môi trường, kể cả môi trường ít thay đổi hoặc thay đổi nhiều Nhược điểm là nếu đối tượng di chuyển. .. xác định được tâm đối tượng di chuyển (x(tb), y(tb)) = (COGpoint.x, COGpoint.y) Nếu tâm này nằm ngoài điểm ảnh mà định nghĩa trước là điểm min và max thì điều khiển camera quay sang trái hoặc phải tùy vào là vượt điểm max hoặc min Lưu đồ thuật toán thể hiện như hình: Hình 2-7 Thuật toán quay camera 20 2.3 Xây dựng module restreaming video về Server Để giải quyết vấn đề truyền tín hiệu video từ camera... tọa độ (x(tb),y(tb)) là tâm vùng chuyển động, dưới đây là một đoạn code thực hiện nhiệm vụ này: cvAbsDiff(buf[idx1], buf[idx2],diffImg ); cvThreshold(diffImg,diffImg,LOW_THRESHOLD,255,CV_THRESH_BINARY) 18 cvEqualizeHist(diffImg,diffImg); int numberpixel=cvCountNonZero(diffImg); if(diffImg==0) if(numberpixel>MIN_PIXELS) { CvMoments* moment=new CvMoments(); cvMoments(diffImg,moment,1); double m00 =moment->m00;... lực.Tương ứng với các phương trình trên ta tính được x(tb)= và y(tb)= Liên hệ từ điểm tới pixels: Việc sử dụng khối lượng trong phương trình moment chỉ thực hiện khi chúng ta tính toán moment cho các đối tượng thật.Trong xử lý ảnh,người ta ta thường tập trung vào các pixel hơn và thành phần khối lượng có thể được thay thế bởi một đặc tính của pixel đó là cường độ sáng(0-255 cho ảnh mức xám,0-1 cho ảnh nhị