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@
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
- 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
disable-ffplay \
disable-ffprobe \
disable-ffserver \
disable-avfilter \
disable-avdevice \
enable-network \
enable-protocol=tcp \
enable-protocol=udp \
enable-protocol=rtp \
enable-encoder=mpeg4 \
11
enable-muxer=rtsp \
enable-muxer=rtp \
enable-libx264 \
enable-encoder=libx264 \
enable-gpl \
enable-memalign-hack \
extra-cflags="-I$x264_path" \
extra-ldflags="-L$x264_path"
h@biên dịch
Thự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 java
nativecode(jni)của java.
7171785VLH=G8H8;=\f.85RJ=3k=>
Có nhiều phương pháp tiếp cận để phát hiện chuyển động trong hình ảnhvideo liên
tục. Có thể so sánh khung hìnhhiện tại với hình nền chúng ta chụp từban đầu khi
bật camera hoặc từ khunghì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ấtlợ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
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 đổi
giữ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ập
hợ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 d
tính từ điểm tựa “fulcrum” được mô tả như hình dưới đây:
15
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
Mỗ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ột
khung(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ểm
xung quanh trục y là:
My=m1*x1+m2*x2+…+mn*xn
Tính tương tự với trục x ta cũng có:
Mx=m1*y1+m2*y2+…+mn*yn
Tổng khối lượng của tất cả các điểm:
Msys=m1+m2+…+mn
16
Dựa vào phương trình M=F*d trong không gian 1 chiều có thể được tổng quát hóa
trong không gian 2 chiều như sau:
Ι() là cường độ sáng của pixel có tọa độ (x,y)
n là số pixel của hình cần tìm
Theo trên ta có:
x(tb)=My/Isys;y(tb)=Mx/Isys
Vì vậy ta cần tính 3 đại lương
My=I1*x1+I2*x2 +In*xn
Mx=I1*y1+I2*y2+ +In*yn
Isys=I1+I2+ +In
Với p=1,q=0,ta có:
m(1,0)=My
Với p=0,q=1,ta có:
m(0,1)=Mx
Isys=m(0,0)
có nghĩa là x(tb),y(tb) có thể được tính như sau:
x(tb)=m(1,0)/m(0,0)
y(tb)=m(0,1)/m(0,0)
Sử dụng thư viện Opencv ta có thể tính toán được các giá trị
m(0,0),m(0,1),m(1,0),từ đó dễ dàng tính được 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;
20
2.3. eRZf=>NLZ5/KIK\IKMN=>PZKLP"KIPKI
Để giải quyết vấn đề truyền tín hiệu video từ camera về server ở một 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á 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ặc
truyề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. eRZf=>NLZ5/KIf..M=8
Để 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ì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. 9A5B3C3DE.
3.1. C=>N ab/cB=83JaH.3j=83<DE=>Z.85RJ=
Đã 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. C=>N \IKMN=>PZKL
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
24