7. Kết cấu của đề tài
3.1.3. Xác định khuôn mặt từ video thu được từ Robot NAO
Để xác định được khuôn mặt trong video mà Robot NAO thu được, tác giả sẽ dùng chương trình xác thực khuôn mặt mà tác giả đã nói ở chương 2. Sau khi chương trình xác thực xong khuôn mặt trong video, kết quả thu được là tên của một người.
Trong chương trình có sử dụng hai file có đuôi .txt để lưu trữ kết quả thu được. Một file sẽ lưu tên của người mà Robot nhận diện được để có thể kiểm tra điều kiện và chào người đó một lần một ngày. File này mỗi ngày sẽ được tạo một file với định dạng là DD-MM-YYYY. Một file sẽ lưu chuỗi mà Robot sẽ nói khi có kết quả nhận diện khuôn mặt. Khi khuôn mặt được nhận diện là một người mới trong ngày, chuỗi lưu trữ sẽ là: “Hello” + tên nhận diện được + “! Nice to meet
you!”. Khi khuôn mặt nhận diện là một người đã gặp trong ngày thì chuỗi lưu trữ
là: “Good to see you again” + tên nhận được. Khi gặp một người mà Robot
không biết thì chuỗi lưu trữ sẽ là: “Sory! I don’t know who are you!”.
import datetime
dt_now = datetime.datetime.now()
date_dmy = dt_now.strftime("%d-%m-%Y")
dt = str(date_dmy)+".txt"
print(dt)
ifnot dt in os.listdir("."):
system("echo.>"+dt)
Hình 3-5: Code kiểm tra và tạo file lưu trữ danh sách tên Robot NAO gặp trong ngày
result_names ="" #Biến chứa tên để xử lý
flag =0 #Biến lưu trạng thái người nao nhận diện đã biết hay chưa
for H_i in HumanNames:
if HumanNames[best_class_indices[0]] == H_i and
predictions[0][best_class_indices[0]]>0.50:
result_names = HumanNames[best_class_indices[0]]
flag= 1 #Biến lưu trạng thái người nao nhận diện được NAO biết hay không
flag_exist =0 #Biến lưu trạng thái đã gạp một ngày nào đó trong ngày chưa
ten = result_names.replace('_', ' ') #Nếu tên đặt theo định dạng Cao_Minh_Tiên thì chuyển về Cao Minh Tiên
with open(dt, encoding="utf-8")as fp: #Mở file có tên là ngày hiện tại lên để kiểm tra tên đã tồn tại hay chưa
for line in fp:
if line==ten: #Nếu tên đã tồn tại thì thay đổi trạng thái của biến lưu trạng thái
flag_exist = 1 fp.close()
if flag_exist == 0: #Nếu nguoiqd này chưa gặp trong ngày thì chào và lưu tên vào danh sách người đã gặp trong ngày
f_result= open("result.txt",'w', encoding="utf-8") f_result.write("Hello "+ ten +"“! Nice to meet you!")
f_result.close()
ff_result= open(dt,'a', encoding="utf-8")
ff_result.write("\n"+ten)
ff_result.close()
flag=0
else: # Nếu người được nhận diện là đã gặp trong ngày rồi thì chào với kết quả này
f_result= open("result.txt",'w', encoding="utf-8")
f_result.write("Good to see you again "+ ten)
f_result.close()
flag=0
flag_exist =0 #Hiển thị tên lên video
cv2.putText(frame, result_names, (text_x, text_y),
cv2.FONT_HERSHEY_COMPLEX_SMALL,
1,(0,0,255), thickness=1, lineType=2)
if flag ==0: #Khi không nhận ra ai thì thực hiện những lên này str_result ="Sory! I don’t know who are you!"
f_result= open("result.txt",'w', encoding="utf-8")
f_result.write(str_
Hình 3-6: Code xử lý để đưa ra lời chào cho Robot NAO