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.
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
KHOA ĐIỆN TỬ - VIỄN THÔNG
BÁO CÁO
THỰC TẬP TỐT NGHIỆP
Đề tài:
XÂY DỰNG HỆ THỐNG TỰ ĐỘNG GIÁM
SÁT ĐỐI TƯỢNG DI CHUYỂN DỰA VÀO KỸ
THUẬT XỬ LÝ TÍN HIỆU VIDEO
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
Trang 2Mục lục
1 Mở đầu 3
1.1 Khái niệm máy tính nhúng 4
2 Thiết kế hệ thống 9
2.1 Tổng quát chung 9
3 Tài liệu tham khảo 24
Trang 3Danh mục hình vẽ
Trang 41 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ầumộ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ựcnà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ềuphầ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ấuxoay, hoặc ít nhất có cơ cấu đế xoay thì cũng phải điều khiển quay bằng tay trêngiao 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ốnnhiều năng lượng Thay vì dùng máy tính thông thường ý tưởng của em là triểnkhai 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 khaingay 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ượnghơ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êntiế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ầnmề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àomà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ồngvideo 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ínhnă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
Trang 5diệ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ệncủ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 trongnhữ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ố đầuphát HD, HD player cũng được cài đặt hệ điều hành android
Trang 6Android đượ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ụngmộ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. Thư viện hỗ trợ lập trình,phát triển đa phương tiện FFmpeg
FFMPEG là một trong những thư viện mở, miễn phí, phổ biến, hữu ích quan trọngnhất liên quan đến vấn đề nén (compress), giải nén (decompress), xử lý và truyềnnhậ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ácthiế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âydựng để biên dịch bằng trình biên dịch gcc
Thư viện FFMPEG bao gồm:
Trang 7-avcodec: hỗ trợ các bộ nén/mã hóa và giải nén/giải mã cho video và audio
-avdevice: 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
-avfilter: tập hợp các thủ tục xử lý,chỉnh sửa,hiệu ứng trên video,audio
-avformat: 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 )
-swscale: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
CLI (Command line interface):
-FFPlay: một ứng dụng nhỏ nhằm play audio, video dùng để test các API của
ffmpeg
-FFMPEG: ứ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
-ffprobe: 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
-ffserver: 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. Thư viện xử lý ảnh Opencv
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ồmkhoả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
Trang 8
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à 2module 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ìnhhọ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ụngrộng rãi cho mục đích đó
- HIGHGUI và CVCAM được đặt trong cùng thư mục là “otherlibs” HIGHGUIchứ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ềnWindows 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:
Trang 9- OpenCV là công cụ chuyên dụng: Được Intel phát triển theo hướng tối ưu hóa chocá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 giaodiện, truy xuất thiết bị phần cứng được tích hợp sẵn OpenCV thích hợp để pháttriể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 BSDlicense), 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
Trang 10Yê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. Xây dựng thuật toán xử lý ảnh
2.2.1 Thu thập và phân tách luồng video
Một luồng video đã được mã hóa để giảm sự dư thừa về mặt không gian và thờigian 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ồngvideo thành các ảnh rời rạc
Biên dịch thư viện FFMPEG cho máy tính nhúng chạy hệ điều hành android: B1:download sourcecode ffmpeg từ website http://ffmpeg.org/releases
B2:Tạo file configure để cấu hình biên dịch cho thiết bị nhúng nhân là chip arm:
Trang 12Thực hiện lệnh “make”để biên dịch
Sau khi biên dịch xong mà không có lỗi gì ta sẽ nhận được đầu ra là các file thưviện .so và .a phục vụ cho việc lập trình trên android thông qua javanativecode(jni)của java
2.2.2 Thuật Toán phát hiện sự chuyển động
Có nhiều phương pháp tiếp cận để phát hiện chuyển động trong hình ảnh video liên tục Có thể so sánh khung hình hiện tại với hình nền chúng ta chụp từ ban đầu khi bật camera hoặc từ khung hình trước Đố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 một cách rất chậm thì hệ thống
Trang 13không phát hiện ra Nhưng có thể giải quyết bằng cách tăng số khung hình trêngiây Trong đề tài này giới thiệu theo phương pháp thứ hai
Giả sử rằng chúng ta có một bản gốc 24 bpp RGB là hình ảnh hiện tại (img1) vàkhung hình trước đó (img2), một bản sao màu xám của nó (gray_img1) và(gray_img2) Trước hết, chúng ta hãy tìm những khu vực nơi hai khung hình khácnhau bằng cách trừ từng pixel của 2 khung hình xám kia và so sánh với mộtngưỡng cho trước Tiếp đó, chúng ta sẽ nhận được một hình ảnh ở đầu ra (result)với các điểm ảnh màu trắng nơi mà những điểm ảnh của khung hiện tại khác vớikhung hình trước đó với một ngưỡng cho trước ở trên còn lại màu đen Ta có thểđếm các điểm ảnh màu được một hình ảnh ở đầu ra (result) với các điểm ảnh màutrắng nơi mà những điểm ảnh của khung hiện tại khác với khung hình trước đó vớimột ngưỡng cho trước ở trên còn lại màu đen Ta có thể đếm các điểm ảnh màutrắng và nếu số điểm ảnh của nó lớn hơn một mức độ báo động xác định trướcchú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
Trang 14
Hình 2-2 Thuật toán phát hiện đối tượng di chuyển
222222 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á trình trừ 2 frame liên tiếp nhau trong 1luồng video
Trang 15Hình 2-4 Kết quả trừ các frame liên tiếp và lấy ngưỡng
Hình bên trái thể hiện ảnh xám của frame hiện tại.Hình bên phải thể hiện kết quảcủa phép trừ frame hiện tại với frame trước nó.Vùng sáng hình bên phải thể hiện sựthay đổi giữa hai ảnh,trong khi đó vùng tối thể hiện các điểm ảnh không thay đổigiữa hai frame
Việc xác định tâm vùng chuyển động được tính toán thông qua moment của tậphợp các điểm sáng
Trong vật lý học,moment M thể hiện sự tác động của một lực F ở khoảng cách dtính từ điểm tựa “fulcrum” được mô tả như hình dưới đây:
Hinh 2-5 Lực tác động ở khoảng cách từ Fulcrum
Phương trình moment M=F*d
Khái niệm này có thể được tổng quát theo nhiều chiều khác nhau.Ví dụ,thay vì sử dụng cho tác động của lực nó thường có khuynh hướng nói về khối lượng dẫn tới trọng lực không cần được xem xét.Ngoài ra phương trình moment có thể được mở rộng cho nhiều chiều bao gồm cả không gian và khối lượng
Trang 16Mỗi điểm có một khối lượng (m1,m2, ,mn)và tọa độ ((x1,y1),(x2,y2),…,(xn,yn)).Nếu chúng ta tưởng tượng rằng các điểm liên kết với nhau bởi mộtkhung(gồm trục x và trục y)không trọng lượng.Khi đó moment của chúng có thểđược tính liên quan đến từng trục.
Ta xem xét trục y trước.Mỗi điểm sẽ có một moment bằng với khối lượng của điểm
đó nhân với khoảng cách từ điểm đó đến trục.Tổng moment của tất cả các điểmxung quanh trục y là:
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 tatính toán moment cho các đối tượng thật.Trong xử lý ảnh,người ta ta thường tậptrung 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 đặctính của pixel đó là cường độ sáng(0-255 cho ảnh mức xám,0-1 cho ảnh nhị phân)Giả sử mỗi pixel có 1 cường độ sáng(I1,I2, ,In) và tọa độ (x,y) tương ứng((x1,y1),(x2,y2), ,(xn,yn)) như hình bên dưới
Trang 17Hình 2-6 Không gian 2 chiều các điểm ảnh
Tổng moment các điểm ảnh quanh trục y được tính như sau:
Điểm có tọa độ(x(tb),y(tb)) là tâm của vùng cần tìm
Moment trong Opencv:
Opencv tính toán các loại moment khác nhau sử dụng phương trình
Trang 18CvMoments* moment=new CvMoments();
Trang 20
Hình 2-7 Thuật toán quay camera
Trang 212.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 về server ở một khoảng cáchxa,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ựccanh 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ấtlượ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á trình nén chuỗi video số thành chuỗi bit với
số lượng bit cần thiết nhỏ hơn Một chuỗi video thô, chưa nén yêu cầu một sốlượng bit rất lớn (cỡ 250 Mbps) Do đó việc nén 1 video số trước khi lưu trữ hoặctruyền đi là cần thiết Nén dữ liệu được thực hiện nhờ loại bỏ các thông tin dư thừa,các thành phần không thực sự cần thiết cho việc tái tạo lại dữ liệu
2.4. Xây dựng module trực canh
Để hệ thống kịp thời thông báo cho người trực khi có tình huống xấu xảy ra tác vụtrực 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ìnhvideo 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ầuphát ra một tín hiệu(còi,loa) để thông báo cho người trực xem video.Khi đó luồngvideo 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ínhnhúng
3 Kết quả đạt được
3.1. Hạng mục xử lý ảnh để xác đị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ìncủ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ầmquan sát
Trang 223.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óaMPEG-4 hoặc H264, chất lượng video khá tốt.tuy nhiên khi camera bắt đầu thựchiện tác vụ quay thì video vẫn còn bị đứng hình một thời gian
222222 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
222222 Thu thập tín hiệu phát hiện di chuyển từ các sensor
Thông qua giao tiếp uart với vi điều khiển,phần mền đã lấy được các bản 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
Hình 3-1 Nút cảm biến hồng ngoại
Trang 23Hì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 đốitượng di chuyển, đồng thời nhận tín hiệu từ các node sensor sau đó gửi lên để máytính nhúng xử lý
- Điều chỉnh lại thuật toán quay camera vì nhiều trường hợp quay chưa theo ýmuốn