- Thông tin máy tính và ứng dụng cài đặt trong nghiên cứu:
Loại Tên và kích thước sử dụng Ghi chú
Hiệu máy tính Laptop Dell Inspiron 14R (N4110);
Bộ xử lý (CPU) Intel(R) Core(TM) i5-2430M CPU @2.40Ghz, 2.40GHz; Bộ nhớ (RAM) 4.00 GB;
Hệ điều hành Windows 8.1 Pro (64 bit);
Webcam Dell Webcam 1.3 MP;
Tốc độ Webcam 20 frame/s;
Ngôn ngữ LT C#, EmguCV version 2.4.10.1940 - Khai báo chương trình:
Image<Bgr, Byte> currentFrame; // Khai báo một frame hiện hành Capture NhanDang; // Khai báo cho camera
HaarCascade face; // Khai báo nhận dạng
Image<Gray, byte> result; // Khai báo kết quả ảnh mức xám Image<Gray, byte> gray = null; // Khai báo ảnh mức xám
int d = 1, SL = 1; // biến d dùng để lưu hình đối tương, SL là biến số lượng
WMPLib.WindowsMediaPlayer wplayer;// Khai báo cho việc phát tập tin báo động GsmCommMain comm;// Khai báo biến để kết nối điện thoại
VideoWriter VW; // Khai báo biến lưu video - Khai báo trong form:
comm = new GsmCommMain(5, 115200); // kết nối máy tính với điện thoại với 5 là cổng kết nối, 115200 là thông số thiết bị
wplayer = new WMPLib.WindowsMediaPlayer();// Khởi tạo biến phát báo động face = new HaarCascade("NhanDangNguoi.xml");// tải tập tin xml Cascade
Trang 40 - Nút nhận dạng
private void button1_Click(object sender, EventArgs e) {
NhanDang = new Capture(); NhanDang.QueryFrame();
Application.Idle += new EventHandler(FrameNhanDang); // gọi chức năng nhận dạng button1.Enabled = false; } - Chức năng bật báo động void baodong() { wplayer.URL = @"C:\Users\Phuc\Downloads\Music\baodong.mp3"; wplayer.controls.play(); }
- Chức năng lưu video bool flag = false;
private void button2_Click(object sender, EventArgs e) // nút lưu { GhiVideo(); flag = true; }
void GhiVideo() {
string url = "C:\\Video\\";
int height = 400; int width = 650; saveFileDialog1.Filter = "AVI|*.avi";
if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
Trang 41
VW = new VideoWriter(url, CvInvoke.CV_FOURCC('M', 'P', '4', '2'), (Convert.ToInt32(trackBar1.Value)), width, height, true); // định dạng lưu, trackBar1 điều chỉnh tốc độ của video được lưu
} }
- Chức năng kết nối với điện thoại qua dây cáp void OpenConnect()
{ comm.Open(); }
private void btnSMS_Click(object sender, EventArgs e)
{ OpenConnect(); MessageBox.Show("Kết nối thành công"); } - Nút chụp đối tượng
bool flagChup = false; int solan = 1;
private void btnChup_Click(object sender, EventArgs e) { if (solan == 1)
{
flagChup = true; solan = 2;
MessageBox.Show("Bắt đầu chụp ảnh","Chụp ảnh" ); } else if (solan == 2)
{
flagChup = false; solan = 1;
MessageBox.Show("Dừng chụp ảnh", "Dừng"); }
}
- Nội dung chính của chương trình
void FrameNhanDang(object sender, EventArgs e) {
label3.Text = "0"; // số đối tượng tìm thấy
Trang 42
gray = currentFrame.Convert<Gray, Byte>(); //chuyển ảnh về mức xám //dò tìm đối tượng trên ảnh mức xám
MCvAvgComp[][] facesDetected = gray.DetectHaarCascade(face,1.2, 10,Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,new Size(24, 24));
foreach (MCvAvgComp f in facesDetected[0]) // f là kết quả nhận dạng {
SL++; // tăng biến số lượng
label4.Text = SL.ToString(); // label số frame nhận dạng được // Khoanh vùng đối tượng bằng hình chữ nhật rect
result = currentFrame.Copy(f.rect).Convert<Gray, byte>().Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);
currentFrame.Draw(rec, new Bgr(Color.Red), 2);//vẽ khung nhận dạng màu đỏ if (SL == 20) { // Nếu số frame nhận dạng được lớn hơn 20 thì gửi tin nhắn string TinNhan = "Co ke trom, Thoi gian - " + DateTime.Now.ToLongTimeString() + "-" + DateTime.Now.ToLongDateString(); GuiTinNhan(TinNhan,"01692002***"); baodong();// bật báo động }
if(SL==150) SL = 21; // để tránh việc quay về 20 lại gửi tin nhắn if (flagChup == true)
{ result1.ToBitmap().Save("f:\\hinh\\" + d + ".jpg"); d++; } //Đếm số lương mặt người hiển thị trên khung hình
label3.Text = facesDetected[0].Length.ToString(); }
imageBoxFrameNhanDang.Image = currentFrame; // khai báo ghi video if (flag == true)
{
VW.WriteFrame(currentFrame); }
Trang 43 - Khởi động chương trình:
Hình 3.16: Giao diện chương trình
1.
Tác vụ: Khi người dùng click vào nút này, hệ thống sẽ kích hoạt mở webcam và bắt đầu nhận dạng. Đầu tiên, ảnh thu được từ Webcam sẽ được chuyển về ảnh xám, hệ thống sẽ dò tìm đặc trưng của khuôn mặt trên ảnh xám và khoanh vùng đối tượng nếu phát hiện được. Số lượng đối tượng tìm thấy sẽ hiển thị ở góc trái bên dưới và số frame nhận dạng được sẽ được đếm tăng dần ở góc bên còn lại.
Công cụ sử dụng: Ba thư viện của gói thư viện Emgu – nền tảng C# của gói thư viện nguồn mở OpenCV là: Emgu.CV.dll, Emgu.Util.dll, Emgu.CV.UI.dll để sử dụng các thuật toán cho việc nhận dạng đối tượng.
Hình 3.17: Nhận dạng đối tượng 1 2 3 4 5 6 7
Trang 44
2.
Tác vụ: Khi người dùng click vào nút 2, hệ thống sẽ bắt đầu lưu ảnh đối tượng vào thư mục qui định sẵn.
Công cụ sử dụng: Dựa trên các thuật toán của gói thư viện Emgu.
Trang 45
3.
Tác vụ: Người dùng phải kéo thanh trackbar để điều chỉnh số frame ảnh trước khi tiến hành lưu video (đây là yếu tố quyết định tốc độ video thu lại).
Hình 3.19: Thanh trackbar
4.
Tác vụ: Sau khi chọn nút số 4, hệ thống sẽ hiện cửa sổ lựa chọn chỗ lưu và tên video cho người dùng tự chọn. Sau khi chọn Save thì video bắt đầu được lưu.
Công cụ sử dụng: Dựa trên các thuật toán của gói thư viện Emgu.
5.
Tác vụ: Nút số 5 được sử dụng khi người dùng muốn dừng lưu video, sau khi click hệ thống sẽ hiện cửa sổ thông báo video đã lưu thành công.
Công cụ sử dụng: Dựa trên các thuật toán của gói thư viện Emgu.
Hình 3.20: Lưu thành công video
6.
Tác vụ: Nút số 6 thực hiện bật kết nối với điện thoại (điện thoại được kết nối cáp với máy tính).
Công cụ sử dụng: Sử dụng thư viện GSMComm để thực hiện kết nối và gửi tin nhắn từ một chiếc điện thoại dùng làm server.
Trang 46
Hình 3.21: Kết nối và gửi tin nhắn
7.
Tác vụ: Nút số 7 thực hiện chức năng bật tín hiệu báo động với tập tin âm thanh (mp3) có sẵn.
Công cụ sử dụng: Sử dụng thư viện Interop.WMPLib.dll để thực hiện phát tập tin báo động
Trang 47
KẾT LUẬN VÀ ĐỀ NGHỊ
1. KẾT LUẬN
Qua quá trình nghiên cứu, tìm hiểu và thực hiện đề tài, tôi đã hoàn thành các mục tiêu đặt ra với các kết quả cụ thể như sau:
Tìm hiểu quá trình hình thành, cấu trúc, nội dung và các hàm của gói thư viện mã nguồn mở OpenCV. Nghiên cứu, triển khai ứng dụng với gói thư viện Emgu trên nền tảng OpenCV.
Tìm hiểu bài toán nhận dạng khuôn mặt người dựa trên các đặc trưng được trích xuất trên mặt phẳng ảnh từ những công trình nghiên cứu.
Nghiên cứu cách rút trích đặc trưng để nhận dạng khuôn mặt. Áp dụng đặc trưng Haar-Like kết hợp thuật toán Adaboost và bộ phân tầng Cascades of Boosted Classifiers để thực hiện phát hiện và nhận dạng đối tượng. Dựa trên bài toán của Viola –Jones để thực hiện phân tích và nhận dạng mặt người theo thời gian thực với việc đáp ứng tốt về mặt thời gian nhận dạng nhằm triển khai hiệu quả cho bài toán chống trộm (ưu điểm về mặt thời gian – tốc độ xử lý) bởi các đặc trưng Haar- Like được tính nhanh nhờ tích phân ảnh, thuật toán Adaboost giúp chọn ra các đặc trưng và phân loại hiệu quả bằng cách xây dựng bộ phân loại mạnh dựa trên những bộ phân loại yếu kết hợp mô hình Cascades of Boosted Classifiers giúp loại bỏ các mẫu đơn giản và rút ngắn thời gian xử lý.
Thu thập ảnh (6000 ảnh – với 1500 có đối tượng và 4500 ảnh không đối tượng), huấn luyện đối tượng nhằm xuất ra tập tin xml phục vụ cho việc nhận dạng đối tượng.
Xây dựng hệ thống nhận dạng đối tượng trên thời gian thực dựa trên phương án đã đề xuất. Kết quả của hệ thống gồm: Rút trích đặc trưng, phát hiện, nhận dạng đối tượng; khoanh vùng đối tượng; lưu lại hình ảnh và video khi đối tượng bị phát hiện trên mặt phẳng ảnh; gửi tin nhắn SMS thông báo và bật tín hiệu báo động.
2. ĐỀ NGHỊ
Một số đề xuất dựa theo ý tưởng và kết quả đạt được từ để tài theo hai hướng nghiên cứu và ứng dụng thực tế.
Hướng nghiên cứu:
- Hệ thống tập trung nghiên cứu gói thực hiện OpenCV. Do vậy, số lượng ảnh thu thập vẫn còn hạn chế dẫn đến kết quả nhận dạng ở bước phát hiện đối tượng độ chính xác chưa cao. Đề xuất hệ thống sẽ thu thập với số lượng ảnh tăng lên đồng thời sẽ thực hiện với nhiều môi trường và hoạt cảnh khác nhau nhằm giúp cải thiện độ chính xác cũng như khả năng phát hiện đối tượng trên
Trang 48
mặt phẳng ảnh từ đó hạn chế yếu tố bắt sai, bắt lầm và nâng cao khả năng chống trộm.
- Hệ thống sẽ tập trung vào việc ghi nhận ảnh đúng thời điểm vào thông báo đến người dùng chính xác với nhiều phương án được xác lập nhằm giúp tránh trường hợp thông báo sai.
Hướng ứng dụng thực tế:
- Hệ thống cần được triển khai trên Camera thực có độ phân giải tốt hơn và môi trường phù hợp. Cần tích hợp độ sáng và bao phủ với vị trí phù hợp để phát hiện đối tượng theo diện rộng.
- Hệ thống cần tăng cường yếu tố về mặt lưu trữ nhằm giúp ghi nhận thông tin được nhiều hơn.
- Hệ thống có thể triển khai trên nền Web nhằm giúp người dùng có thể xem và nâng cao tính năng bảo mật từ xa.
- Hệ thống có thể được triển khai trên Robot nhằm giải quyết bài toán chống trộm với các sản phẩm tại siêu thị và các nơi chuyên dụng.
Trang 49
PHỤ LỤC
I. Cài đặt OpenCV
Để sử dụng thư viện OpenCV ta cần tải gói thư viện tại trang web chính của OpenCV là : http://opencv.org/. Giao diện chính của trang web sẽ giới thiệu về phiên bản mới nhất của OpenCV hỗ trợ nhiều hệ điều hành khác nhau. Ở đây, chúng ta nghiên cứu OpenCv trên hệ điều hành Windows. Có thể truy cập trang web để tải về hoặc truy cập đường link sau để tải bản 3.0-beta:
http://sourceforge.net/projects/opencvlibrary/files/opencv-win/3.0.0-beta/ Sau khi tải xong ta được tập tin .exe và tiến hành giải nén ta được thư mục opencv với kích thước 3.60 GB
Trong thư mục opencv gồm: thư mục build là thư mục để cài đặt và chứa những tập tin hướng dẫn, thư mục sources chứa các mã nguồn cũng như các ví dụ.
Trang 50
Thư mục build là thư mục để cài đặt và chứa những tập tin hướng dẫn, thư mục sources chứa các mã nguồn cũng như các ví dụ.
Trang 51
Trang 52
II. Cấu hình cho Windows và Visual Studio sử dụng OpenCV
Khai báo thư viện của OpenCV cho Windows:
- Nhấn chuột phải vào My Computer > Properties > Advanced system settings - Ở cửa sổ hiện ra bạn vào thẻ Advanced > Environment Variables > chọn
PATH ở bảng phía trên trong cửa sổ hiện ra > Edit > - Copy đường dẫn tới thư mục \opencv\build\x64\vc12\bin.
- Ở đây sử dụng Visual Studio 2013 nên chọn vc12, có thể chọn đường dẫn phù hợp với đường dẫn cài đặt, phiên bản windows và visual studio đang dùng. Nhấn OK để hoàn thành.
Hình 4: Cửa sổ System Properties
Để thao tác trên có hiệu lực cần khởi động lại máy. Có thể khởi động lại ngay hoặc sau khi cấu hình xong visual studio. Tiếp theo mở Visual Studio và tạo một empty project C++ và thực hiện theo các bước sau:
- Ở cửa sổ Property Manager nhấn chuột phải vào Add New Project Property Sheet... > Nhập tên > Add
Trang 53
Hình 5: Bước tạo project C++
Click chuột phải vào Debug|Win32 > Properties để mở Debug Property Pages
lên:
Hình 6: Debug Property Pages
- Ở mục VC++Directories: ExecutableDirectories copy đường dẫn tới thư mục opencv\build\x64\vc12\bin và Library Directories là đường dẫn tới thư mục \opencv\build\x64\vc12\lib.
- Ở mục C/C++: Additional Include Directories là opencv\build\include.
- Ở mục Linker tab General mục Additional Library Directories là đường dẫn của \opencv\build\x64\vc12\lib.
Trang 54 opencv_calib3d2410d.lib opencv_contrib2410d.lib opencv_core2410d.lib opencv_features2d2410d.lib opencv_flann2410d.lib opencv_gpu2410d.lib opencv_highgui2410d.lib opencv_imgproc2410d.lib opencv_legacy2410d.lib opencv_ml2410d.lib opencv_nonfree2410d.lib opencv_objdetect2410d.lib opencv_ocl2410d.lib opencv_photo2410d.lib opencv_stitching2410d.lib opencv_superres2410d.lib opencv_ts2410d.lib opencv_video2410d.lib opencv_videostab2410d.lib
Hình 7: Thêm các thư viện cần thiết
Trang 55 opencv_calib3d2410.lib opencv_contrib2410.lib opencv_core2410.lib opencv_features2d2410.lib opencv_flann2410.lib opencv_gpu2410.lib opencv_highgui2410.lib opencv_imgproc2410.lib opencv_legacy2410.lib opencv_ml2410.lib opencv_nonfree2410.lib opencv_objdetect2410.lib opencv_ocl2410.lib opencv_photo2410.lib opencv_stitching2410.lib opencv_superres2410.lib opencv_ts2410.lib opencv_video2410.lib opencv_videostab2410.lib
Việc còn lại là code hay lấy code mẫu trong thư mục source/samples và chạy thử.
III. Cài đặt thư viện Emgu
Trang web chính của Emgu CV là:
http://www.emgu.com/wiki/index.php/Main_Page
Tải gói thư viện Emgu phiên bản mới nhất tại trang web: http://sourceforge.net/projects/emgucv/files/
Sau khi tải và cài đặt ta được thư mục gồm tất cả thư viện và code ví dụ:
Trang 56
Thêm Emgu vào Visual Studio để sử dụng các thư viện:
TrongSolution Explorer, click phải lên tên project > Add reference…> chọn tab Browse > duyệt đến thư mục {Emgu folder}\bin > chọn ba file Emgu.CV.dll, Emgu.CV.UI.dll, Emgu.Util.dll > OK.
Chạy thử một ví dụ trong gói Emgu là CameraCapture
Hình 9: CameraCapture
IV. Cài đặt thư viện GSMComm
Tải gói thư viện ở trang web : http://www.scampers.org/steve/sms/libraries.htm Sau khi tải và tiến hành cài đặt xong ta được thư mục như sau :
Hình 10: Thư mục GSM
Trong đó có hai thư mục dành cho hai .Net Framework là 2.0 và 4.0. Các tập tin trong hai thư mục giống nhau nhưng dành riêng cho hai Framework, gồm các thư viện
Trang 57
cần khi lập trình và một số demo ví dụ. Chỉ cần Add Reference… các thư viện này vào Visual Studio là có thể gọi các hàm của GSM ra sử dụng.
Hình 11: Các thư viện GSM
Để có thể gửi tin nhắn cần có một chiếc điện thoại kết nối với máy tính thông qua dây cáp. Chạy thư demo trong thư mục Samples nhằm kiểm tra cổng kết nối của điện thoại cũng như thông số Baud rate để kết nối cho chính xác
Trang 58
TÀI LIỆU THAM KHẢO
[1] Châu Ngân Khánh. Nhận dạng mặt người sử dụng giải thuật Haar Like Features – Cascade of Boosted Classifiers và các đặc trưng SIFT. Luận văn thạc sĩ. Khoa Công Nghệ thông tin và truyền thông, Đại học Cần Thơ, 2013.
[2] Communication ICP Team. Face Recognition (7-2006).
[3] http://www.prodigyproductionsllc.com/articles/programming/how-to-train-opencv- haar-classifiers/
[4] http://www.emgu.com/wiki/index.php/Main_Page [5] http://opencv.org/
[6] Lê Hồng Chuyên. Tìm hiểu một số phương pháp phát hiện khuôn mặt trong ảnh. Khoá luận tốt nghiệp. Khoa Công nghệ thông tin, Đại học Dân lập Hải Phòng, 2007. [7] Mã Trường Thành. Điều khiển Robot Pioneer P3-DX bám sát đối tượng. Luận văn Thạc sĩ. Khoa Công nghệ thông tin & Truyền thông - Trường Đại học Cần Thơ, 2013. [8] Mahdi Rezaei. Create a Cascade of Haar-Like Classifiers: Step by Step.
[9] P. Viola and M. Jones (2001). Robust Real-time Object Detection. International Journal of Computer Vision.
[10] R. Lienhart, J. Maydt (2002). An Extended Set of Haar-like Features for Rapid Object Detection. Intel Labs, Intel Corporation, Santa Clara, CA 95052, USA.
[11] Tạ Minh Lễ. Nghiên cứu khả năng ứng dung thư viện xử lý ảnh OpenCV vào thư viện mã nguồn mở Android. Khoa Công nghệ, Đại học Cần Thơ, 2012.
[12] Trần Phước Long, Nguyễn Văn Lượng. Nhận dạng người dựa vào thông tin khuôn mặt xuất hiện trên ảnh. Luận văn Đại học. Khoa Công nghệ thông tin, Đại học Khoa học tự nhiên, Tp. Hồ Chí Minh, Việt Nam, 2003.
[13] Trần Lê Hồng Dũ. Phát hiện khuôn mặt dựa trên đặc trưng lòi lõm. Luận văn Thạc sĩ. Khoa Công nghệ thông tin, Đại học Khoa học tự nhiên, Tp. Hồ Chí Minh, Việt Nam, 2005.
[14] Trần Quang Hợp, Lương Đình Lưu, Phạm Duy Khánh. Bài toán phát hiện mặt người trong ảnh.