Teknologian jakaminen

MechMind-rakenteinen valokamerakuva, joka kaappaa SDK-python-kutsun

2024-07-12

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

Testivaikutus

Mech-Mind strukturoitu valokamera

Mech Mindin strukturoidut valokamerat, erityisesti Mech-Eye-sarja, ovat teollisuustason korkean tarkkuuden 3D-kameroita, joita käytetään laajalti teollisuusautomaatiossa, robottinavigaatiossa, laaduntarkastuksessa ja muilla aloilla. Seuraavassa on yksityiskohtainen analyysi Mech Mind -strukturoidusta valokamerasta:

1. Tuotteen yleiskatsaus

Mech Mindin strukturoidut valokamerat, kuten Mech-Eye PRO, käyttävät nopeaa strukturoitua valotekniikkaa, joka tarjoaa erinomaisen ympäristön valonkestävyyden säilyttäen samalla suuren tarkkuuden ja nopeuden. Nämä kamerat sisältävät yleensä runsaasti näköalgoritmimoduuleja, ja niitä voidaan soveltaa moniin tyypillisiin käytännön skenaarioihin, kuten valmistustyökappaleiden lastaamiseen ja purkamiseen, erittäin tarkkaan paikannukseen, kokoonpanoon, ruuvien kiristämiseen ja akateemiseen tutkimukseen.

2. Toimintaperiaate

Mech Mindin strukturoitu valokamera hyödyntää pääasiassa strukturoidun valoprojisoinnin periaatetta. Ne projisoivat erityisiä kuvioita (kuten laserien tuottamaa rakenteellista valoa) valokuvattavaan kohteeseen, ja kamera tallentaa kohteen ääriviivat ja muodot. Tämä tekniikka voi laskea tarkasti kohteen sijainnin ja muodon analysoimalla valon heijastusta ja taittumista esineeseen.

3. Tuotteen ominaisuudet

  1. Korkean tarkkuuden : Mech Mindin strukturoidulla valokameralla voidaan saada erittäin tarkkoja kolmiulotteisia malleja eri kohteista yhdellä otoksella. Esimerkiksi Mech-Eye PRO:n Z-suuntainen yhden pisteen toistettavuus voi olla 0,05 mm (1,0 metrin etäisyydellä).
  2. suuri nopeus: Kamerassa on nopeat tiedonkeruu- ja käsittelyominaisuudet. Esimerkiksi Mech-Eye PRO:n tyypillinen hakuaika on 0,3–0,6 sekuntia.
  3. Suuri näkökenttä ja suuri syväterävyys: Joillakin malleilla, kuten Mech-Eye Deep 3D -kameralla, on laaja näkökenttä ja suuri syväterävyys, ja niitä voidaan soveltaa useisiin yleisiin pinoamistyyppeihin.
  4. Vahva ympäristön valonkesto: Mech Mindin strukturoitu valokamera pystyy silti ylläpitämään erinomaisia ​​kuvatehosteita voimakkaassa ympäristön valossa (kuten >20000lx).
  5. Joustava käyttöönotto: Kamera on mukautettu useimpiin valtavirran robottimerkkeihin kotimaassa ja ulkomailla, ja se voi saavuttaa mukautettujen robottien täydellisen liikkeenhallinnan.
  6. Avoin ja helppokäyttöinen: Kamera tarjoaa ystävällisen käyttöliittymän ja avoimen API:n helpottaakseen käyttäjien toissijaista kehitystä ja integrointia.
  7. Vakaa ja luotettava: Mech Mindin strukturoiduilla valokameroilla on korkea vakaus ja luotettavuus, kuten Mech-Eye PRO:n keskimääräinen vikojen välinen aika (MTBF) ≥ 40 000 tuntia.

4. Käyttöalueet

Mech Mindin strukturoituja valokameroita käytetään laajalti autoissa, ilmailussa, muottien valmistuksessa, teollisuusautomaatiossa ja muilla aloilla. Autoalalla he voivat saada nopeasti ja tarkasti auton korin pinnan muototiedot ilmailualalla, he voivat saada ilma-aluksen kolmiulotteiset muototiedot, jotka tarjoavat tarkan tietotuen lentokoneen suunnittelua ja valmistusta varten; .

5. Yhteenveto

Mech Mindin strukturoiduilla valokameroilla on tärkeä rooli esimerkiksi teollisuusautomaatiossa ja robottinavigaatiossa niiden suuren tarkkuuden, suuren nopeuden, suuren näkökentän, suuren syväterävyyden, vahvan ympäristön valonkestävyyden sekä vakauden ja luotettavuuden ansiosta. Teknologian jatkuvan kehittymisen ja sovellusskenaarioiden jatkuvan laajentamisen myötä Mech Mindin strukturoitujen valokameroiden odotetaan osoittavan ainutlaatuisen arvonsa useammilla aloilla.

Python-kehitysympäristön määrittäminen

Luo virtuaalinen ympäristö

Lataa opencv-python-paketti

Lataa Mecamander Camera Capture -paketti

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

Vaiheanalyysi

Yhdistä kamera

  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

Irrota kamera

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

Kerää 2D-kuvia ja 3D-kuvia

  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))

Täydellinen testikoodi

  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()