Можно ли искать сходства в 3D-файлах с помощью искусственного интеллекта? ⇐ Python
Можно ли искать сходства в 3D-файлах с помощью искусственного интеллекта?
Прежде всего, я прошу прощения за мой плохой английский, я провожу исследование искусственного интеллекта на 3D-камере, в файлах CAD, и мне нужна ваша поддержка, Я указываю путь к файлу stl в качестве параметра и путь к папке с несколькими файлами stl в ней и ищу похожие файлы stl в файлах stl в этой папке. Я по очереди захожу в папку с stl-файлами и решаю, похожи ли они по расстоянию Хаусдорфа, что в большинстве случаев удается. Но когда я отправляю извлеченные отсюда функции и метки в свою модель, то есть когда я обучаю модель, когда я хочу протестировать ее позже, модель всегда возвращает мне неправильный результат, например, даже когда я сравниваю 2 одинаковых файла, мне говорит, что они не похожи.
В данных, которые я обучил модели, содержится 36 файлов stl, из них 9 похожи, а остальные не похожи, эти похожие файлы были изменены путем игры с размером одного и того же файла stl.< /п> мой код здесь
def load_stl(путь_файла): вернуть pv.read(путь_файла) Защиту align_meshes (сетка1, сетка2): # Получите точки каждой сетки точки1 = сетка1.точки точки2 = сетка2.точки # Вычисляем центроиды каждого набора точек centroid1 = np.mean(points1, axis=0) centroid2 = np.mean(points2, axis=0) # Центрируем каждый набор точек в начале координат points1_centered = точки1 - центроид1 точки2_центред = точки2 - центроид2 # Вычисляем матрицу вращения с помощью PCA pca1 = PCA().fit(points1_centered) pca2 = PCA().fit(points2_centered) вращение_матрица = np.dot(pca1.comComponents_.T, pca2.comComponents_) # Применяем вращение и перемещение к точкам2 Points2_aligned = np.dot(points2_centered, Rotation_matrix) + centroid1 # Создайте новую сетку для выровненных точек mesh2_aligned = pv.PolyData(points2_aligned, mesh2.faces) вернуть сетку2_aligned def Compare_stl_with_folder(stl_file, путь_к папке, порог): stl_files = [ os.path.join(путь_к папке, файл) для файла в os.listdir(folder_path) если file.endswith(".stl") ] сходство_меток = [] особенности = [] для файла в stl_files: если файл != stl_file: target_mesh = load_stl (stl_file) сетка = load_stl (файл) # Выравнивание сеток выровненная_сетка = align_mesh(target_mesh, сетка) # target_mesh.plot(text='target') # Align_mesh.plot(text='search') # Hausdorff mesafesini hesapla distance_forward = distance.directed_hausdorff( target_mesh.points, выровненная_сетка.points )[0] distance_backward = distance.directed_hausdorff( выровненный_mesh.points, target_mesh.points )[0] hausdorff_distance = max(расстояние_вперед, расстояние_назад) если hausdorff_distance 0.3).astype(int) # Отрегулируйте порог по мере необходимости см = путаница_матрица (y_test, y_pred) print("Матрица путаницы:") печать (см) print("Тестовые функции:") печать (X_test) print("Тестовые метки:") печать (y_test) print('Точность теста:', test_acc) print('Тестовая потеря:', test_loss) история = model.fit(X_train, y_train, эпохи = 100) print("Точность: ", History.history['точность']) tf.keras.models.save_model(модель, 'my_model') если __name__ == "__main__": порог = 21,0 stl_file = "C:\\Users\\ubit\\OneDrive\\Desktop\\stlfile\\a.stl" путь_папки = "C:\\Users\\ubit\\OneDrive\\Desktop\\stlfile" Compare_stl_with_folder(stl_file, путь_к папке, порог) вот как я тренирую модель или мне кажется, что я тренирую модель xD Я сохраняю обученную модель и тестирую ее с другими файлами stl. Я тоже тестирую таким образом, вот мой код
def Predict_similarity(модель, целевой_файл, файл_поиска, порог): target_mesh = load_stl (целевой_файл) search_mesh = load_stl (файл_поиска) # Выравнивание сеток выровненная_сетка = align_mesh(target_mesh, search_mesh) distance_forward = distance.directed_hausdorff( target_mesh.points, выровненная_сетка.points )[0] distance_backward = distance.directed_hausdorff( выровненный_mesh.points, target_mesh.points )[0] hausdorff_distance = max(расстояние_вперед, расстояние_назад) если hausdorff_distance
Прежде всего, я прошу прощения за мой плохой английский, я провожу исследование искусственного интеллекта на 3D-камере, в файлах CAD, и мне нужна ваша поддержка, Я указываю путь к файлу stl в качестве параметра и путь к папке с несколькими файлами stl в ней и ищу похожие файлы stl в файлах stl в этой папке. Я по очереди захожу в папку с stl-файлами и решаю, похожи ли они по расстоянию Хаусдорфа, что в большинстве случаев удается. Но когда я отправляю извлеченные отсюда функции и метки в свою модель, то есть когда я обучаю модель, когда я хочу протестировать ее позже, модель всегда возвращает мне неправильный результат, например, даже когда я сравниваю 2 одинаковых файла, мне говорит, что они не похожи.
В данных, которые я обучил модели, содержится 36 файлов stl, из них 9 похожи, а остальные не похожи, эти похожие файлы были изменены путем игры с размером одного и того же файла stl.< /п> мой код здесь
def load_stl(путь_файла): вернуть pv.read(путь_файла) Защиту align_meshes (сетка1, сетка2): # Получите точки каждой сетки точки1 = сетка1.точки точки2 = сетка2.точки # Вычисляем центроиды каждого набора точек centroid1 = np.mean(points1, axis=0) centroid2 = np.mean(points2, axis=0) # Центрируем каждый набор точек в начале координат points1_centered = точки1 - центроид1 точки2_центред = точки2 - центроид2 # Вычисляем матрицу вращения с помощью PCA pca1 = PCA().fit(points1_centered) pca2 = PCA().fit(points2_centered) вращение_матрица = np.dot(pca1.comComponents_.T, pca2.comComponents_) # Применяем вращение и перемещение к точкам2 Points2_aligned = np.dot(points2_centered, Rotation_matrix) + centroid1 # Создайте новую сетку для выровненных точек mesh2_aligned = pv.PolyData(points2_aligned, mesh2.faces) вернуть сетку2_aligned def Compare_stl_with_folder(stl_file, путь_к папке, порог): stl_files = [ os.path.join(путь_к папке, файл) для файла в os.listdir(folder_path) если file.endswith(".stl") ] сходство_меток = [] особенности = [] для файла в stl_files: если файл != stl_file: target_mesh = load_stl (stl_file) сетка = load_stl (файл) # Выравнивание сеток выровненная_сетка = align_mesh(target_mesh, сетка) # target_mesh.plot(text='target') # Align_mesh.plot(text='search') # Hausdorff mesafesini hesapla distance_forward = distance.directed_hausdorff( target_mesh.points, выровненная_сетка.points )[0] distance_backward = distance.directed_hausdorff( выровненный_mesh.points, target_mesh.points )[0] hausdorff_distance = max(расстояние_вперед, расстояние_назад) если hausdorff_distance 0.3).astype(int) # Отрегулируйте порог по мере необходимости см = путаница_матрица (y_test, y_pred) print("Матрица путаницы:") печать (см) print("Тестовые функции:") печать (X_test) print("Тестовые метки:") печать (y_test) print('Точность теста:', test_acc) print('Тестовая потеря:', test_loss) история = model.fit(X_train, y_train, эпохи = 100) print("Точность: ", History.history['точность']) tf.keras.models.save_model(модель, 'my_model') если __name__ == "__main__": порог = 21,0 stl_file = "C:\\Users\\ubit\\OneDrive\\Desktop\\stlfile\\a.stl" путь_папки = "C:\\Users\\ubit\\OneDrive\\Desktop\\stlfile" Compare_stl_with_folder(stl_file, путь_к папке, порог) вот как я тренирую модель или мне кажется, что я тренирую модель xD Я сохраняю обученную модель и тестирую ее с другими файлами stl. Я тоже тестирую таким образом, вот мой код
def Predict_similarity(модель, целевой_файл, файл_поиска, порог): target_mesh = load_stl (целевой_файл) search_mesh = load_stl (файл_поиска) # Выравнивание сеток выровненная_сетка = align_mesh(target_mesh, search_mesh) distance_forward = distance.directed_hausdorff( target_mesh.points, выровненная_сетка.points )[0] distance_backward = distance.directed_hausdorff( выровненный_mesh.points, target_mesh.points )[0] hausdorff_distance = max(расстояние_вперед, расстояние_назад) если hausdorff_distance
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение