Xây dựng hệ thống phát hiện khuôn mặt và cảnh báo bằng email trên android với vi xử lý arm cortex A8
Sự phát triển của các nền tảng sử dụng hệ điều hành Android và vi xử lý ARM, cùng với sự ra đời
của phiên bản OpenCV dành cho Android đã tạo điều kiện cho các lập trình viên phát triển các
ứng dụng thị giác máy tính cho các hệ thống nhúng. Trong đó, các ứng dụng nhận diện khuôn mặt
trên hệ nhúng hiện nay đang rất đƣợc quan tâm nhƣng chƣa đƣợc khai thác hết. Bài báo này sẽ đề
xuất phƣơng pháp xây dựng hệ thống phát hiện khuôn mặt và gửi thông báo bằng email cho ngƣời
dùng. Hệ thống đƣợc triển khai trên bộ Kit ARM Cubie A10 đƣợc cài đặt hệ điều hành Android
với vi điều khiển ARM Cortex A8. Qua quá trình thực nghiệm, hệ thống đã đã đạt đƣợc các kết
quả tốt thể hiện hiệu quả của việc sử dụng các hệ thống nhúng trong bài toán phát hiện xâm nhập
qua hình ảnh và cảnh báo tới ngƣời dùng.
Tóm tắt nội dung tài liệu: Xây dựng hệ thống phát hiện khuôn mặt và cảnh báo bằng email trên android với vi xử lý arm cortex A8
Đoàn Ngọc Phƣơng Tạp chí KHOA HỌC & CÔNG NGHỆ 116 (02): 105 - 110 105 XÂY DỰNG HỆ THỐNG PHÁT HIỆN KHUÔN MẶT VÀ CẢNH BÁO BẰNG EMAIL TRÊN ANDROID VỚI VI XỬ LÝ ARM CORTEX A8 Đoàn Ngọc Phương* Trường Đại học Công nghệ thông tin và Truyền thông – ĐH Thái Nguyên TÓM TẮT Sự phát triển của các nền tảng sử dụng hệ điều hành Android và vi xử lý ARM, cùng với sự ra đời của phiên bản OpenCV dành cho Android đã tạo điều kiện cho các lập trình viên phát triển các ứng dụng thị giác máy tính cho các hệ thống nhúng. Trong đó, các ứng dụng nhận diện khuôn mặt trên hệ nhúng hiện nay đang rất đƣợc quan tâm nhƣng chƣa đƣợc khai thác hết. Bài báo này sẽ đề xuất phƣơng pháp xây dựng hệ thống phát hiện khuôn mặt và gửi thông báo bằng email cho ngƣời dùng. Hệ thống đƣợc triển khai trên bộ Kit ARM Cubie A10 đƣợc cài đặt hệ điều hành Android với vi điều khiển ARM Cortex A8. Qua quá trình thực nghiệm, hệ thống đã đã đạt đƣợc các kết quả tốt thể hiện hiệu quả của việc sử dụng các hệ thống nhúng trong bài toán phát hiện xâm nhập qua hình ảnh và cảnh báo tới ngƣời dùng. Từ khóa: ARM, Cortex A8, OpenCV, OpenCV4Android, phát hiện khuôn mặt, thị giác máy tính, thị giác nhúng, Android. GIỚI THIỆU* Phát hiện khuôn mặt là kỹ thuật cho phép phát hiện ra khuôn mặt ngƣời trong một khung hình hay trong một đoạn video [1]. Kỹ thuật này cho phép phân biệt khuôn mặt với các thành phần khác trong hình ảnh nhƣ cơ thể, cây cối, xe cộ, , sau đó xác định vị trí và kích thƣớc của khuôn mặt để sử dụng trong các mục đích khác nhau. Phát hiện khuôn mặt đƣợc phát triển từ những năm 70 của thế kỷ trƣớc [1] và đã đạt đƣợc nhiều thành tựu đáng kể với những giải thuật điển hình nhƣ adaboost, các đặc trƣng haar-like, mô hình Cascade of Classifiers [1]. Những giải thuật đó đã giải quyết đƣợc các vấn đề đặt ra với phát hiện khuôn mặt, đó là: Phát hiện khuôn mặt ngƣời ở các tƣ thế khác nhau; Phát hiện khuôn mặt khi trên khuôn mặt có nhiều chi tiết không thuộc khuôn mặt ngƣời; Phát hiện các trạng thái khác nhau của khuôn mặt;Phát hiện khuôn mặt khi nó bị che khuất một phần,Phát hiện khuôn mặt đã đƣợc áp dụng trong rất nhiều lĩnh vực [1]: Xác minh tội phạm,bảo mật,tìm kiếm dữ liệu Tuy có một lịch sử phát triển lâu dài nhƣ vậy, nhƣng phát hiện khuôn mặt vẫn tiếp tục đƣợc * Tel: 0979 479940, Email: dnphuong@ictu.edu.vn nghiên cứu, cải tiến để phù hợp với những yêu cầu mới. Gần đây, kỹ thuật phát hiện khuôn mặt bắt đầu đƣợc sử dụng rộng rãi trong các hệ thống nhúng với hai lý do chính, một là:Sự phát triển của vi xử lý tiên tiến, tiết kiệm điện năng ARM, sự xuất hiện của các hệ điều hành nhƣ Android, Linux trên các hệ thống nhúng [6], [9]; Hai là, sự hỗ trợ của hệ điều hành Android cho bộ thƣ viện thị giác máy tính OpenCV[9]. Với những xu hƣớng phát triển nhƣ vậy, giờ đây ngƣời lập trình có thể sử dụng thƣ viện OpenCV để tạo ra các ứng dụng phát hiện khuôn mặt cho các hệ nhúng sử dụng nền tảng Android với lõi vi xử lý ARM [6], [8]. Trên thực tế bài toán đã đƣợc triển khai rất hiệu quả trên các thiết bị di động, tuy nhiên các nhà phát triển chƣa thực sự quan tâm tới việc phát triển ứng dụng phát hiện khuôn mặt trên các hệ thống nhúng. Bên cạnh đó, các hệ thống quan sát hiện nay phần lớn chỉ quan tâm tới thị trƣờng của camera, khả năng phát hiện đối tƣợng mà chƣa thực sự quan tâm tới khả năng tự động gửi thông báo từ xa cho ngƣời dùng. Bài báo này đề xuất về việc xây dựng một hệ thống thông minh cho phép phát hiện khuôn mặt và gửi email đến ngƣời giám sát trên một Đoàn Ngọc Phƣơng Tạp chí KHOA HỌC & CÔNG NGHỆ 116 (02): 105 - 110 106 hệ nhúng. Chƣơng trình điều khiển đƣợc triển khai trên bộ kit Cubie A10 với nền tảng Android 4.0.4 và vi xử lý ARM Cortex A8. Để thực hiện thu hình ảnh, hệ thống sử dụng một camera để quan sát môi trƣờng xung quanh. Khi phát hiện thấy có ngƣời đi vào vùng quan sát, chƣơng trình sẽ chụp lại hình ảnh và tự động gửi thông báo đến ngƣời sử dụng bằng email. ANDROID VÀ ARM Android đƣợc phát triển và tối ƣu hóa cho bộ vi xử lý lõi ARM [6]. Đặc biệt, hệ thống Android hoạt động tốt trên lõi ARM Cortex™-Ax, trong đó có ARM Cortex-A8, vi xử lý kết hợp các chức năng của một CPU lớp netbook cho các hệ thống nhúng. Với ƣu điểm tiêu thụ điện năng thấp, vi điều khiển ARM là vi điều khiển phù hợp với các điện thoại cầm tay thông minh – môi trƣờng mà ARM đƣợc triển khai mạnh mẽ [4]. Các thiết bị ARMv7 nhƣ ARM Cortex-A8 đƣợc tích hợp công nghệ SIMD tiên tiến đƣợc gọi là công nghệ Neon, đƣợc sử dụng để tăng tốc độ nhiều thao tác nhƣ mã hóa hay thao tác đồ họa trên điểm ảnh và có thể cải thiện hiệu suất trên mã ARM hoặc tập lệnh THUMB®. [6] Tất cả các thiết bị TI đều có công nghệ Neon. Hiện nay có nhiều thế hệ ARM mới, ví dụ nhƣ ARM9, nhƣng Android không đƣợc tối ƣu hóa cho ARM9. Mặc dù Android có thể đƣợc triển khai trên hệ thống có lõi ARM9, nhƣng hiệu suất sẽ thấp hơn so với việc dùng nhân ARM Cortex-A8 [6]. Hơn nữa với lõi ARM Cortex A8 có thể thực hiện nhiều công việc phức tạp với giá thành hợp lý mà không cần đến các lõi hiện đại hơn. Các môi trƣờng phát triển của Android: Với thành tựu đạt đƣợc trong thị trƣờng điện thoại di động, Android đang nỗ lực phát triển để xâm chiếm vào các thị trƣờng khác nhƣ thị trƣờng các thiết bị gia dụng, các thiết bị chuẩn đoán y tế, các dây truyền công nghiệp,. Trong đó Android đặc biệt chú ý đến các môi trƣờng mà những thế mạnh của nó có thể đƣợc phát huy, đó là các môi trƣờng: Quan tâm đến nội dung đa phƣơng tiện;Linh hoạt, hƣớng đồ họa và có giao diện trực quan dựa trên cảm ứng;Có ít nhất một thành phần truyền thông. Xử lý đa phƣơng tiện:Vì hầu hết các hệ thống Android đều có các ứng dụng đa phƣơng tiện mạnh mẽ nhƣ xem phim, chụp hình,, cho nên các nhà phát triển thƣờng đặc biệt chú ý để làm thế nào video, âm thanh và đồ họa đƣợc xử lý tốt trên hệ thống. Phần lớn các bộ mã hóa/giải mã đƣợc cấu hình sẵn với Android thƣờng độ phân giải thấp/tốc độ mã hóa chậm vì các hệ thống có mục tiêu thiết kế cho ARM™-A8 . [6], [2]Một số nền tảng, nhƣ bộ vi xử lýđiện thoại TI OMAP™, bộ vi xử lý video DaVinci và C6000 DSP + vi xử lý ARM, thƣờng kết hợp lõi ARM Cortex với lõi xử lý DSP. Điều đó đem lại hiệu quả trong việc xử lý đa phƣơng tiện, vì lõi DSP có thể giúp giảm tải và đồng thời làm tăng tốc xử lý đa phƣơng tiện cho lõi ARM. CÔNG CỤ PHÁT TRIỂN OpenCV:[2], [7], [8] Là thƣ viện thị giác máy tính mã nguồn mở, đƣợc cấp phép từ năm 2000 bởi BSD. OpenCV đƣợc xây dựng nhằm mục đích cung cấp những công cụ cần thiết để giải quyết các vấn đề thị giác máy tính. Bao gồm các chức năng xử lý hình ảnh ở mức độ thấp và các thuật toán cao cấp nhƣ phát hiện khuôn mặt, phát hiện ngƣời đi bộ. Thƣ viện đã đƣợc tải về hơn 5 triệu lần. Các trƣờng đại học hàng đầu và hơn 100 công ty Foutine và nhiều thành viên khác đã phát triển và duy trì hơn 2500 thuật toán có trong thƣ viện. OpenCV đƣợc viết bằng C, C++, nhƣng giao diện ứng dụng cũng bao gồm wrappercho Java, MATLAB và Python. OpenCV hiện đang hỗ trợ cho Linux, Mac OS X, Android và các nền tảng iOS.[2] OpenCV bắt đầu hỗ trợ Android trong phiên bản OpenCV 2.2. Sau đó NDVIA đã tham gia vào dự án OpenCV và từ phiên bản OpenCV 2.3 các nhà phát triển đã có thể sử dụng OpenCV trên nền tảng Android với các công cụ đầy đủ và mạnh mẽ hơn. Đoàn Ngọc Phƣơng Tạp chí KHOA HỌC & CÔNG NGHỆ 116 (02): 105 - 110 107 Kit phát triển:Các công cụ phát triển cho ứng dụng Anrdoid trên vi xử lý ARM rất phong phú, không chỉ là phần mềm mà còn là các công cụ phần cứng. Với công nghệ tiên tiến và với những ƣu điểm của vi điều khiển ARM, rất nhiều bo mạch ARM đã ra đời cho phép ngƣời lập trình có thể nghiên cứu và xây dựng hệ thống ngay trên các thiết bị thật. Các bộ Kit phát triển này thƣờng hỗ trợ các hệ điều hành Android và Linux [6]. Hình 1: Kit Cubie A10 Hệ thống quan sát ngƣời qua nhận dạng khuôn mặt và gửi email cảnh báo của bài báo đƣợc thực hiện trên board Cubie A10 của Công nghệ Công ty TNHH CubieTech tại Chu Hải, Trung quốc [1], board hỗ trợ hệ điều hành Adroid, Linux, cho phép kết nối ổ HD, có cổng USB, HDMI, Ethernet, phục vụ cho việc kết nối mạng, LCD, các thiết bị ngoại vi nhƣ: chuột, bàn phím, camera, thích hợp cho việc phát triển các dự án liên quan đến thị giác máy tính trên hệ điều hành Android. XÂY DỰNG HỆ THỐNG PHÁT HIỆN KHUÔN MẶT VÀ GỬI THÔNG TIN CẢNH BÁO QUA EMAIL. Hệ thống mà tác giả đề xuất cho phép quan sát môi trƣờng xung quanh, nhận diện có ngƣời trong môi trƣờng quan sát thông qua việc phát hiện khuôn mặt, sau đó chụp ảnh và gửi thông báo đến ngƣời dùng qua email. Hệ thống gồm có một chƣơng trình điều khiển và một bo mạch. Chƣơng trình đƣợc xây dựng để điều khiển bật/tắt camera, phát hiện khuôn mặt ngƣời trong khuôn hình mà camera thu đƣợc, chụp hình và gửi email thông báo. Bo mạch đƣợc sử dụng để cài đặt chƣơng trình điều khiển và là sản phẩm cuối cùng của hệ thống. Hình 2: Mô hình hệ thống Phƣơng pháp xây dựng hệ thống. Quá trình thực hiện của hệ thống quan sát phát hiện khuôn mặt và gửi thông báo qua emailnhƣ sau: Chuẩn bị board: Để vận hành board cần đƣợc gắn các thiết bị ngoại vi nhƣ camera, cáp ethernet, sau đó nạp hệ điều hành và chạy chƣơng trình điều khiển. Xử lý video và gửi email: Hoàn tất các bƣớc khởi động, chƣơng trình bắt đầu thực hiện công việc chính: Theo dõi môi trƣờng xung quanh qua camera (chƣơng trình không đƣợc thiết kế để camera có khả năng thay đổi góc quan sát, để thuận tiện cho việc lựa chọn thiết bị camera của ngƣời sử dụng), chạy khối chƣơng trình phát hiện khuôn mặt qua video, nếu thấy có khuôn mặt xuất hiện, lập tức đánh dấu vùng chứa khuôn mặt, thực hiện chụp hình, hình đƣợc thu nhỏ kích cỡ là 100x100, lƣu trong thƣ mục Gallery của thiết bị. Sau đó khối chƣơng trình gửi email đƣợc gọi, ảnh đã chụp đƣợc đính kèm vào emailvà chƣơng trình sẽ tiến hành gửi thông báo đến ngƣời dùng. Quá trình kiểm tra phát hiện khuôn mặt và gửi email đƣợc tiếp tục thực hiện cho đến khi ứng dụng bị tắt hoặc board bị ngắt nguồn. Đoàn Ngọc Phƣơng Tạp chí KHOA HỌC & CÔNG NGHỆ 116 (02): 105 - 110 108 Hình 3: Biểu đồ trạng thái của hệ thống Thiết kế chức năng nhận dạng khuôn mặt với OpenCV:OpenCV dùng thuật toán Haar Cascade để phát hiện khuôn mặt cũng nhƣ các đối tƣợng khác [9]. Haar Cascade là phƣơng pháp phát hiện đối tƣợng đƣợc đƣa ra bởi Paul Viola và Michael Jones năm 2001. Là một phƣơng pháp học máy dựa trên một chức năng Cascade đƣợc huấn luyện từ rất nhiều ảnh khẳng định và phủ định, đƣợc sử dụng để phát hiện đối tƣợng trong các bức ảnh khác nhau. Với phát hiện khuôn mặt, ban đầu thuật toán cần rất nhiều ảnh phủ định (không chứa khuôn mặt) và khẳng định (chứa khuôn mặt) để làm tập huấn luyện cho phân lớp. Sau đó đƣa ra các đặc trƣng Haar. Các ảnh trong tập huấn luyện đƣợc dùng để tính toán đặc trƣng Haar. Mỗi đặc trƣng Haar là một giá trị duy nhất thu đƣợc bằng cách trừ đi tổng các điểm ảnh ở hình chữ nhật màu trắng với tổng các điểm ảnh nằm ở vùng chữ nhật màu đen. Để nhận dạng khuôn mặt, ta cần áp dụng các đặc trƣng Haar trên các hình ảnh cần kiểm tra. Sau đó chọn đặc trƣng có tỉ lệ lỗi tối thiểu. Tuy nhiên khi kết hợp các tính năng với nhau thì tỉ lệ phát hiện đối tƣợng đạt hiệu quả tốt hơn, với 200 đặc trƣng Haar thì tỉ lệ phát hiện đối tƣợng đạt 95% [9]. Trong một bức ảnh, có nhiều vùng không chứa khuôn mặt, nếu loại bỏ đƣợc những vùng này thời gian tính toán sẽ đƣợc giảm đi đáng kể, vì vậy, ảnh đƣợc chia ra làm nhiều cửa sổ nhỏ. Trong quá trình phát hiện đối tƣợng, các cửa sổ không chứa khuôn mặt sẽ đƣợc loại bỏ dần [9]. Nếu áp dụng tất cả các đặc trƣng trên một cửa sổ sẽ tốn thời gian, nên các đặc trƣng đƣợc chia thành các nhóm, và mỗi nhóm đƣợc áp dụng trong các giai đoạn khác nhau của quá trình phân lớp đối tƣợng [9]. Trên mỗi cửa sổ, nếu ở giai đoạn đầu tiên bị lỗi thì cửa sổ bị loại. Nếu vƣợt qua, áp dụng giai đoạn tiếp theo của phân lớp và tiếp tục quá trình. Cửa sổ vƣợt qua tất cả các giai đoạn là khu vực chứa khuôn mặt [9]. OpenCV có tập huấn luyện tốt để huấn luyện cho phát hiện mặt, mắt,..,tập huấn luyện đƣợc lƣu trong các file XML trong opencv/data/haarcascades/. Ngƣời lập trình có thể thay đổi file này để phát hiện các đối tƣợng khác theo ý muốn. Với phát hiện khuôn mặt trong video, chƣơng trình sẽ cho phép camera thực hiện capture ảnh liên tục, sau đó áp dụng thuật toán Haar Cascade trên mỗi ảnh tĩnh chụp đƣợc. KẾT QUẢ THỰC NGHIỆM Hình 5: Test hệ thống với LCD monitor Hệ thống chạy khá hiệu quả, phát hiện đƣợc khuôn mặt trong trạng thái ánh sáng tốt, nếu ánh sáng yếu hệ thống có thể không nhận dạng đƣợc khuôn mặt, còn bị nhầm lẫn với các vật thể có khung tối (giống khuôn mặt Đoàn Ngọc Phƣơng Tạp chí KHOA HỌC & CÔNG NGHỆ 116 (02): 105 - 110 109 ngƣời với đôi mắt). Chƣơng trình đƣợc thử nghiệm với các trƣờng hợp sau: - Trong trƣờng hợp điều kiện tốt, ánh sáng thích hợp, không có vật thể lạ che khuất khuôn mặt, chƣơng trình thực hiện với 100 lần thử nghiệm với các khuôn mặt khác nhau theo hƣớng trực diện, số lần phát hiện đúng khuôn mặt và gửi đƣợc email đạt 98%. - Khi ánh sáng kém, hình ảnh khuôn mặt không trực diện thì với 100 lần thử nghiệm, chƣơng trình chỉ phát hiện đúng khuôn mặt và gửi đƣợc email với tỉ lệ 30%. Hạn chế của phần mềm điều khiển hệ thống đó là việc nhận dạng khuôn mặt để phát hiện có ngƣời trong khung hình là không hợp lý trong các bài toán an ninh, giám sát. Do những đối tƣợng di chuyển vào trong khung hình có thể che mặt nên camera không thể phát hiện ra đƣợc. Bên cạnh đó còn có những vật thể không phải ngƣời nhƣ tranh ảnh, búp bê, tuy không phải ngƣời nhƣng vẫn đƣợc hệ thống phát hiện khuôn mặt và đƣa ra thông báo. Vì thế bài toán có thể phát triển trong tƣơng lai là phát hiện ngƣời thông qua hình dáng cơ thể nhƣ vậy có thể sử dụng cho nhiều trƣờng hợp trong thực tế. Có thể áp dụng hệ thống này trong những trƣờng hợp quan sát đơn giản, ví dụ nhƣ khi vắng nhà, ngƣời dùng có thể dùng hệ thống để biết đƣợc những vị khách đã đến thăm. Hình 6: Kết quả thực hiện nhận dạng khuôn mặt trong điều kiện ánh sáng tốt. KẾT LUẬN VÀ HƢỚNG NGHIÊN CỨU TIẾP THEO Bài báo đã trình bày về cơ sở lý thuyết, các công cụ hỗ trợ và quá trình xây dựng hệ thống phát hiện khuôn mặt và gửi email thông báo trên hệ thống nhúng sử dụng hệ điều hành Android và vi điều khiển ARM Cortex A8. Tác giả đã thử nghiệm hệ thống trên bộ Kit Cubie A10 của nhà phát triển CubieTech. Kết quả cho thấy chƣơng trình hoạt động tốt, ổn định trong điều kiện ánh sáng tốt và hình ảnh khuôn mặt trực diện, tuy nhiên, trong những điều kiện ánh sáng không tốt và khuôn mặt bị che một phần thì việc nhận dạng khuôn mặt của hệ thống không đạt hiệu quả cao. Vì vậy, trong thời gian tới, tác giả sẽ tiếp tục nghiên cứu các phƣơng pháp phát hiện khuôn mặt để chƣơng trình đạt hiệu quả tốt hơn. Bài báo có thể làm tài liệu tham khảo cho các lập trình viên muốn tìm hiểu về cách xây dựng các hệ thống quan sát, gửi thông báo trên nền tảng Android với nhân vi xử lý ARM Cortex A8. TÀI LIỆU THAM KHẢO 1. All Winner Technology CO.,Ltd, (2011) A10 development board hardware manual V1.1, August 24. 2. Andrey Pavlenko, (2012) OpenCV for Android, Itseez CO. 3. Andrew King, (2003) “A Survey of Methods for Face Detection”. 4. ARM LTD, (2007) Cortex-A8 Technical Reference Manual. 5. DanaH.Ballard, (1983) Christopher M. Brown, Computer Vision, Prentice Hall. 6. Darren Etheridge, (2012) Android Multimedia Engineering Manager,DSP and ARM, Texas Instruments. 7. Gary Bradski, Adrian Kaehler, (2008) Learning OpenCV: ComputerVision with the OpenCV Library, O'Reilly. 8. G. Bradski, (Nov 2000) The opencv library, Dr.Dobb’s Journal, vol. 25. 9. OpenCV 3.0.0.0, (2013) dev documentation, Face Detection using Haar Cascades, opencv dev team. 10. R. LaganiÃlre, (2011) OpenCV 2 Computer Vision Application Programming Cookbook, Packt Publishing. 11. Steve Furber, (2005) ARM-SoC Architecture, Addison Wesley Publishing. Đoàn Ngọc Phƣơng Tạp chí KHOA HỌC & CÔNG NGHỆ 116 (02): 105 - 110 110 SUMMARY BUILDING FACE DETECTION AND EMAIL ALERT SYSTEM ON ANDROID WITH ARM CONRTEX A8 PROCESSOR Phuong Doan Ngoc * College of Information and Communication Technology - TNU The development of the platform using the Android operating system and ARM processors, along with the release of OpenCV version for Android enables programmers to develop applications for computer vision embedded systems. In it, the face recognition applications on embedded systems today is a very interesting development, but has not been fully exploited. This paper proposes the construction method of face recognition system and notify the user by email. The system is implemented on the ARM Cubie A10 Kit installed Android OS with ARM Cortex A8 microcontroller. Through experimentation, the system has achieved good results show the effectiveness of the use of embedded systems in the problem of intrusion detection and visual warning to the user. Key words: ARM, Cortex A8, OpenCV, OpenCV4Android, FaceDetection, Computer Vision, Embbed Vision, Android. Ngày nhận bài:18/11/2013; Ngày phản biện:26/11/2013; Ngày duyệt đăng: 26/02/2014 Phản biện khoa học: TS. Phùng Trung Nghĩa – Trường ĐH Công nghệ Thông tin & Truyền thông - ĐHTN * Tel: 0979 479940, Email: dnphuong@ictu.edu.vn
File đính kèm:
- xay_dung_he_thong_phat_hien_khuon_mat_va_canh_bao_bang_email.pdf