150 lines
4.7 KiB
Python
150 lines
4.7 KiB
Python
|
|
#!/usr/bin/env python
|
|||
|
|
# -*- coding: UTF-8 -*-
|
|||
|
|
'''
|
|||
|
|
@Project :my_work
|
|||
|
|
@File :camera.py
|
|||
|
|
@IDE :PyCharm
|
|||
|
|
@Author :hjw
|
|||
|
|
@Date :2024/8/13 11:34
|
|||
|
|
'''
|
|||
|
|
import PyRVC as RVC
|
|||
|
|
import numpy as np
|
|||
|
|
|
|||
|
|
class camera_rvc:
|
|||
|
|
|
|||
|
|
def __init__(self):
|
|||
|
|
self.caminit_isok = False
|
|||
|
|
RVC.SystemInit()
|
|||
|
|
|
|||
|
|
# Choose RVC X Camera type (USB, GigE or All)
|
|||
|
|
opt = RVC.SystemListDeviceTypeEnum.GigE
|
|||
|
|
|
|||
|
|
# Scan all RVC X Camera devices.
|
|||
|
|
ret, devices = RVC.SystemListDevices(opt)
|
|||
|
|
print("RVC X Camera devices number:%d" % len(devices))
|
|||
|
|
|
|||
|
|
# Find whether any RVC X Camera is connected or not.
|
|||
|
|
if len(devices) == 0:
|
|||
|
|
print("Can not find any RVC X Camera!")
|
|||
|
|
RVC.SystemShutdown()
|
|||
|
|
else:
|
|||
|
|
print("devices size = %d" % len(devices))
|
|||
|
|
|
|||
|
|
# Create a RVC X Camera and choose use left side camera.
|
|||
|
|
self.x = RVC.X1.Create(devices[0], RVC.CameraID_Left)
|
|||
|
|
# x = RVC.X1.Create(devices[0], RVC.CameraID_Right)
|
|||
|
|
|
|||
|
|
# Test RVC X Camera is valid or not.
|
|||
|
|
if self.x.IsValid() == True:
|
|||
|
|
print("RVC X Camera is valid!")
|
|||
|
|
# Open RVC X Camera.
|
|||
|
|
ret1 = self.x.Open()
|
|||
|
|
# Test RVC X Camera is opened or not.
|
|||
|
|
if ret1 and self.x.IsOpen() == True:
|
|||
|
|
print("RVC X Camera is opened!")
|
|||
|
|
self.caminit_isok = True
|
|||
|
|
else:
|
|||
|
|
print("RVC X Camera is not opened!")
|
|||
|
|
RVC.X1.Destroy(self.x)
|
|||
|
|
RVC.SystemShutdown()
|
|||
|
|
self.caminit_isok = False
|
|||
|
|
else:
|
|||
|
|
print("RVC X Camera is not valid!")
|
|||
|
|
RVC.X1.Destroy(self.x)
|
|||
|
|
RVC.SystemShutdown()
|
|||
|
|
self.caminit_isok = False
|
|||
|
|
|
|||
|
|
|
|||
|
|
def get_img(self):
|
|||
|
|
""
|
|||
|
|
'''
|
|||
|
|
:param api: None
|
|||
|
|
:return: ret ,img
|
|||
|
|
'''
|
|||
|
|
if self.caminit_isok == False:
|
|||
|
|
return 0, None
|
|||
|
|
else:
|
|||
|
|
# Capture a point map and a image.
|
|||
|
|
ret2 = self.x.Capture()
|
|||
|
|
# Create saving address of image and point map.
|
|||
|
|
|
|||
|
|
if ret2 == True:
|
|||
|
|
print("RVC X Camera capture successed!")
|
|||
|
|
|
|||
|
|
# Get image data and image size.
|
|||
|
|
img = self.x.GetImage()
|
|||
|
|
# Convert image to array and save it.
|
|||
|
|
img = np.array(img, copy=False)
|
|||
|
|
return 1, img
|
|||
|
|
else:
|
|||
|
|
print("RVC X Camera capture failed!")
|
|||
|
|
self.x.Close()
|
|||
|
|
RVC.X1.Destroy(self.x)
|
|||
|
|
RVC.SystemShutdown()
|
|||
|
|
return 0, None
|
|||
|
|
|
|||
|
|
def get_point_map(self):
|
|||
|
|
""
|
|||
|
|
'''
|
|||
|
|
:param api: None
|
|||
|
|
:return: img
|
|||
|
|
'''
|
|||
|
|
if self.caminit_isok == False:
|
|||
|
|
return 0, None
|
|||
|
|
else:
|
|||
|
|
# Capture a point map and a image.
|
|||
|
|
ret2 = self.x.Capture()
|
|||
|
|
# Create saving address of image and point map.
|
|||
|
|
|
|||
|
|
if ret2 == True:
|
|||
|
|
print("RVC X Camera capture successed!")
|
|||
|
|
# Convert point map (m) to array and save it.
|
|||
|
|
pm = np.array(self.x.GetPointMap(), copy=False)
|
|||
|
|
return 1, pm
|
|||
|
|
else:
|
|||
|
|
print("RVC X Camera capture failed!")
|
|||
|
|
self.x.Close()
|
|||
|
|
RVC.X1.Destroy(self.x)
|
|||
|
|
RVC.SystemShutdown()
|
|||
|
|
return 0, None
|
|||
|
|
|
|||
|
|
def get_img_and_point_map(self):
|
|||
|
|
""
|
|||
|
|
'''
|
|||
|
|
:param api: None
|
|||
|
|
:return: ret , img, point_map
|
|||
|
|
'''
|
|||
|
|
if self.caminit_isok == False:
|
|||
|
|
return 0, None, None
|
|||
|
|
else:
|
|||
|
|
# Capture a point map and a image.
|
|||
|
|
ret2 = self.x.Capture()
|
|||
|
|
# Create saving address of image and point map.
|
|||
|
|
|
|||
|
|
if ret2 == True:
|
|||
|
|
print("RVC X Camera capture successed!")
|
|||
|
|
|
|||
|
|
# Get image data and image size.
|
|||
|
|
img = self.x.GetImage()
|
|||
|
|
# Convert image to array and save it.
|
|||
|
|
img = np.array(img, copy=False)
|
|||
|
|
|
|||
|
|
# Convert point map (m) to array and save it.
|
|||
|
|
pm = np.array(self.x.GetPointMap(), copy=False)
|
|||
|
|
return 1, img, pm
|
|||
|
|
else:
|
|||
|
|
print("RVC X Camera capture failed!")
|
|||
|
|
self.x.Close()
|
|||
|
|
RVC.X1.Destroy(self.x)
|
|||
|
|
RVC.SystemShutdown()
|
|||
|
|
return 0, None, None
|
|||
|
|
|
|||
|
|
def release(self):
|
|||
|
|
if self.caminit_isok == False:
|
|||
|
|
RVC.SystemShutdown()
|
|||
|
|
else:
|
|||
|
|
RVC.X1.Destroy(self.x)
|
|||
|
|
RVC.SystemShutdown()
|
|||
|
|
|
|||
|
|
|