Partage de technologie

Image de caméra à lumière structurée MechMind capturant l'appel python du SDK

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Effet de test

Caméra à lumière structurée Mech-Mind

Les caméras à lumière structurée de Mech Mind, en particulier la série Mech-Eye, sont des caméras 3D de haute précision de qualité industrielle qui sont largement utilisées dans l'automatisation industrielle, la navigation robotisée, l'inspection qualité et d'autres domaines. Ce qui suit est une analyse détaillée de la caméra à lumière structurée Mech Mind :

1. Présentation du produit

Les caméras à lumière structurée de Mech Mind, telles que Mech-Eye PRO, utilisent une technologie de lumière structurée à grande vitesse pour offrir une excellente résistance à la lumière ambiante tout en conservant une précision et une vitesse élevées. Ces caméras contiennent généralement de riches modules d'algorithmes de vision et peuvent être appliquées à de nombreux scénarios pratiques typiques, tels que le chargement et le déchargement de pièces de fabrication, le positionnement de haute précision, l'assemblage, le serrage de vis et la recherche universitaire.

2. Principe de fonctionnement

La caméra à lumière structurée de Mech Mind utilise principalement le principe de projection de lumière structurée. Ils projettent des motifs spécifiques (tels qu'une lumière structurée générée par des lasers) sur l'objet photographié, et le contour et la forme de l'objet sont capturés par l'appareil photo. Cette technologie permet de calculer avec précision la position et la forme d'un objet en analysant la réflexion et la réfraction de la lumière sur l'objet.

3. Caractéristiques du produit

  1. Haute précision : La caméra à lumière structurée de Mech Mind peut obtenir des modèles tridimensionnels de haute précision en peu de temps. Pour différents objets, des informations de forme précises peuvent être obtenues en une seule prise. Par exemple, la répétabilité en un seul point dans la direction Z du Mech-Eye PRO peut atteindre 0,05 mm (à 1,0 m).
  2. grande vitesse: La caméra dispose de capacités d'acquisition et de traitement de données rapides. Par exemple, le temps d'acquisition typique de Mech-Eye PRO est de 0,3 à 0,6 seconde.
  3. Grand champ de vision et grande profondeur de champ: Certains modèles, tels que la caméra 3D Mech-Eye Deep, ont les caractéristiques d'un grand champ de vision et d'une grande profondeur de champ, et peuvent être appliqués à une variété de types d'empilement courants.
  4. Forte résistance à la lumière ambiante: La caméra à lumière structurée de Mech Mind peut toujours conserver d'excellents effets d'imagerie sous de fortes interférences de lumière ambiante (telles que > 20 000 lx).
  5. Déploiement flexible: La caméra est adaptée à la plupart des grandes marques de robots au pays et à l'étranger, et peut réaliser un contrôle complet du mouvement des robots adaptés.
  6. Ouvert et facile à utiliser: La caméra fournit une interface utilisateur conviviale et une API ouverte pour faciliter le développement et l’intégration secondaires des utilisateurs.
  7. Stable et fiable: Les caméras à lumière structurée de Mech Mind ont une stabilité et une fiabilité élevées, comme le temps moyen entre pannes (MTBF) de Mech-Eye PRO ≥ 40 000 heures.

4. Domaines d'application

Les caméras à lumière structurée de Mech Mind sont largement utilisées dans les domaines de l'automobile, de l'aviation, de la fabrication de moules, de l'automatisation industrielle et dans d'autres domaines. Dans le domaine automobile, ils peuvent obtenir rapidement et avec précision les informations sur la forme de la surface de la carrosserie ; dans le domaine de l'aviation, ils peuvent obtenir les informations sur la forme tridimensionnelle de l'avion, fournissant ainsi un support de données précis pour la conception et la fabrication de l'avion. .

5. Résumé

Les caméras à lumière structurée de Mech Mind jouent un rôle important dans des domaines tels que l'automatisation industrielle et la navigation robotique en raison de leur haute précision, de leur vitesse élevée, de leur grand champ de vision, de leur grande profondeur de champ, de leur forte résistance à la lumière ambiante, ainsi que de leur stabilité et de leur fiabilité. Avec l’avancement continu de la technologie et l’expansion continue des scénarios d’application, les caméras à lumière structurée de Mech Mind devraient démontrer leur valeur unique dans davantage de domaines.

Mettre en place un environnement de développement Python

Créer un environnement virtuel

Téléchargez le package opencv-python

Téléchargez le package de capture de caméra Mecamander

  1. pip install MechEyeAPI
  2. pip install python-opencv

Analyse des étapes

Connecter la caméra

  1. def ConnectCamera(self):
  2. camera_infos = Camera.discover_cameras()
  3. if len(camera_infos) != 1:
  4. print("相机连接出现异常,检查网线")
  5. return
  6. error_status = self.camera.connect(camera_infos[0])
  7. if not error_status.is_ok():
  8. show_error(error_status)
  9. return

Déconnecter la caméra

  1. def DisConnectCamera(self):
  2. self.camera.disconnect()
  3. print("Disconnected from the camera successfully.")

Collectez des images 2D et des images 3D

  1. def connect_and_capture(self):
  2. # Obtain the 2D image resolution and the depth map resolution of the camera.
  3. resolution = CameraResolutions()
  4. show_error(self.camera.get_camera_resolutions(resolution))
  5. print_camera_resolution(resolution)
  6. time1 = time.time()
  7. # Obtain the 2D image.
  8. frame2d = Frame2D()
  9. show_error(self.camera.capture_2d(frame2d))
  10. row, col = 222, 222
  11. color_map = frame2d.get_color_image()
  12. print("The size of the 2D image is {} (width) * {} (height).".format(
  13. color_map.width(), color_map.height()))
  14. rgb = color_map[row * color_map.width() + col]
  15. print("The RGB values of the pixel at ({},{}) is R:{},G:{},B{}n".
  16. format(row, col, rgb.b, rgb.g, rgb.r))
  17. Image2d = color_map.data()
  18. time2 = time.time()
  19. print('grab 2d image : '+str((time2-time1)*1000)+'ms')
  20. # if not confirm_capture_3d():
  21. # return
  22. # Obtain the depth map.
  23. frame3d = Frame3D()
  24. show_error(self.camera.capture_3d(frame3d))
  25. depth_map = frame3d.get_depth_map()
  26. print("The size of the depth map is {} (width) * {} (height).".format(
  27. depth_map.width(), depth_map.height()))
  28. depth = depth_map[row * depth_map.width() + col]
  29. print("The depth value of the pixel at ({},{}) is depth :{}mmn".
  30. format(row, col, depth.z))
  31. Image3d = depth_map.data()
  32. time3 = time.time()
  33. print('grab depth image : '+str((time3-time2)*1000)+'ms')
  34. return Image2d,Image3d
  35. # Obtain the point cloud.
  36. # point_cloud = frame3d.get_untextured_point_cloud()
  37. # print("The size of the point cloud is {} (width) * {} (height).".format(
  38. # point_cloud.width(), point_cloud.height()))
  39. # point_xyz = point_cloud[row * depth_map.width() + col]
  40. # print("The coordinates of the point corresponding to the pixel at ({},{}) is X: {}mm , Y: {}mm, Z: {}mmn".
  41. # format(row, col, point_xyz.x, point_xyz.y, point_xyz.z))

Code de test complet

  1. # With this sample, you can connect to a camera and obtain the 2D image, depth map, and point cloud data.
  2. import time
  3. from mecheye.shared import *
  4. from mecheye.area_scan_3d_camera import *
  5. from mecheye.area_scan_3d_camera_utils import *
  6. import cv2
  7. class ConnectAndCaptureImages(object):
  8. def __init__(self):
  9. self.camera = Camera()
  10. def connect_and_capture(self):
  11. # Obtain the 2D image resolution and the depth map resolution of the camera.
  12. resolution = CameraResolutions()
  13. show_error(self.camera.get_camera_resolutions(resolution))
  14. print_camera_resolution(resolution)
  15. time1 = time.time()
  16. # Obtain the 2D image.
  17. frame2d = Frame2D()
  18. show_error(self.camera.capture_2d(frame2d))
  19. row, col = 222, 222
  20. color_map = frame2d.get_color_image()
  21. print("The size of the 2D image is {} (width) * {} (height).".format(
  22. color_map.width(), color_map.height()))
  23. rgb = color_map[row * color_map.width() + col]
  24. print("The RGB values of the pixel at ({},{}) is R:{},G:{},B{}n".
  25. format(row, col, rgb.b, rgb.g, rgb.r))
  26. Image2d = color_map.data()
  27. time2 = time.time()
  28. print('grab 2d image : '+str((time2-time1)*1000)+'ms')
  29. # if not confirm_capture_3d():
  30. # return
  31. # Obtain the depth map.
  32. frame3d = Frame3D()
  33. show_error(self.camera.capture_3d(frame3d))
  34. depth_map = frame3d.get_depth_map()
  35. print("The size of the depth map is {} (width) * {} (height).".format(
  36. depth_map.width(), depth_map.height()))
  37. depth = depth_map[row * depth_map.width() + col]
  38. print("The depth value of the pixel at ({},{}) is depth :{}mmn".
  39. format(row, col, depth.z))
  40. Image3d = depth_map.data()
  41. time3 = time.time()
  42. print('grab depth image : '+str((time3-time2)*1000)+'ms')
  43. return Image2d,Image3d
  44. # Obtain the point cloud.
  45. # point_cloud = frame3d.get_untextured_point_cloud()
  46. # print("The size of the point cloud is {} (width) * {} (height).".format(
  47. # point_cloud.width(), point_cloud.height()))
  48. # point_xyz = point_cloud[row * depth_map.width() + col]
  49. # print("The coordinates of the point corresponding to the pixel at ({},{}) is X: {}mm , Y: {}mm, Z: {}mmn".
  50. # format(row, col, point_xyz.x, point_xyz.y, point_xyz.z))
  51. def main(self):
  52. # List all available cameras and connect to a camera by the displayed index.
  53. if find_and_connect(self.camera):
  54. d2,d3 = self.connect_and_capture()
  55. self.camera.disconnect()
  56. print("Disconnected from the camera successfully.")
  57. return d2,d3
  58. def GrabImages(self):
  59. d2, d3 = self.connect_and_capture()
  60. return d2, d3
  61. def ConnectCamera(self):
  62. camera_infos = Camera.discover_cameras()
  63. if len(camera_infos) != 1:
  64. print("相机连接出现异常,检查网线")
  65. return
  66. error_status = self.camera.connect(camera_infos[0])
  67. if not error_status.is_ok():
  68. show_error(error_status)
  69. return
  70. def DisConnectCamera(self):
  71. self.camera.disconnect()
  72. print("Disconnected from the camera successfully.")
  73. if __name__ == '__main__':
  74. #pip install MechEyeAPI
  75. print('初始化相机对象')
  76. MechMindGraber = ConnectAndCaptureImages()
  77. # d2,d3 = a.main()
  78. print('连接相机')
  79. MechMindGraber.ConnectCamera()
  80. for i in range(60):
  81. print(str(i)+'rn')
  82. print('采集亮度图和深度图')
  83. d2,d3 = MechMindGraber.GrabImages()
  84. cv2.imshow('1',d2)
  85. cv2.waitKey()
  86. cv2.imshow('1', d3)
  87. cv2.waitKey()
  88. print('断开连接')
  89. MechMindGraber.DisConnectCamera()