Nhằm góp phần nângcao chất lượng hệ thống giám sát, tôi đã quyết định nghiên cứu xây dựng đồ án tốt nghiệp với đề tài: Xây dựng phần mềm giám sát và cảnh báo dựa trên kỹ thuật phát hiện
Trang 1Mục lục
Chương 1: Giới thiệu bài toán 4
1.1 Giới thiệu bài toán Xây dựng phần mềm giám sát và cảnh báo 4
1.1.1 Nội dung 4
1.1.2 Mục đích 4
1.1.3 Chức năng 5
1.2 Giải pháp và mô hình 5
1.2.1 Khảo sát các hệ thống giám sát hiện có 5
1.2.2 Mô hình bài toán 7
Chương 2: Kỹ thuật và công nghệ 9
2.1 Công nghệ Java 9
2.1.1 Giới thiệu về công nghệ Java 9
2.1.2 Ưu điểm , nhược điểm của Java 9
2.1.3 Những hỗ trợ của Java 10
2.1.4 Công nghệ Java trong lập trình điện thoại di động (J2ME) 11
2.1.5 Lý do sử dụng Java để xây dựng đồ án 12
2.2 Thuật toán phát hiện chuyển động 12
2.2.1 Mô tả thuật toán 12
2.2.2 Biểu diễn thuật toán 13
2.2.3 Đánh giá thuật toán 15
2.2.4 So sánh với các thuật toán khác 16
2.3 Thuật toán nâng cao (áp dụng cho vùng phát hiện) 17
Chương 3: Thiết kế chương trình 20
3.1 Các module của chương trình 20
3.2 Cài đặt chương trình 21
3.2.1 Cài đặt thuật toán phát hiện chuyển động 21
3.2.2 Mô hình các luồng xử lý 30
3.2.3 Cài đặt luồng xử lý dữ liệu 32
3.2.4 Cài đặt luồng xử lý Server 33
3.2.5 Cài đặt luồng xử lý kết nối giữa Server – Mobile 36
3.2.6 Cài đặt luồng xử lý chạy trên điện thoại di động 37
Trang 23.2.7 Cài đặt lớp ghi dữ liệu 41
3.2.8 Cài đặt lớp hiển thị dữ liệu 42
Chương 4: Thử nghiệm và đánh giá 43
4.1 Giao diện chương trình 43
4.2 Thử nghiệm chương trình 47
4.3 Đánh giá kết quả 49
4.3.1 Đánh giá về chức năng 49
4.3.2 Đánh giá tính logic 49
4.3.3 Đánh giá hiệu năng 50
Chương 5: Kết luận và hướng phát triển 51
5.1 Kết luận 51
5.2 Hướng phát triển 51
5.2.1 Bổ xung tính năng, thuật toán nâng cao 51
5.2.2 Công cụ thiết kế 52
5.2.3 Hướng cảnh bảo khác 52
Tài liệu tham khảo 53
Trang 3Lời nói đầu
Ngày nay với sự phát triển vượt bậc của các ngành khoa học kỹ thuật nói chung
và ngành công nghệ thông tin nói riêng, cuộc sống của con người đã chuyển sang mộtthời đại mới - thời đại công nghệ hóa Với việc ứng dụng khoa học công nghệ vào đờisống xã hội, đời sống con người đang dần được cải thiện và nâng cao một cách đáng kể
Trong việc giám sát an ninh, trước kia, chúng ta phải bố trí nhân lực để giám sáttrực tiếp Thế nhưng ngày nay, công việc an ninh đã được công nghệ hóa, giảm bớt đòihỏi về nhân lực Con người được thay thế bằng các hệ thống camera giám sát đặt tạinhững vị trí chỉ định để liên tục thu hình và gửi về hệ thống máy chủ cho người giám sáttheo dõi Nhờ vậy mà không cần phải bố trí nhiều nhân lực tại nhiều địa điểm để giámsát mà bất cứ nơi đâu, bất cứ lúc nào người ta cũng có thể theo dõi được qua hệ thốngcamera của mình Hệ thống giúp cho những nhà quản lý vừa kiểm soát công việc mộtcách chặt chẽ hơn, vừa tiết kiệm được chi phí thuê nhân công bảo vệ, mà lại làm chohình ảnh của doanh nghiệp, cá nhân được chuyên nghiệp, hiện đại hơn Nếu có bất kỳ sự
cố nào xảy ra, hệ thống camera an ninh sẽ ghi lại, từ đó làm tư liệu bằng chứng để tìm rađược nguyên nhân và khắc phục hậu quả vấn đề Hệ thống còn giúp tăng cường công tácbảo mật, an toàn – an ninh, phòng chống sự xâm nhập bất hợp pháp của kẻ gian
Tuy nhiên, hệ thống camera giám sát hiện nay còn tồn tại một số nhược điểm như:
hệ thống tuy đã thực hiện giám sát nhưng chưa có chức năng tự động cảnh báo chongười giám sát Bởi vậy, người giám sát vẫn luôn phải theo dõi màn hình hệ thống24/24h để phát hiện và chủ động tránh các rủi ro có thể xảy đến Nhằm góp phần nângcao chất lượng hệ thống giám sát, tôi đã quyết định nghiên cứu xây dựng đồ án tốt
nghiệp với đề tài: Xây dựng phần mềm giám sát và cảnh báo dựa trên kỹ thuật phát hiện chuyển động Trong quá trình nghiên cứu và phát triển tôi đã nhận được sự giúp đỡ
và hướng dẫn tận tình của Thầy Phạm Quang Hòa Thầy đã cho tôi những gợi ý cũng
như những ý kiến vô cùng quan trọng, giúp tôi có thể vượt qua các khó khăn trong quátrình nghiên cứu và xây dựng nên được phần mềm này
Tôi rất mong đề tài này sẽ được đón nhận và có những ý kiến đóng góp để pháttriển và hoàn thiện hơn nữa sản phẩm phần mềm này và hi vọng một ngày không xa, sảnphẩm phần mềm này sẽ được ứng dụng rộng rãi trong đời sống hằng ngày của chúng ta
Trang 4Chương 1: Giới thiệu bài toán
1.1 Giới thiệu bài toán Xây dựng phần mềm giám sát và cảnh báo
1.1.1 Nội dung
Bài toán xuất phát từ nhu cầu thực tế như: giải quyết các vấn đề còn tồn đọng của
hệ thống giám sát hiện tại và góp phần nâng cao chất lượng hệ thống camera giám sát,
bổ sung thêm chức năng cảnh báo cho hệ thống giám sát, giải phóng sức lao động chongười chịu trách nhiệm giám sát hệ thống, chuyển tín hiệu cảnh báo đến các thiết bị diđộng của người giám sát
Xây dựng phần mềm dựa trên kỹ thuật phát hiện chuyển động Qua kỹ thuật này,phần mềm sẽ xử lý dữ liệu để kiểm tra có sự chuyển động xảy ra hay không Khi có sựchuyển động xảy ra, phần mềm sẽ cảnh báo cho người giám sát biết
Phần mềm được xây dựng với hai nội dung chính là giám sát và cảnh báo
- Giám sát: phần mềm sẽ giám sát trong một vùng xác định để xác định có sựchuyển động xảy ra hay không trong vùng đó
- Cảnh báo: mỗi khi phần mềm xác định được là có sự chuyển động xảy ra trongvùng giám sát, phần mềm sẽ cảnh báo cho người giám sát qua hai hình thức làcảnh báo qua loa và cảnh báo qua điện thoại di động Đồng thời phần mềm sẽ ghihình chuyển động lại vào trong bộ nhớ để làm tư liệu cho người giám sát
1.1.2 Mục đích
- Xây dựng phần mềm với giao diện đơn giản, dễ dàng sử dụng và cài đặt chươngtrình
- Phần mềm giúp giải quyết các vấn đề còn tồn đọng
- Phần mềm giúp giải phóng sức lao động cho người chịu trách nhiệm giám sát
- Phần mềm giúp cải thiện, nâng cao hiệu quả của việc giám sát và cảnh báo
- Xây dựng thành công phần mềm với hai chức năng chính là giám sát và cảnh báo
- Phần mềm sẽ xác định chính xác, đúng đắn những sự chuyển động xảy ra trongmột vùng xác định
- Phần mềm sẽ cảnh báo đúng mỗi khi có sự chuyển động xảy ra
Trang 5- Phần mềm sẽ gửi được hình ảnh chụp hình chuyển động cho điện thoại di độngđang kết nối với hệ thống
- Phần mềm sẽ ghi được hình ảnh chuyển động vào trong hệ thống để làm tư liệucho người giám sát
Phần mềm gồm 4 chức năng chính là:
- Giám sát camera: Hệ thống sẽ giám sát sự chuyển động trong một vùng xác định.Trước hết camera sẽ được lắp đặt tại một vị trí để thu được hình ảnh góc quan sátcủa camera Hệ thống liên tục lấy những khung hình từ camera gửi về Sau đó, hệthống sẽ so sánh giữa các khung hình đó để tìm ra vùng khác biệt lớn nhất giữacác khung hình Khi tìm ra vùng khác biệt lớn nhất và vùng đó lớn hơn 1 ngưỡngnhất định thì hệ thống sẽ báo hiệu là có sự chuyển động xảy ra
- Báo động qua loa: Mỗi khi có sự chuyển động xảy ra trong vùng giám sát, hệthống sẽ chạy một đoạn nhạc âm đã được cài đặt trong hệ thống để báo động qualoa cho người giám sát Khi hết chuyển động, phần nhạc tiếp tục chạy đến 3 giâysau thì mới dừng hẳn
- Theo dõi từ xa qua di động: Người giám sát có thể giám sát sự chuyển động từ xathông qua phần mềm được cài đặt trên di động của mình Mỗi khi có sự chuyểnđộng xảy ra, sau khi báo động qua loa, hệ thống sẽ gửi một khung hình ghi nhận
sự chuyển động cho di động Phần mềm sẽ hiển thị khung hình đó trên màn hình
di động cho người giám sát xem
- Tự động ghi hình: Mỗi khi có sự chuyển động xảy ra trong vùng giám sát, hệthống sẽ tự động ghi hình chuyển động đó lại Sau này người giám sát có thể xemlại các đoạn ghi hình chuyển động xảy ra trong hệ thống
Phần mềm gồm 3 chức năng khác là:
- Chụp hình chuyển động: Khi người giám sát muốn chụp lại hình ảnh hiển thị trênmàn hình, hệ thống sẽ lưu hình ảnh tại một folder đã chỉ định và hiển thị ảnh lênmàn hình cho người giám sát theo dõi
- Quản lý tài khoản đăng nhập hệ thống: hệ thống có chức năng quản lý tài khoảnđăng nhập vào hệ thống, có thể thêm, sửa, xóa tài khoản đăng nhập
Trang 6- Chuyển đổi giao diện sử dụng: người dùng có thể chọn lựa giao diện phần mềmtheo ý thích của mình trong các giao diện đã có của phần mềm
- Ghi hình: hệ thống ghi lại hình ảnh thu được từ camera làm tư liệu cho sau này
- Giám sát tại chỗ: Người giám sát có thể theo dõi các hình ảnh thu được từ cameratrên hệ thống
- Giám sát từ xa: các hình ảnh thu được từ camera được gửi lên mạng Từ đó ngườigiám sát theo dõi từ xa qua mạng
Tự động phát hiện chuyển động Không
Trang 7 Các chức năng chưa có như:
- Hệ thống chưa tự động cảnh báo được cho người giám sát biết mỗi khi có chuyểnđộng xảy ra, bởi vậy người giám sát luôn phải theo dõi 24/24 chuyển động quamàn hình giám sát
- Hệ thống chưa có chức năng cảnh báo từ xa cho người giám sát
- Hệ thống chưa tự động phát hiện khi có chuyển động xảy ra: người giám sát làngười phát hiện chuyển động qua màn hình theo dõi
- Người giám sát phải liên tục theo dõi hình ảnh thu được thông qua camera đểgiám sát xem có sự xâm nhập trái phép nào không, chưa giải phóng sức lao độngcho người giám sát
1.2.2 Mô hình bài toán
Client: Lấy dữ liệu đã xử lý, hiển thị dữ liệu đó lên màn hình cho người giám sáttheo dõi
Di động: di động kết nối với server, nhận dữ liệu từ server gửi cho khi có chuyểnđộng xảy ra Sau đó di động hiển thị dữ liệu lên màn hình di động cho người giám sáttheo dõi
1.2.2.2 Mô hình
Gồm có các thành phần như:
Trang 8- Camera: được đặt tại một vị trí cố định để thu hình, gửi hình lên một địa chỉ IP
- Server: có nhiệm vụ lắng nghe kết nối từ phía di động và tạo các luồng xử lý dữliệu cho kết nối đó Đồng thời lấy dữ liệu từ địa chỉ IP và xử lý dữ liệu đó, từ đókiểm tra có sự chuyển động hay không
- Client: hiển thị dữ liệu lên màn hình cho người dùng xem
- Mobile: gửi yêu cầu nhận dữ liệu và nhận dữ liệu từ Server gửi về, hiển thị trênmàn hình di động
Trang 9Chương 2: Kỹ thuật và công nghệ
2.1 Công nghệ Java
2.1.1 Giới thiệu về công nghệ Java
Java là một ngôn ngữ lập trình hướng đối tượng Khác với phần lớn ngôn ngữ lậptrình thông thường, thay vì biên dịch mã nguồn thành mã máy hoặc thông dịch mã nguồnkhi chạy, Java được thiết kế để biên dịch mã nguồn thành bytecode, bytecode sau đó sẽđược môi trường thực thi chạy
Java là một công nghệ được hãng Sun Microsystems xây dựng từ cuối năm 1990với cái tên Oak và hiện nay đang phát triển vượt bậc với sự đóng góp của hàng vạn lậptrình viên trên thế giới Ban đầu, Oak được kỹ sư James Gosling và các cộng sự xâydựng với mục đích lập trình cho các mặt hàng điện dân dụng với mục tiêu nhỏ gọn vàtương thích được với nhiều loại thiết bị phần cứng khác nhau Sau đó Oak được sử dụngtrong nhiều dự án như dự án Xanh (Blue Project), dự án Phim theo yêu cầu (Video ondemand Project) Sau một chuyến du lịch tới đảo Java của Indonesia, nhóm phát triểnOak đã đổi tên Oak thành Java
Java được tạo ra với tiêu chí “Viết một lần, thực thi khắp nơi” Chương trình phầnmềm viết bằng Java có thể chạy trên mọi nền tảng (platform) khác nhau thông qua mộtmôi trường thực thi với điều kiện có môi trường thực thi thích hợp hỗ trợ nền tảng đó.Môi trường thực thi của Java hiện hỗ trợ Sun Solaris, Linux, Mac OS, Windows Ngoài
ra, một số công ty, tổ chức cũng như cá nhân khác nhau cũng phát triển môi trường thựcthi Java cho những hệ điều hành khác như BEA, IBM, HP Trong đó đáng nói nhất làIBM Java Platform hỗ trợ Windows, Linux,
2.1.2 Ưu điểm , nhược điểm của Java
Ưu điểm:
- Hướng đối tượng: Java là một ngôn ngữ lập trình hướng đối tượng, không cónhiều hằng số độc lập, các biến hoặc các hàm: mỗi một thứ được mô tả có thể chỉđược truy nhập thông qua các lớp và các đối tượng
- Mạnh mẽ: Java là một ngôn ngữ mạnh vì nó yêu cầu tất cả dữ liệu phải được khaibáo một cách tường minh Nó kiểm tra mã nguồn tại thời điểm của sự biên dịch
và sự thông dịch, và loại ra các lỗi của chương trình
Trang 10- Độc lập nền: là khả năng của một chương trình có thể chạy trên bất kỳ máy tínhnào mà không cần quan tâm đến nền bên dưới
- Bảo mật: Java cung cấp môi trường bảo mật cho các chương trình thực thi vàcung cấp một vài lớp điều khiển bảo mật
- Phân tán: Java được sử dụng để phát triển các ứng dụng mà có khả năng linh hoạtqua nhiều nền khác nhau, các hệ điều hành, và các giao diện đồ họa người dùng
- Gặp khó khăn trong việc debug chương trình
- Các tool hỗ trợ trong java không mạnh và đơn giản Do java là phần mềm mãnguồn mở bởi vậy việc yêu cầu xây dựng một tool hỗ trợ chuyển nghiệp, đầu tưquy mô trở lên khó khăn
2.1.3 Những hỗ trợ của Java
Java được xây dựng chủ yếu dựa trên bộ công cụ phát triển ( Java DevelopmentKit - JDK) như là bộ thư viện chuẩn trong đó chứa trình biên dịch, trình thông dịch, trìnhđóng gói, tài liệu,…Đây chính là nền tảng cho việc phát triển các ứng dụng Java Hiệnnay, cộng đồng Java trên thế giới mà đi đầu là hãng Sun Microsystems đã xây dựngnhiều nhánh mới cho Java như: JavaMail (thư điện tử), Java TAPI (viễn thông), Java3D(đồ họa 3 chiều), J2ME (ứng dụng cho thiết bị di động)
Hiện nay Java có các phiên bản hỗ trợ sau:
- J2SETM (Java 2 Platform, Standart Edition): Phiên bản chuẩn gồm bộ công cụ
thông dụng dùng để chạy trên các máy PC hoặc các mạng máy tính nhỏ
- J2EETM (Java 2 Platform, Enterprise Edition): Phiên bản dành cho các máy chủ
với bộ nhớ lớn Bao gồm các kiến trúc nâng cao như Web, EJB, Transaction,…dùng để xây dựng các ứng dụng có quy mô lớn
Trang 11- J2METM (Java 2 Platform, Micro Edition): Bao gồm môi trường và thư viện Java
dùng để phát triển các ứng dụng trên các thiết bị có bộ nhớ nhỏ như điện thoại diđộng, PDA, các đồ gia dụng
2.1.4 Công nghệ Java trong lập trình điện thoại di động (J2ME)
J2ME được phát triển từ kiến trúc JavaCard, EmbededJava và PersonalJava củaphiên bản Java 1.1 Đến dự ra đời của phiên bản Java 2 thì Sun quyết định thay thếPersonalJava bằng một phiên bản mới có tên Java 2 Micro Edition, viết tắt là J2ME.J2ME được sử dụng cho các thiết bị nhỏ gọn với dung lượng bộ nhớ bé và khả năng xử
lý thấp
Mục tiêu của Java là cho phép người lập trình viết các ứng dụng độc lập với thiết
bị di động, không cần quan tâm đến phần cứng thật sự Để làm được như thế, J2MEđược xây dựng bằng các tầng khác nhau để che giấu đi việc tương tác trực tiếp với phầncứng của thiết bị Các tầng cảu J2ME được xây dựng trên CLDC (Connected LimitedDevice Configuration):
Tầng dưới cùng là tầng Phần cứng thiết bị - đây là tầng vật lý bao gồm phần cứngcủa thiết bị di động Các tầng bên trên tầng Phần cứng thiết bị là các tầng trừu tượng,chúng cung cấp cho lập trình viên nhiều giao diện lập trình thân thiện và dễ dàng hơn màkhông cần quan tâm đến phần cứng Nói các khác chúng đóng vai trò trung gian giúpcho lập trình viên tương tác được với phần cứng mà không cần quan tâm đến các chi tiếtthực sự của phần cứng của thiết bị
Tầng Phần cứng thiết bị (Device Hardware Layer): đây là thiết bị di động thật sự
với bộ nhớ và tốc độ xử lý cụ thể Các thiết bị di động khác nhau có thể có bộ vi xử lý và
Trang 12các tập lệnh rất khác nhau Mục tiêu của J2ME là cung cấp cho lập trình viên khả nănggiao tiếp giống nhau với tất cả các loại thiết bị di động khác nhau
Tầng máy ảo Java (Java Virtual Machine Layer): đây là tầng đóng vai trò thông
ngôn giữa chương trình và thiết bị Nó sẽ thông dịch các mã bytecode (mã có được saukhi biên dịch mã nguồn chương trình) thành mã máy của các thiết bị di động Tầng nàybao gồm KVM (K Virtual Machine) là bộ biên dịch mã bytecode thành mã máy Nócung cấp một sự chuẩn hóa cho các thiết bị di động để ứng dụng J2ME sau khi biên dịch
có thể chạy được trên bất kỳ thiết bị di động nào hỗ trợ KVM
Tầng cấu hình (Configuration Layer): Tầng này cung cấp các hàm API cơ bản là
nhân của J2ME Lập trình viên có thể sử dụng các lớp và các phương thức của các APInày tuy nhiên nó không thực sự phong phú bằng tập API của tầng hiện trạng
Tầng hiện trạng (Profile Layer): Tầng này cung cấp các hàm API hữu dụng hơn
cho việc lập trình Mục đích của tầng này xây dựng nên lớp cấu hình và cung cấp nhiềuthư viện ứng dụng hơn
2.2 Thuật toán phát hiện chuyển động
2.2.1 Mô tả thuật toán
Thuật toán phát hiện chuyển động là quá trình so sánh liên tục để tìm ra sự khácbiệt giữa các khung hình video liên tiếp lấy từ địa chỉ ip của camera
Trang 13Thuật toán dựa trên cơ sở là so sánh khung hình video hiện tại với khung hìnhvideo trước nó
Sự so sánh được thực hiện trên từng vùng pixel của hai khung hình đó Nếu vùngpixel của khung hình đầu thay đổi so với vùng pixel khung hình sau thì khoanh vùngpixel đó là vùng pixel đã thay đổi Sau khi so sánh ta thu được một danh sách các vùngpixel đã thay đổi Ta tiến hành liên kết các vùng pixel đã thay đổi đó theo quy tắc: nếucác vùng pixel thay đổi kề nhau thì hợp lại thành vùng có kích thước lớn nhất, không kềvới các vùng thay đổi pixel khác Sau khi liên kết ta được danh sách các vùng pixel thayđổi không kề nhau Cuối cùng ta xác định vùng pixel thay đổi có kích thước lớn nhất.Nếu vùng pixel thay đổi có kích thước lớn nhất và lớn hơn một ngưỡng nhất định thìvùng thay đổi đó thể hiện có sự chuyển động
2.2.2 Biểu diễn thuật toán
Xét trường hợp cụ thể là hai khung hình 1 (Img1) và khung hình 2 (Img2)
Thuật toán:
Bước 1: So sánh sự khác nhau giữa hai pixel của hai ảnh Img1 và Img2
Một pixel trong ảnh được biểu diễn bằng ba giá trị red, green, blue trong khoảng
từ 0 đến 255: Pixel (int Red, int Green, int Blue)
Hình 1: Image 1 với pixel tại tọa độ (x, y) được biểu diễn là Pixel1( Red1, Green1, Blue1)
Trang 14Hình 2: Image 2 với pixel tại tọa độ (x, y) được biểu diễn là Pixel2( Red2, Green2, Blue2)
Xác định Delta giữa hai Pixel qua công thức:
DeltaRed = | Red 2 – Red 1|
DeltaGreen = | Green 2 – Green 1|
DeltaBlue = | Blue 2 - Blue 1|
Delta = Max (DeltaRed, DeltaGreen, DeltaBlue)Nếu Delta > ngưỡng xác định (25) thì pixel 1 được gọi là thay đổi so với pixel 2
Bước 2: Chia ảnh thành các ô vuông có kích thước là 8 x 8
Hình 3: Hình thể hiện chia ảnh thành các ô có kích thước 8 x 8
Đếm số pixel thay đổi trong các ô Nếu số pixel thay đổi lớn hơn ngưỡng là 20%tổng số pixel trong một ô thì ô đó được gọi là thay đổi
Trang 15Hình 4: Thể hiện các ô có pixel thay đổi
Bước 3: Liên kết các ô có sự thay đổi thành ô lớn Xác định vùng có kích thước
lớn nhất Nếu vùng này có kích thước lớn hơn ngưỡng là 32 x 32 thì thông báo có sựchuyển động
Hình 5: Liên kết các ô thay đổi
2.2.3 Đánh giá thuật toán
Thuật toán đã xác định được các vùng thay đổi giữa khung hình video trước vàkhung hình video sau
Thuật toán đã liên kết được các vùng thay đổi đó để xác định được vùng thay đổi
có kích thước lớn nhất Qua vùng này, ta có thể xác định được là có sự chuyển động xảy
ra hay không để báo hiệu cho người giám sát
Trang 16Thuật toán xử dụng các luồng xử lý khác nhau, giúp cho chương trình thực hiệnđược nhiều công việc cùng một lúc trong cùng một thời điểm Có các luồng xử lý dữliệu, các luồng xử lý về server, các luồng xử lý về kết nối giữa client và server Qua đógiúp yêu cầu ít tài nguyên hệ thống hơn
2.2.4 So sánh với các thuật toán khác
Các thuật toán về phát hiện chuyển động khác:
- Thuật toán 1: Thuật toán motion detectin của Andrew Kirillov
Bước 1: Tìm các vùng khác biệt giữa hai khung hình Sau đó ta lấy được một ảnh
với những điểm ảnh màu trắng tại những nơi mà khung hình hiện tại khác với khunghình trước nó
Bước 2: Đếm các điểm ảnh khác biệt, nếu số lượng của nó lớn hơn một mức độ
báo động xác định trước thì báo hiệu là có sự chuyển động
Nhược điểm của thuật toán là nếu đối tượng chuyển động liên tục thì chỉ thấyđược vùng thay đổi nhỏ giữa các khung hình Nhưng nếu đối tượng chuyển động chậmthì thuật toán không xác định được kết quả đúng đắn
- Thuật toán 2: Thuật toán motion detectin của Andrew Kirillov
Lúc bắt đầu, ta lấy khung hình đầu tiên của chuỗi video, đặt là khung hình nền Taluôn so sánh khung hình hiện tại với khung hình nền Sau đó ta chuyển khung hình hiệntại với khung hình nền, thay đổi màu sắc điểm ảnh của khung hình nền Kết quả là ta xácđịnh được khung hình chuyển động của vật
Trang 17 So sánh với các thuật toán:
- Giống nhau: Đều dựa trên cơ sở là so sánh khung hình video hiện tại với khunghình video trước nó
- Ưu điểm: Thuật toán xác định rõ được các vùng chuyển động và chỉ định đượcvùng có sự chuyển động lớn nhất
Thuật toán đã chia khung hình xử lý thành các vùng và các ô, và xử lý trên từngvùng và từng ô này Với việc đó giúp cho đánh giá chính xác hình ảnh hơn
2.3 Thuật toán nâng cao (áp dụng cho vùng phát hiện)
Mục đích: áp dụng để phát hiện chuyển động trong một vùng chỉ định
Cách làm:
- Tạo một mặt nạ theo định dạng sau
Hình 6: Xây dựng mặt nạ
Trang 18o Vùng màu đen là vùng không xét sự chuyển động
o Vùng màu trắng là vùng xét sự chuyển động
- Với các ảnh thu được ta sẽ áp dụng mặt nạ vào Ta sẽ thu được các ảnh với vùng
bị bôi đen tương ứng với vùng đen của mặt nạ
- Như vậy ta chỉ xét vùng có sự chuyển động là vùng không bị bôi đen Ta chỉ quantâm sự chuyển động trong vùng này
Hình 7: Chọn vùng chỉ định
Hình 8: Áp dụng mặt nạ cho vùng chỉ định
Trang 19Báo cáo đồ án tốt nghiệp 2011
Chương 3: Thiết kế chương trình3.1 Các module của chương trình
Chương trình được tổ chức thành các module như sau:
iconnect
Module này dùng đề kết nối cơ sở dữ liệu và thao tác với cơ sở dữ liệu
- IConnect: dùng để kết nối với cơ sở dữ liệu
- IUser: thao tác với cơ sở dữ liệu
- IUserBusinessRule: điều khiển việc thao tác với cơ sở dữ liệu
idata
Module này chứa các lớp cơ sở, sử dụng để cài đặt thuật toán
- ICell: dùng để xây dựng lớp cell
- CompareImage: dùng để xây dựng lớp CompareImage
- IData: dùng để xây dựng lớp chứa dữ liệu chung cho chương trình
- IResize: dùng để xây dựng lớp thay đổi kích thước ảnh
- ImagePanel: dùng để xây dựng lớp ImagePanel
Trang 20- MyImage: dùng để xây dựng lớp MyImage
- IPixel: dùng để xây dựng lớp Pixel
- IRectangular: dùng để xây dựng lớp Rectangular
- IUtility: chứa các phương thức tĩnh
iprogram
Module chứa các lớp dùng để xử lý chương trình
- IServer: lớp Server của chương trình
- iServerThread: lớp xử lý kết nối Server - Client
- IThread: lớp hoạt động của chương trình
iswing
Module chứa giao diện của chương trình
- DlgAbout: xây dựng dialog giới thiệu
- DlgGuide: xây dựng dialog hướng dẫn sử dụng
- IDialog: xây dựng dialog hiển thị ảnh chụp từ màn hình
- IFrame: xây dựng frame hiển thị chính của chương trình
- ILogin: xây dựng frame đăng nhập hệ thống
- IMenu: xây dựng menu cho chương trình
- IPanel: xây dựng panel chính cho frame
- IUserForm: xây dựng panel user
iwriter:
Module chứa lớp sử dụng trong việc đọc ghi file
- IWriteFile: dùng để đọc ghi file ảnh ghi trong file có định dạng txt
iplay_media
Module chứa các lớp sử dụng trong việc chạy file nhạc và ảnh
- IMovie: dùng để điều khiển cách chạy file ảnh
- IPlayAudio: dùng để chạy file audio
- IPlayMovie: dùng để chạy file ảnh, hiển thị trên màn hình
Trang 213.2 Cài đặt chương trình
3.2.1 Cài đặt thuật toán phát hiện chuyển động
Thuật toán phát hiện chuyển động dựa trên nguyên tắc cở bản là so sánh khunghình video hiện tại với khung hình video trước nó Ta xét trường hợp cụ thể sau:
Input: Hai khung hình video Img1 và Img2 có cùng kích thước chiều rộng vàchiều cao
Output: Danh sách các hình chữ nhật thể hiện vùng thay đổi giữa Img1 và Img2Các bước thực hiện:
Bước 1: Chia ảnh ra thành các ô có kích thước là 8 x 8 pixel theo các trục thẳng
và trục ngang thì:
- Số ô theo trục ngang là: kích thước chiều ngang của ảnh / kích thước chiều ngangcủa ô
numCellX = image.getWidth() / cell.getWidth()
- Số ô theo trục dọc là: kích thước chiều dọc của ảnh / kích thước chiều dọc của ô
numCellY = image.getHeight() / cell.getHeight()Như vậy ta được mảng 2 chiều các ô là cell[numCellY][numCellX]
Bước 2: Cho vòng lặp chạy từng ô trong mảng cell [numCellY][numCellX]
- Vì mỗi ô được tạo bởi các Pixel nên mỗi ô có kích thước 8 x 8 ta sẽ lấy đượcmảng 2 chiều pixel là pixel[8][8]
- Cho vòng lặp chạy từng pixel trong mảng 2 chiều pixel[8][8]
So sánh sự thay đổi giữa các pixel giữa 2 ảnh Img1 và Img2, đếm số pixel
thay đổi đó
Nếu số pixel thay đổi trong 1 ô lớn hơn ngưỡng nhất định là 20% thì ô đóđánh dấu là thay đổi
Bước 3: Liên kết các ô thay đổi đó thành các vùng thay đổi Xác định vùng thay
đổi có kích thước lớn nhất, vùng đó thể hiện sự chuyển động Biểu diễn vùng thay đổi
đó bằng hình chữ nhật
So sánh sự thay đổi giữa các pixel :
Trang 22- Để so sánh giữa hai pixel Pixel1 (red1, green1, blue1), Pixel2 (red2, green2,blue2) kiểm tra sự thay đổi:
deltaRed = | red2 – red1 |
deltaBlue = | blue 2 – blue1 |
deltaGreen = | green2 – green1 |
delta = max (deltaRed, deltaBlue, deltaGreen)
nếu delta > ngưỡng (25) thì Pixel1 được gọi là thay đổi so với Pixel2
- Mã Giả:
Input: Hai Pixel p1(int red1, int green1, int blue1) và p2(int red2, int green2, int blue2)
Ouput: delta giữa p1 và p2
procedure int getdelta (Pixel p1, Pixel p2)
deltaRed = | p1.Red – p2.Red |
deltaGreen = | p1.Green – p2.Green |
deltaBlue = | p1.Blue – p2.Blue |
max = deltaRed > deltaGreen ? deltaRed : deltaGreen
max = max > deltaBlue ? max : deltaBlue
return max
end procedure
Để liên kết các ô có sự thay đổi thành ô lớn ta tiến hành theo các bước sau:
- Bước 1: Khởi tạo một danh sách hình chữ nhật: listRec
- Bước 2: Cho vòng lặp chạy qua các ô trong mảng hai chiều chứa các ô, để tìm
các ô thay đổi
Ứng mỗi ô thay đổi, kiểm tra xem ô có liên quan đến hình chữ nhật nàokhông, nếu có thì mở rộng ô với hình chữ nhật, không thì tạo một hình chữnhật mới có kích thước là ô thay đổi đó, thêm vào danh sách hình chữ nhật
Sau khi kết thúc vòng lặp, ta được 1 danh sách các hình chữ nhật thể hiện
sự thay đổi
- Bước 3: Liên kết các hình chữ nhật trong danh sách
Cho vòng lặp chạy qua các hình chữ nhật trong danh sách các hình chữnhật, kiểm tra xem sự liên quan giữa các hình chữ nhật không Nếu haihình chữ nhật liên quan đến nhau, gộp hình chữ nhật thứ nhất với hình chữnhật thứ hai, bỏ hình chữ nhật thứ hai đi trong danh sách
Trang 23 Tiếp tục thực hiện cho đến khi hết danh sách hình chữ nhật, ta sẽ thu đượcmột danh sách các hình chữ nhật riêng biệt, không liên quan đến nhau.
Liên quan một điểm với hình chữ nhật:
Một điểm có tọa độ là (x, y) được gọi là liên quan đến hình chữ nhật (x1, y1, x2,y2) khi tọa độ điểm đó thỏa mãn công thức:
Output: trả về giá trị boolean
//Xét liên quan giữa điểm và hình chữ nhật
procedure boolean related
if x > X1 - 1 && x < X2 + 1 && y > Y1 - 1 && y < Y2 + 1
return true else
return false end if
end procedure
Liên quan của hai hình chữ nhật
Trang 24Hai hình chữ nhật Rec1(x1, y1, x2, y2) và Rec2(X1, Y1, X2, Y2) được gọi là liênquan đến nhau khi:
Tọa độ điểm (X1, Y1) của Rec2 liên quan đến hình chữ nhật Rec1 hoặc
Tọa độ điểm (X1, Y2) của Rec2 liên quan đến hình chữ nhật Rec1 hoặc
Tọa độ điểm (X2, Y2) của Rec2 liên quan đến hình chữ nhật Rec1 hoặc
Tọa độ điểm (X2, Y1) của Rec2 liên quan đến hình chữ nhật Rec1
Hình 10: Sự liên quan của hai hình chữ nhật
- Mã Giả
Input: Hai hình chữ nhật Rec1(x1, y1, x2, y2) và Rec2(X1, Y1, X2, Y2)
Output: Trả về giá trị True/ False
//xét sự liên quan giữ 2 hình chữ nhật
procedure boolean relatedOfRectangular(Rectangular r1, Rectangular r2)
if (X1, Y1) related Rec1 || (X1, Y2) related Rec1 || (X2, Y2) related related Rec1 || (X2, Y1) related Rec1
eturn True else
return False End if
end procedure
Liên quan ô với hình chữ nhật
Trang 25Một ô (x, y, width, height) được gọi là liên quan đến hình chữ nhật Rec(X1, Y1,X2, Y2) khi:
Tọa độ điểm (x1, y1) của ô liên quan đến hình chữ nhật Rec1 hoặc
Tọa độ đIểm (x2, y2) của ô liên quan đến hình chữ nhật Rec1 hoặc
Tọa độ điểm (x1, y2) của ô liên quan đến hình chữ nhật Rec1 hoặc
Tọa độ điểm (x2, y1) của ô liên quan đến hình chữ nhật Rec1
Hình 11: Liên quan của một ô với một hình chữ nhật
Input: Ô cell(x, y, width, height) và hình chữ nhật Rec(x1, y1, x2, y2)
Output: Trả về giá trị True/ False
// Xét sự liên quan giữa ô và hình chữ nhật
procedure boolean relatedCellWithRectangular(Cell cell, Rectangular rec)
if (X1, Y1) related Rec || (X2, Y2) related Rec || (X1, Y2) related Rec1 || (X2, Y1) related Rec1
return True else
return False end if
end procedure
Mở rộng hình chữ nhật với một điểm: