Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 74 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
74
Dung lượng
12,35 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÀ RỊA VŨNG TÀU KHOA CÔNG NGHỆ KỸ THUẬT – NÔNG NGHIỆP CÔNG NGHỆ CAO lu an n va ie gh tn to ĐỒ ÁN TỐT NGHIỆP p Đề tài: d oa nl w THIẾT KẾ MẠCH CHỐNG TRỘM va an lu : ThS Phan Thanh Hoàng Anh Họ tên SVTH : Dương Chí Hùng ll u nf Họ tên GVHD m : 16031192 oi Mã Số Sinh Viên : Điện Công Nghiệp Và Dân Dụng : DH16DC z Lớp z at nh Chuyên Ngành m co l gm @ an Lu Vũng Tàu, tháng 05 năm 2020 n va ac th si MỤC LỤC lu an n va CHƯƠNG 1.GIỚI THIỆU VỀ ĐỀ TÀI LUẬN VĂN 1.1LỜI MỞ ĐẦU 1.2GIỚI THIỆU VỀ XỬ LÝ ẢNH 1.2.1Một số khái niệm 1.2.2Các hình thái ảnh 1.3HỆ THỐNG NHẬN DẠNG KHN MẶT 1.3.1Bài tốn nhận dạng khn mặt 1.3.2Những tác động việc nhận dạng 1.3.3Xây dựng hệ thống nhận dạng CHƯƠNG 2.LÝ THUYẾT CƠ SỞ CỦA BÀI TỐN 2.1LÝ THUYẾT PHÁT HIỆN KHN MẶT NGƯỜI BẰNG ĐẶC TRƯNG HAAR WAVELET-LIKE 2.1.1Tiếp cận Haar wavelet-like 2.1.2Trích xuất đặc trưng Haar wavelet-like 11 to 11 2.2.1Nhận dạng thuật toán PCA 12 2.2.2Nhận dạng thuật toán LDA 13 2.2.3Ứng dụng thuật toán PCA toán 13 p ie gh tn 2.2NHẬN DẠNG KHUÔN MẶT NGƯỜI SỬ DỤNG LBPH FACE RECOGNIZER w 15 oa nl 2.2.4Tính tốn tìm EigenFaces 2.2.5Bài tốn nhận dạng khuôn mặt EigenFaces 17 d 18 3.1GIỚI THIỆU MẠCH ARDUINO NANO 18 3.1.1Cổng kết nối với Arduino Nano 20 3.1.2Lập trình cho Arduino Nano 20 22 oi 23 z at nh 3.4BÀN PHÍM m 3.3MODULE LM2596 ll 3.2ĐỘNG CƠ RC SERVO u nf va an lu CHƯƠNG 3.SƠ LƯỢC VỀ CÁC LINH KIỆN TRONG ĐỀ TÀI 25 26 z CHƯƠNG 4.XÂY DỰNG MƠ HÌNH VÀ PHẦN CỨNG @ 4.3MƠ HÌNH THỰC TẾ 5.1XÂY DỰNG CHƯƠNG TRÌNH PHÁT HIỆN KHUÔN MẶT 31 32 n va CHƯƠNG 6.KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 29 an Lu CHƯƠNG 5.TẠO CHƯƠNG TRÌNH NHẬN DẠNG 28 m co 4.2LÀM MẠCH 26 l 4.1.1Arduino NANO 26 gm 4.1KẾT NỐI VỚI THIẾT BỊ NGOẠI VI 40 ac th si 6.1KẾT LUẬN 40 6.1.1Kết luận 40 6.1.2Kết luận 40 6.1.3Kết luận 40 6.2HƯỚNG PHÁT TRIỂN 40 TÀI LIỆU THAM KHẢO 41 lu an n va p ie gh tn to d oa nl w ll u nf va an lu oi m z at nh z m co l gm @ an Lu n va ac th si LỜI CẢM ƠN Tôi xin chân thành cảm ơn ThS PHAN THANH HỒNG ANH thời gian thực luận văn này, thầy tận tâm giúp đỡ cho lúc không hiểu vấn đề lúc thực luận văn Tôi xin cảm ơn gia đình bạn bè giúp đỡ tơi tơi gặp khó khăn Tơi xin chân thành cảm ơn! lu Vũng Tàu, ngày 28 tháng 05 năm 2020 an Sinh viên n va tn to p ie gh DƯƠNG CHÍ HÙNG d oa nl w ll u nf va an lu oi m z at nh z m co l gm @ an Lu n va ac th si lu an n va p ie gh tn to d oa nl w ll u nf va an lu oi m z at nh z m co l gm @ an Lu n va ac th si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng CHƯƠNG TỔNG QUAN 1.1 Lời mở đầu Trong thời đại đất nước ngày phát triển mặt, nảy sinh nhiều vấn đề an ninh toàn giới quan tâm Theo tốn nhận dạng quan tâm nhiều Và vấn đề nhận dạng phận thể người có nhiều phương pháp đưa có độ xác cao Một số toán nhận dạng quan tâm phát triển phổ biến lu an toàn giới như: n va Nhận dạng vân tay tn to Nhận dạng vân mắt Sử dụng thẻ để lưu giữ thông tin cá nhân … p ie gh Nhận dạng bàn tay w Và phương án nhận dạng áp dụng sau thời gian oa nl dài phát triển có xác cao Nhưng phương pháp d gặp nhiều hạn chế sau: lu va an Đòi hỏi tiếp xúc trực tiếp người hệ thống không nhận dạng ll u nf Với hệ thống sử dụng thẻ yêu cầu phải có thẻ, thẻ m oi Hiện nay, với phát triển xử lý ảnh tốn quan tâm z at nh nghiên cứu nhận dạng khuôn mặt (Face Recognition) Khuôn mặt người đóng vai trị quan trọng Với khn mặt có z @ thể xác định giới tính, chủng tộc, tuổi tác, trạng thái cảm xúc đặc biệt l gm xác định mối quan hệ người (bạn bè, ba mẹ, anh chị em …) Vì tốn nhận dạng khn mặt đặt giải nhiều vấn m co đề điểm danh, quản lý nhân viên … đặc biệt mang lại thêm nhiều giải an Lu pháp kiểm soát an ninh phù hợp với môi trường sử dụng n va ac th si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng Và thực tế cơng nghệ nhận dạng khn mặt ứng dụng phát triển công ty lớn giới Apple, Samsung, Google Ví dụ điển điện thoại thơng minh hãng điện thoại Samsung S8 hay Iphone X hãng Apple có khả sử dụng khn mặt chủ nhân để mở khóa hình Với tốn nhận diện khn mặt có nhiều tốn nhỏ khác như: Nhận dạng dựa đặc trưng phần tử khuôn mặt (Feature based face recognition) Nhận dạng dựa xét tổng thể khuôn mặt (Appearance based face lu an recognition) n va Nhận dạng 2D 3D xác định đặc trưng hình học chi tiết khn mặt (vị trí, diện tích, gh tn to Với phương pháp nhận dạng dựa đặc trưng khuôn mặt sử dụng việc p ie hình dạng mắt, mũi, miệng …) mối quan hệ chúng (khoảng cách w hai mắt, khoảng cách hai lông mày…) Ưu điểm phương pháp oa nl gần với cách mà người sử dụng để nhận biết khuôn mặt cho kết tốt d trường hợp ảnh hưởng tác động từ bên Nhược điểm thuật lu an toán phức tạp việc xác định mối quan hệ khn mặt ảnh kích trưng khn mặt ll u nf va thước nhỏ đặc tính khó phân biệt khó tính tốn đặc oi m Cịn với phương pháp nhận dạng dựa tồn diện khn mặt, có nghĩa z at nh không xét thành phần đặc trưng khuôn mặt mà xem khuôn mặt chiều không gian cụ thể tìm đặc điểm đặc trưng z đặc điểm khơng gian Hai phương pháp thường sử dụng gm @ hướng tiếp cận là: l PCA (Principle Components Analysis) phương pháp trích xuất đặc m co trưng nhằm giảm số chiều ảnh đơn giản mang lại hiểu nhiều an Lu tốt Hệ thống định thích nghi cao liệu đầu vào thay đổi n va ac th si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng LDA (Linear Discriminant Analysis) phương pháp nhận diện dựa phép chiếu tuyến tính từ khơng gian hình ảnh vào chiều không gian thấp cách tối đa lớp tán xạ giảm nhiều phân tán lớp Và toán để nhận dạng không nhắc tới thư viện OpenCV (Open Source Computer Vision Library) Một thư viện mã nguồn mở hàng đầu cho thị giác máy tính (computer vision), xử lý ảnh máy học, tính tăng tắc GPU hoạt động thời gian thực Được giới thiệu vào tháng 01 năm 1999 cho mắt phiên vào năm 2006 Thư viện OpenCV chứa hàng ngàn thuật tốn tối ưu hóa 500 hàm viết ngôn ngữ C/C++ tương thích với nhiều hệ điều hành Windows, lu an Android, Linux, … Các thuật tốn có khả dùng để sử dụng để nhận dạng n va khuôn mặt, xe tự lái, phát khuôn mặt, di chuyển theo khuôn mặt tn to phát theo thời gian thực gh Nhưng với hệ thống nhận dạng khuôn mặt thiết kế sử dụng p ie máy tính có cấu hình cao tốn Vì thiết kế hệ w thống nhận dạng máy tính tốn Nhưng oa nl với phát triển hệ thống nhúng (Embedded system) hệ thống tích hợp d phần cứng phần mềm phục vụ toán chuyên dụng nhiều lĩnh an lu vực công nghiệp, tự động hóa điều khiển truyền tin u nf va Và đề tài luận văn tơi muốn ứng dụng ARDUINO Một bo mạch điện tử nhỏ để thực đề tài luận văn “Thiết kế mạch chống ll oi m trộm” z 1.1.1 Một số khái niệm z at nh 1.2 Giới thiệu xử lý ảnh @ gm Xử lý ảnh mảng quan trọng vấn đề kỹ thuật thị m co l giác máy tính bước đầu cho nhiều nghiên cứu phát triển lĩnh vực nhận dạng Nhiệm vụ trình xử lý ảnh nâng cao chất lượng hình ảnh an Lu xử lý số liệu để cung cấp cho trình nhận dạng n va ac th si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng Quy trình thu nhận ảnh nguồn (từ thiết bị thu nhận ảnh dạng số tương tự) gửi đến máy tính Và liệu ảnh lưu trừ định dạng phù hợp qua trình xử lý Quy trình xử lý nhận dạng ảnh xem trình thao tác ảnh đầu vào nhằm đạt kết mong muốn Kết đầu q trình xử lý ảnh hình ảnh xử lý kết luận Ảnh Qua Xử Lý Ảnh Xử Lý lu an Kết Luận n va to Ảnh coi tập hợp điểm ảnh điểm ảnh p ie gh tn Hình 1.1 Quá trình xử lý ảnh xem đặc trưng cường độ sáng hay dấu hiệu vị trí oa nl w đối tượng khơng gian xem hàm n biến Vì vậy, ảnh xử lý ảnh xem ảnh n chiều d lu va an 1.1.2 Các hình thái ảnh ll u nf Chuyển ảnh màu thành ảnh xám: Đơn vị tế bào ảnh số pixel Tùy oi m theo định dạng ảnh màu hay ảnh xám mà pixel có thơng số khác z at nh Đối với ảnh màu pixel mang thông tin ba màu tạo màu Đỏ, Xanh lá, Xanh biển Trong pixel ảnh màu ba z màu bố trí sát có cường độ sáng khác gm @ Lược đồ xám ảnh (Histogram) có mức xám khoảng [0,L-1] l hàm rời rạc p(rk) = nk/n Trong nk số pixel có mức xám thứ rk, n m co tổng số pixel ảnh k=0,1,2…L-1 Do P(rk) cho xác suất xảy an Lu mức xám rk Vẽ hàm với tất giá trị k biểu diễn khái quát xuất mức xám ảnh Và thể lược đồ mức n va ac th si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng xám ảnh thơng qua tần suất xuất mức xam qua hệ tọa độ vng góc xOy Trong đó, trục hồnh biểu diễn số mức xám từ đến N (số bit ảnh xám) Trục tung biểu diễn số pixel mức xám 1.3 Hệ thống nhận dạng khuôn mặt 1.1.3 Bài tốn nhận dạng khn mặt Bài tốn hệ thống nhận dạng mặt người hệ thống nhận vào hình ảnh chuỗi ảnh (video) Qua xử lý tính tốn để xác định vị trí khn mặt người ảnh (nếu có) xác định người số lu người đào tạo trả kết người lạ an n va p ie gh tn to d oa nl w an lu Hình 1.2 Hệ thống nhận dạng khuôn mặt u nf va 1.1.4 Những tác động việc nhận dạng ll Điều kiện chụp ảnh: Ảnh chụp có điều kiện khác có m oi thể gây ảnh hưởng đến chất lượng ảnh : ánh sáng, chất lượng camera,… z at nh Sự che khuất: Khuôn mặt bị che khuất bỡi vật thể khác z camera bị dính bẩn,… @ l gm Tư chụp, góc chụp: Ảnh chụp khn mặt bị thay đổi góc chụp camera khn mặt Khn mặt nhìn thẳng góc chụp m co máy ảnh lại lệch so với hướng nhìn nhiều trường hợp khác tạo an Lu nhiều khó khăn lớn cho tốn nhận diện khn mặt n va ac th 10 si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng check_Facedetection(); check_button(); while(index_t == 1) { changePass(); } while(index_t == 2) { resetPass(); } lu an while(index_t == 3) n va { error_pass = 0; error_card = 0; } p ie gh tn to openDoor(); { ll u nf error_card = 0; va error_pass = 0; an lu error(); d oa nl w while(index_t == 4) oi m } z at nh } unsigned char isBufferdata(char data[]) //Kiem tra buffer da co gia tri chua z { an Lu { m co if(data[i] == '\0') l { gm for(i = 0; i < ; i++) @ unsigned char i = 0; n va ac th 60 si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng return 0; } } return 1; } bool compareData(char data1[], char data2[]) //Kiem tra cai buffer co giong hay khong { unsigned char i = 0; for(i = 0; i< 5; i++) lu an { n va if(data1[i] != data2[i]) return false; } } p ie gh tn to { oa nl w return true; } d { ll oi m for(i = 0; i< 5; i++) u nf unsigned char i = 0; va an lu void insertData(char data1[], char data2[]) //Gan buffer cho buffer data1[i] = data2[i]; z } z at nh { if(key) an Lu char key = keypad.getKey(); //Doc gia tri ban phim m co { l void getData() //Nhan buffer tu ban phim gm @ } n va ac th 61 si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng { //Serial.println("key != 0"); if(in_num == 0) { data_input[0] = key; lcd.setCursor(5, 1); lcd.print(data_input[0]); delay(200); lcd.setCursor(5, 1); lcd.print("*"); lu an } n va if (in_num == 1) { tn to data_input[1] = key; lcd.print(data_input[1]); p ie gh lcd.setCursor(6, 1); delay(200); oa nl w lcd.setCursor(6, 1); lcd.print("*"); d if (in_num == 2) { va an lu } an Lu lcd.setCursor(8, 1); m co data_input[3] = key; l if (in_num == 3) { gm } @ lcd.print("*"); z lcd.setCursor(7, 1); z at nh delay(200); oi lcd.print(data_input[2]); m lcd.setCursor(7, 1); ll u nf data_input[2] = key; n va ac th 62 si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng lcd.print(data_input[3]); delay(200); lcd.setCursor(8, 1); lcd.print("*"); } if (in_num == 4) { data_input[4] = key; lcd.setCursor(9, 1); lcd.print(data_input[4]); delay(200); lu an lcd.setCursor(9, 1); n va lcd.print("*"); if(in_num == 4) { p ie gh tn to } //Serial.println(data_input); } ll u nf } va in_num ++; an lu else{ d oa nl w in_num = 0; oi m } void checkPass() //kiem tra password z { z at nh } an Lu //Serial.println(data_input); m co //Serial.print("Data: "); l { gm if(isBufferdata(data_input)) @ getData(); n va ac th 63 si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng if(compareData(data_input,password)) //Dung pass { //Serial.print("Dung pass"); notification(1); lcd.clear(); clear_data_input(); index_t = 3; } else if(compareData(data_input,mode_changePass)) { lu an //Serial.print("mode_changePass"); n va lcd.clear(); index_t = 1; } p ie gh tn to clear_data_input(); oa nl w { else if(compareData(data_input,mode_resetPass)) //Serial.print("mode_resetPass"); d an lu lcd.clear(); ll u nf index_t = 2; va clear_data_input(); oi m } { an Lu { m co else l } gm lcd.clear(); @ insertData(password,pass_def); z writeEpprom(pass_def); z at nh else if(compareData(data_input,mode_hardReset)) n va ac th 64 si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng if(error_pass == 2) { notification(3); clear_data_input(); lcd.clear(); index_t = 4; } //Serial.print("Error"); notification(2); lcd.setCursor(1,1); lu an lcd.print(" "); n va clear_data_input(); gh tn to error_pass++; } p ie } } oa nl w void changePass() //Thay doi pass { d an lu lcd.setCursor(0,0); ll while(1) z { z at nh lcd.print(" - New Pass -"); oi m lcd.setCursor(0,0); u nf delay(3000); va lcd.print(" Change Pass "); an Lu //Serial.println(new_pass1); m co insertData(new_pass1,data_input); l { gm if(isBufferdata(data_input)) @ getData(); n va ac th 65 si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng clear_data_input(); break; } } lcd.clear(); lcd.setCursor(0,0); lcd.print(" AGAIN "); while(1) { getData(); lu an if(isBufferdata(data_input)) n va { tn to insertData(new_pass2,data_input); clear_data_input(); p ie gh //Serial.println(new_pass2); an lu delay(1000); d oa nl } w } break; va if(compareData(new_pass1,new_pass2)) an Lu lcd.clear(); m co insertData(password,new_pass2); l writeEpprom(new_pass2); gm delay(1000); @ notification(1); z lcd.print(" - Success -"); z at nh lcd.setCursor(0,0); oi //Serial.println("Success"); m lcd.clear(); ll u nf { n va ac th 66 si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng index_t = 0; } else { lcd.clear(); //Serial.println("miss"); lcd.setCursor(0,0); lcd.print(" Mismatched "); notification(3); delay(1000); lu an lcd.clear(); n va index_t = 0; tn to } gh } p ie void resetPass() { oa nl w unsigned char choise = 0; //Serial.println("Pass reset"); d an lu lcd.setCursor(0,0); oi m if(isBufferdata(data_input)) ll u nf getData(); va lcd.print(" -Reset Pass -"); z at nh { if(compareData(data_input,password)) z { an Lu lcd.setCursor(0,0); m co { l while(1) gm clear_data_input(); @ lcd.clear(); n va ac th 67 si GVHD: ThS Phan Thanh Hoàng AnhSVTH: Dương Chí Hùng lcd.print(" -Reset Pass -"); char key = keypad.getKey(); if(choise == 0) { lcd.setCursor(0,1); lcd.print(">"); lcd.setCursor(2,1); lcd.print("YES"); lcd.setCursor(9,1); lcd.print(" "); lu an lcd.setCursor(11,1); n va lcd.print("NO"); tn to } gh if(choise == 1) p ie { lcd.print(" "); oa nl w lcd.setCursor(0,1); lcd.setCursor(2,1); d an lu lcd.print("YES"); lcd.print(">"); ll u nf va lcd.setCursor(9,1); z if(key == '*') z at nh } oi lcd.print("NO") ; m lcd.setCursor(11,1); } an Lu choise = 0; m co { l if(choise == 1) gm @ { n va ac th 68 si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng else { choise ++; } } if(key == '#' && choise ==0) { lcd.clear(); delay(1000); writeEpprom(pass_def); lu an insertData(password,pass_def); n va lcd.setCursor(0,0); tn to lcd.print(" -Reset ok -"); gh notification(1); p ie delay(1000); break; } d oa nl w lcd.clear(); { z at nh z index_t = 0; oi } m } ll break; u nf lcd.clear(); va an lu if(key == '#' && choise == 1) lcd.clear(); an Lu index_t = 0; m co notification(1); l else{ gm @ } n va ac th 69 si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng } } } void notification(char select) { unsigned char i = 0; if(select == 1) { for(i = 0; i< 2; i++) { lu an digitalWrite(buzz,HIGH); n va delay(100); delay(100); } } p ie gh tn to digitalWrite(buzz,LOW); oa nl w if(select == 2) { d an lu for(i = 0; i< 3; i++) va { delay(100); z } z at nh digitalWrite(buzz,LOW); oi m delay(100); ll u nf digitalWrite(buzz,HIGH); { an Lu for(i = 0; i< 4; i++) m co { l if(select == 3) gm @ } n va ac th 70 si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng digitalWrite(buzz,HIGH); delay(100); digitalWrite(buzz,LOW); delay(100); } } } void writeEpprom(char data[]) { unsigned char i = 0; lu an for(i = 0; i< 5; i++) n va { } } p ie gh tn to EEPROM.write(i, data[i]); void readEpprom() oa nl w { unsigned char i = 0; d { va an lu for(i = 0; i< 5; i++) oi m } ll u nf password[i] = EEPROM.read(i); void openDoor() z { z at nh } an Lu delay(1000); m co lcd.print("-OPEN THE DOOR-"); l lcd.setCursor(0,0); gm unsigned char pos; @ //Serial.println("Open The Door"); n va ac th 71 si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng for (pos = 62; pos < 150; pos ++) { myservo.write(pos); delay(10); } delay(5000); for (pos = 150; pos > 62; pos ) { myservo.write(pos); delay(10); lu an } n va Serial.print("C"); index_t = 0; } p ie gh tn to lcd.clear(); void error() oa nl w { unsigned char minute = 2; d z { z at nh while(i>0) oi lcd.print("Try again for"); m lcd.setCursor(1,0); ll u nf Serial.print('S'); va char buff[2]; an lu unsigned char i = 59; an Lu } m co i = 59; l minute ; gm { @ if(i == && minute > 0) n va ac th 72 si GVHD: ThS Phan Thanh Hồng AnhSVTH: Dương Chí Hùng if(i == && minute == 0) { break; } sprintf(buff,"%.2d",i); lcd.setCursor(5,1); lcd.print(minute); lcd.setCursor(6,1); lcd.print(":"); lcd.setCursor(7,1); lu an lcd.print(buff); n va i ; } gh tn to delay(200); p ie index_t = 0; lcd.clear(); oa nl w } void check_Facedetection() { d an lu if(Serial.available()) { ll oi m count_t = 0; u nf if(c == '*') { va char c = Serial.read(); if(c != '*' && c != '#') { z buffer[count_t++] = c; z at nh } notification(1); an Lu Serial.print("O"); m co if(buffer[0] == 'O' && buffer[1] == 'K') { l if(c == '#') { gm @ } n va ac th 73 si GVHD: ThS Phan Thanh Hoàng AnhSVTH: Dương Chí Hùng index_t = 3; } } } } void check_button() { if(digitalRead(button) == 0) { notification(1); delay(2000); index_t = 3; lu an } n va } p ie gh tn to d oa nl w ll u nf va an lu oi m z at nh z m co l gm @ an Lu n va ac th 74 si