1. Trang chủ
  2. » Luận Văn - Báo Cáo

(Đồ án tốt nghiệp) Thiết kế và điều khiển gương tương tác thông minh

146 5 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 146
Dung lượng 4,8 MB

Nội dung

(Đồ án tốt nghiệp) Thiết kế và điều khiển gương tương tác thông minh(Đồ án tốt nghiệp) Thiết kế và điều khiển gương tương tác thông minh(Đồ án tốt nghiệp) Thiết kế và điều khiển gương tương tác thông minh(Đồ án tốt nghiệp) Thiết kế và điều khiển gương tương tác thông minh(Đồ án tốt nghiệp) Thiết kế và điều khiển gương tương tác thông minh(Đồ án tốt nghiệp) Thiết kế và điều khiển gương tương tác thông minh(Đồ án tốt nghiệp) Thiết kế và điều khiển gương tương tác thông minh(Đồ án tốt nghiệp) Thiết kế và điều khiển gương tương tác thông minh(Đồ án tốt nghiệp) Thiết kế và điều khiển gương tương tác thông minh(Đồ án tốt nghiệp) Thiết kế và điều khiển gương tương tác thông minh(Đồ án tốt nghiệp) Thiết kế và điều khiển gương tương tác thông minh(Đồ án tốt nghiệp) Thiết kế và điều khiển gương tương tác thông minh(Đồ án tốt nghiệp) Thiết kế và điều khiển gương tương tác thông minh(Đồ án tốt nghiệp) Thiết kế và điều khiển gương tương tác thông minh(Đồ án tốt nghiệp) Thiết kế và điều khiển gương tương tác thông minh(Đồ án tốt nghiệp) Thiết kế và điều khiển gương tương tác thông minh

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO  ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ VÀ ĐIỀU KHIỂN GƯƠNG TƯƠNG TÁC THÔNG MINH SVTH: NGUYỄN GIA BẢO 17146084 NGUYỄN THỊ HẢI YẾN 17146225 PHẠM THỊ THANH THỦY 17146199 Khóa: 2017-2021 Ngành: CNKT CƠ ĐIỆN TỬ GVHD: TS BÙI HÀ ĐỨC Tp Hồ Chí Minh, tháng 09 năm 2021 LỜI CAM ĐOAN Chúng em xin cam đoan đề tài “Thiết kế điều khiển gương tương tác thông minh” công trình nghiên cứu thân Những phần có sử dụng tài liệu tham khảo có đồ án liệt kê nêu rõ phần tài liệu tham khảo Đồng thời số liệu hay kết trình bày đồ án mang tính chất trung thực, không chép, đạo nhái Nếu sai chúng em xin chịu hoàn toàn trách nhiệm chịu tất kỷ luật môn nhà trường đề Người thực Nguyễn Gia Bảo Phạm Thị Thanh Thủy Nguyễn Thị Hải Yến i LỜI CẢM ƠN Chúng em xin bày tỏ lòng biết ơn sâu sắc tới thầy Bùi Hà Đức tận tình hướng dẫn giúp đỡ chúng em suốt trình làm đồ án Với bảo thầy, chúng em có định hướng tốt công việc triển khai thực yêu cầu q trình làm đồ án mơn học Xin chân thành cảm ơn dạy bảo giúp đỡ thầy giáo, giáo Khoa Cơ khí chế tạo máy, Khoa Đào tạo Chất Lượng Cao – Trường Đại học Sư phạm kỹ thuật TPHCM trang bị kiến thức để em hồn thành tốt đồ án Bên cạnh đó, chúng em xin cảm ơn hỗ trợ giúp đỡ bạn bè thời gian học tập quy trình hoàn thành đồ án Chúng em xin cảm ơn Ban Giám hiệu nhà trường, Bộ môn điện tử, phòng ban nhà trường tạo điều kiện tốt cho em trình học tập làm đồ án Xin chân thành cảm ơn! ii MỤC LỤC LỜI CAM ĐOAN i LỜI CẢM ƠN ii MỤC LỤC iii LỜI NÓI ĐẦU v DANH MỤC CÁC TỪ VIẾT TẮT vi DANH SÁCH BẢNG BIỂU vii DANH SÁCH BIỂU ĐỒ VÀ HÌNH ẢNH viii CHƯƠNG 1: TỔNG QUAN .1 1.1 Giới thiệu chung .1 1.2 Đặt vấn đề .2 1.3 Mục tiêu đề tài 1.4 Giới hạn đề tài 1.5 Kết cấu đề tài CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 Thực tế ảo 2.2 Hệ thống gương tương tác thông minh .6 2.3 Xử lý ảnh 2D 2.4 Xử lý ảnh 3D 17 2.5 Thuật toán Machine Learning ( Support Vector Machines) 33 CHƯƠNG 3: XÂY DỰNG PHẦN CỨNG .37 3.1 Không gian tương tác .37 3.2 Camera Intel Realsense D455 41 3.3 Board nhúng 42 3.4 Môi trường 43 CHƯƠNG 4: XỬ LÝ DỮ LIỆU .45 iii 4.1 Calibration (hiệu chỉnh máy ảnh) 46 4.2 Xử lý liệu ảnh 2D 54 4.3 Nhận diện chuyển động 57 4.4 Xử lý ảnh 3d 64 4.5 Tính kích thước thể 74 CHƯƠNG 5: TẠO GIAO DIỆN NGƯỜI DÙNG 85 5.1 Tổng quan Website 85 5.2 Thành phần giao diện hệ thống gương tương tác .85 5.3 Các trang giao diện .87 CHƯƠNG 6: KẾT LUẬN, NHẬN XÉT VÀ HƯỚNG PHÁT TRIỂN 91 6.1 Kết thu 91 6.2 Nhận xét 91 6.3 Hướng phát triển 92 KẾT LUẬN .93 TÀI LIỆU THAM KHẢO 94 PHỤ LỤC 96 Phụ lục A: Code 96 Phụ lục B: Bản vẽ 132 iv LỜI NÓI ĐẦU Rất nhiều khách hàng lựa chọn đến cửa hàng để mua quần áo thay mua sắm internet Lý đơn giản: họ thử đồ thích trả tiền chắn đồ vừa vặn Theo nghiên cứu năm 2016 Body Labs công bố vào năm 2016, 76% người mua thử quần áo 91% người mua thử giày trước mua Và thường khách rời cửa hàng mà khơng mua họ khơng thể thử đồ cách thoải mái việc hạn chế số lượng thử, đợi chờ tới lượt thử đồ, hay việc phải qua lại nhiều với trang phục đầy màu sắc Thêm vào việc thay đổi đồ phiền phức, gặp phải trang phục cầu kỳ thời gian để thay Nói chung có vơ số lý làm khách hàng nản lịng đơi biến việc mua sắm u thích trở thành nỗi khổ Để giải khuyết điểm “gương tương tác thông minh” xây dựng phát triển Hệ thống gương tương tác thông minh bao gồm hai camera độ sâu Intel Realsense D455 chụp hai nửa thể người từ hai bên Gương tương tác sản phẩm xử lý ảnh 3D, để lấy liệu ảnh, cần thực điều chỉnh thông số nội camera Dữ liệu 3D lấy theo thời gian thực kết hợp lọc - khử nhiễu công tác chuẩn bị cho liệu đầu vào, thực cách cẩn thận, để đảm bảo độ xác cho q trình xử lý Tiếp đến thuật toán xử lý ảnh chuyên sâu kết hợp với phân tích liệu đầu vào để tìm phương pháp khử ngoại vật xung quanh thể để có mảng liệu có thân hình người Sau qua trình xử lý ghép hai nửa thể từ hai camera thành một, nhận diện khớp để tính số đo thể bao gồm vịng một, vịng hai vịng ba Cuối có trang web hiển thị hình ảnh người dùng bao gồm kích thước thể thơng tin Hệ thống nhận diện động tác người dùng thông qua hành động tay phải gạt sang hai bên Sau hiển thị tương tác người dùng lên web việc thay đổi hình ảnh giao diện Sau khoảng thời gian làm đồ án, nhóm hồn thành quy trình xử lý liệu hình ảnh giúp nhận diện người dùng, hỗ trợ tương tác gương khách hàng v DANH MỤC CÁC TỪ VIẾT TẮT VR: Virtual Reality PCAP: Projective Capacitive FRID: Radio Frequency Identification Two Dimensional: 2D Three Dimensional: 3D Time-of-Flight: ToF Iterative closest point: ICP Support Vector Machines: SVM Radial Basis Function: RBF Convolution Neural Network: CNN Part Affinity fields: PAFs RGB: Red Green Blue EMA: Exponential Moving Average HTML: Hypertext Markup Language CSS: Cascading Style Sheets JS: JavaScript PHP: Hypertext Preprocessor SQL: Structured Query Language RDBMS: Relational Database Management System vi DANH SÁCH BẢNG BIỂU Bảng 4-1 Kết thực nghiệm nhận diện chuyển động 63 Bảng 4-2 Thực nghiệm công thức tính vịng 79 Bảng 4-3 Bảng thực nghiệm cơng thức tính vòng 81 Bảng 4-4 Thực nghiệm hệ số x 82 Bảng 4-5 Thực nghiệm cơng thức tính vịng 83 vii DANH SÁCH BIỂU ĐỒ VÀ HÌNH ẢNH Biểu đồ 1-1 Biểu đồ quy mơ thị trường ảo theo thành phần từ 2015-2025 (tỷ đô) Hình 2-1 Interactive Mirror Prestop .7 Hình 2-2 Magic Mirror H&M Hình 2-3 Ảnh 2D Hình 2-4 Khớp xương người 11 Hình 2-5 Tỷ lệ người 12 Hình 2-6 Tỷ lệ thể người so với chiều cao đầu .13 Hình 2-7 Motion capture system .14 Hình 2-8 Tracking 18 khớp thể .16 Hình 2-9 Ảnh 3D .19 Hình 2-10 Ảnh độ sâu .20 Hình 2-11 Ảnh vật qua camera 22 Hình 2-12 Point cloud .23 Hình 2-13 Edge-Preserving filter 24 Hình 2-14 Trong mơi trường thiếu ánh sánh ánh sáng vừa đủ 25 Hình 2-15 Ghép point cloud ICP 27 Hình 2-16 Thuật tốn KDTree 28 Hình 2-17 Tìm kiếm điểm gần 29 Hình 2-18 Thuật tốn RANSAC .31 Hình 2-19 Các mặt phẳng phân tách 34 Hình 2-20 Mặt phẳng phân tách tốt 35 Hình 3-1 Trường nhìn máy ảnh 37 viii Hình 3-2 Độ cao lắp đặt hình 38 Hình 3-3 Sơ đồ khoảng cách ngắn từ máy ảnh đến vị trí đứng 39 Hình 3-4 Sơ đồ khoảng cách ngắn từ hình đến vị trí đứng .39 Hình 3-5 Sơ đồ khoảng cách từ hình đến vị trí đứng 1,5m 40 Hình 3-6 Kết thiết kế 40 Hình 3-7 Camera Intel Realsense D455 41 Hình 3-8 Nguyên lí hoạt động camera D455 42 Hình 3-9 NVIDIA Jetson Nano Developer Kit 43 Hình 3-10 Ảnh hưởng tia laser đèn flash tới camera 44 Hình 4-1 Hiệu chỉnh máy ảnh 46 Hình 4-2 Mục tiêu dùng để hiệu chỉnh .48 Hình 4-3 Giai đoạn chỉnh lưu mục tiêu .49 Hình 4-4 Giai đoạn chỉnh lưu mục tiêu (tiếp tục) .50 Hình 4-5 Giai đoạn chỉnh lưu mục tiêu (tiếp tục) .51 Hình 4-6 Giai đoạn hiệu chỉnh động quy mơ 15 52 Hình 4-7 Hồn thành q trình hiệu chỉnh động .53 Hình 4-8 Trước sau calib 53 Hình 4-9 Các bước xử lý để xây dựng khung xương người video 55 Hình 4-10 18 khớp thể xác định 56 Hình 4-11 Tọa độ (x,y) 18 khớp thể 57 Hình 4-12 Skeleton bao gồm toa độ khớp không gian xyz .59 Hình 4-13 Quá trình thu thập liệu động tác 60 Hình 4-14 Nguyên lý đưa liệu vào hệ thống 61 Hình 4-15 Kết nhận diện chuyển động gạt phải 62 ix did_once = False i=0 cnt = save = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] for joint_index in range(len(joints_2D)): if did_once == False: cv2.putText( render_image, "id: " + str(skeleton_2D.id), (int(joints_2D[joint_index].x), int(joints_2D[joint_index].y - 30)), cv2.FONT_HERSHEY_SIMPLEX, 0.55, text_color, thickness, ) did_once = True # check if the joint was detected and has valid coordinate if skeleton_2D.confidences[joint_index] > joint_confidence: distance_in_kernel = [] # of image RGB low_bound_x = max( 0, int( 120 joints_2D[joint_index].x - math.floor(distance_kernel_size / 2) ) ) upper_bound_x = min( cols - 1, int(joints_2D[joint_index].x + math.ceil(distance_kernel_size / 2)), ) low_bound_y = max( 0, int( joints_2D[joint_index].y - math.floor(distance_kernel_size / 2) ), ) upper_bound_y = min( rows - 1, int(joints_2D[joint_index].y + math.ceil(distance_kernel_size / 2)), ) # have to change to Depth for x in range(low_bound_x, upper_bound_x): for y in range(low_bound_y, upper_bound_y): 121 distance_in_kernel.append(depth_map.get_distance(847-y, x)) if len(distance_in_kernel) == 25: median_distance = np.percentile(np.array(distance_in_kernel), 50) else: continue depth_pixel = [ 847-int(joints_2D[joint_index].y), int(joints_2D[joint_index].x), ] # if joint_index == 4: # print("median_distance", median_distance) if median_distance >= 0.3: point_3d = rs.rs2_deproject_pixel_to_point( depth_intrinsic, depth_pixel, median_distance ) point_3d = np.round([float(i) for i in point_3d], 3) # if joint_index == 4: # print("joints_2D[joint_index].y:", joints_2D[joint_index].y) # print("point3d sau:",point_3d) point_str = [str(x) for x in point_3d] i = "{}".format(joint_index) cnt +=1 save[cnt-1] = [point_3d[1], 122 -point_3d[0], point_3d[2]] cv2.putText( render_image, str(i) + ' ' + str([point_3d[1], point_3d[0], -point_3d[2]]) , (int(joints_2D[joint_index].x), int(joints_2D[joint_index].y)), cv2.FONT_HERSHEY_DUPLEX, 0.4, text_color, thickness, ) if cnt == 18: return save else: return None if name == " main ": try: # Configure depth and color streams of the intel realsense # from Camera config_1 = rs.config() config_1.enable_device('046122251324') 123 config_1.enable_stream(rs.stream.depth, 848, 480, rs.format.z16, 30) config_1.enable_stream(rs.stream.color, 848, 480, rs.format.rgb8, 30) # from Camera config_2 = rs.config() config_2.enable_device('108222250284') config_2.enable_stream(rs.stream.depth, 848, 480, rs.format.z16, 30) config_2.enable_stream(rs.stream.color, 848, 480, rs.format.rgb8, 30) # Start the realsense pipeline # from Camera pipeline_1 = rs.pipeline() pipeline_1.start(config_1) # from Camera pipeline_2 = rs.pipeline() pipeline_2.start(config_2) # Create align object to align depth frames to color frames # from Camera align_1 = rs.align(rs.stream.color) # from Camera align_2 = rs.align(rs.stream.color) # Get the intrinsics information for calculation of 3D point # from Camera unaligned_frames_1 = pipeline_1.wait_for_frames() frames_1 = align_1.process(unaligned_frames_1) depth_frame_1 = frames_1.get_depth_frame() 124 depth_intrinsic_1 = depth_frame_1.profile.as_video_stream_profile().intrinsics color_1 = frames_1.get_color_frame() color_image_1= np.asanyarray(color_1.get_data()) # from Camera unaligned_frames_2 = pipeline_2.wait_for_frames() frames_2 = align_2.process(unaligned_frames_2) depth_frame_2 = frames_2.get_depth_frame() depth_intrinsic_2 = depth_frame_2.profile.as_video_stream_profile().intrinsics color_2 = frames_2.get_color_frame() color_image_2 = np.asanyarray(color_2.get_data()) # Initialize the cubemos api with a valid license key in default_license_dir() skeletrack = skeletontracker(cloud_tracking_api_key="") joint_confidence = 0.2 # Create window for initialisation window_name = "cubemos skeleton tracking with realsense D400 series" # Initialize out = cv2.VideoWriter('person.avi',cv2.VideoWriter_fourcc('M','J','P','G'), 30, (color_image_1.shape[0],color_image_1.shape[1])) loaded_model = pickle.load(open('traindongtac.sav', 'rb')) P15_distance = np.arange(15).reshape((15,)).tolist() Points_15 = np.arange(15).reshape((15,1)).tolist() Points_3 = np.arange(3).reshape((3,1)).tolist() 125 pc1 = rs.pointcloud() pc2 = rs.pointcloud() vong = times1 = times2 = cnt = first_loop = True flag = mydb = mysql.connector.connect( host="localhost", user="byt", password="123", database="interaction" ) # send_flagtable(mydb,0) while True: # Create a pipeline_1 object This object configures the streaming camera and owns it's handle # from Camera unaligned_frames_1 = pipeline_1.wait_for_frames() frames_1 = align_1.process(unaligned_frames_1) depth_frame_1 = frames_1.get_depth_frame() color_1 = frames_1.get_color_frame() # from Camera 126 unaligned_frames_2 = pipeline_2.wait_for_frames() frames_2 = align_2.process(unaligned_frames_2) depth_frame_2 = frames_2.get_depth_frame() color_2 = frames_2.get_color_frame() if not depth_frame_1 or not depth_frame_2 or not color_1 or not color_2: continue # Convert images to numpy arrays # from camera depth_image_1 = np.asanyarray(depth_frame_1.get_data()) color_image_1 = np.asanyarray(color_1.get_data()) color_image_1 = cv2.cvtColor(color_image_1, cv2.COLOR_BGR2RGB) # from camera depth_image_2 = np.asanyarray(depth_frame_2.get_data()) color_image_2 = np.asanyarray(color_2.get_data()) color_image_2 = cv2.cvtColor(color_image_2, cv2.COLOR_BGR2RGB) # rotation color_image_1 = cv2.rotate(color_image_1, cv2.ROTATE_90_COUNTERCLOCKWISE) color_image_2 = cv2.rotate(color_image_2, cv2.ROTATE_90_COUNTERCLOCKWISE) out.write(color_image_1) # print('depth_image_shape1',depth_image_1) 127 # print('depth_image_shape2',depth_image_2) flag = read_flagtable(mydb) if flag == 1: '''find size''' # perform inference and update the tracking id skeletons = skeletrack.track_skeletons(color_image_1) # render the skeletons on top of the acquired image and display it cm.render_result(skeletons, color_image_1, joint_confidence) skeletons_3D = render_ids_3d( color_image_1, skeletons, depth_frame_1, depth_intrinsic_1, joint_confidence) if skeletons_3D is not None: # depth_image_1 = np.asanyarray(depth_2.get_data()) #calculate pcd points_1 = pc1.calculate(depth_frame_1) points_2 = pc2.calculate(depth_frame_2) v1 = points_1.get_vertices() v2 = points_2.get_vertices() verts1 = np.asanyarray(v1).view(np.float32).reshape(-1, 3) # xyz verts2 = np.asanyarray(v2).view(np.float32).reshape(-1, 3) # xyz 128 print('verts 1: ',verts1) print('verts 2: ',verts2) pcl1 = o3d.geometry.PointCloud() pcl1.points = o3d.utility.Vector3dVector(verts1) pcl2 = o3d.geometry.PointCloud() pcl2.points = o3d.utility.Vector3dVector(verts2) size = process_3D(pcl1,pcl2,skeletons_3D) send_sizetable(size[0],size[1],size[2],size[3]) print('da gui size') elif flag == 2: '''tuong tac''' # ghi lien tuc doc tac vao database skeletons = skeletrack.track_skeletons(color_image_1) # render the skeletons on top of the acquired image and display it cm.render_result(skeletons, color_image_1, joint_confidence) skeletons_3D = render_ids_3d( color_image_1, skeletons, depth_frame_1, depth_intrinsic_1, joint_confidence) if skeletons_3D is not None: k = motion_detection(skeletons_3D[4]) if k is not None: 129 print('k = ',k) if k == 1: times1 += times2 = elif k == 2: times1 = times2 += elif k == 3: times1 = times2 = if times1 >=3: mycursor = mydb.cursor() sql = "INSERT INTO movement (id,kind) VALUES (%s, %s)" val = (None,1) mycursor.execute(sql, val) mydb.commit() times1 = print('gat 1') elif times2 >=3: mycursor = mydb.cursor() sql = "INSERT INTO movement (id,kind) VALUES (%s, %s)" val = (None,2) 130 mycursor.execute(sql, val) mydb.commit() times2 = print('gat 2') cv2.imshow('1', color_image_1) # cv2.imshow('2', color_image_2) if cv2.waitKey(1) == 27: break pipeline_1.stop() pipeline_2.stop() cv2.destroyAllWindows() #sle = except Exception as ex: print('Exception occured: "{}"'.format(ex)) 131 Phụ lục B: Bản vẽ 132 133 S K L 0 ... khuyết điểm ? ?gương tương tác thông minh? ?? xây dựng phát triển Hệ thống gương tương tác thông minh bao gồm hai camera độ sâu Intel Realsense D455 chụp hai nửa thể người từ hai bên Gương tương tác sản... sản phẩm gương tương tác (hoặc dạng gương thơng minh có hỗ trợ tương tác trực tiếp với người dùng thông qua thiết bị điện tử khác) Interactive Mirror Prestop dòng sản phẩm gương tương tác bật... tài ? ?Thiết kế điều khiển gương tương tác thông minh? ?? cơng trình nghiên cứu thân Những phần có sử dụng tài liệu tham khảo có đồ án liệt kê nêu rõ phần tài liệu tham khảo Đồng thời số liệu hay kết

Ngày đăng: 26/12/2022, 09:12