修改了深度相机的接口代码
This commit is contained in:
parent
480750cfcc
commit
f437ff4dba
203373
Log/OrbbecSDK.log.txt
203373
Log/OrbbecSDK.log.txt
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -918,12 +918,12 @@ if __name__ == '__main__':
|
|||||||
# 简单的测试事件处理器
|
# 简单的测试事件处理器
|
||||||
@socketio.on('connect')
|
@socketio.on('connect')
|
||||||
def handle_connect():
|
def handle_connect():
|
||||||
print('CLIENT CONNECTED!!!', flush=True)
|
# print('CLIENT CONNECTED!!!', flush=True) # 控制台打印测试已关闭
|
||||||
logger.info('客户端已连接')
|
logger.info('客户端已连接')
|
||||||
|
|
||||||
@socketio.on('disconnect')
|
@socketio.on('disconnect')
|
||||||
def handle_disconnect():
|
def handle_disconnect():
|
||||||
print('CLIENT DISCONNECTED!!!', flush=True)
|
# print('CLIENT DISCONNECTED!!!', flush=True) # 控制台打印测试已关闭
|
||||||
logger.info('客户端已断开连接')
|
logger.info('客户端已断开连接')
|
||||||
|
|
||||||
# @socketio.on('start_video')
|
# @socketio.on('start_video')
|
||||||
|
Binary file not shown.
@ -30,7 +30,7 @@ from database import DatabaseManager
|
|||||||
try:
|
try:
|
||||||
import pykinect_azure as pykinect
|
import pykinect_azure as pykinect
|
||||||
# 重新启用FemtoBolt功能,使用正确的Orbbec SDK K4A Wrapper路径
|
# 重新启用FemtoBolt功能,使用正确的Orbbec SDK K4A Wrapper路径
|
||||||
FEMTOBOLT_AVAILABLE = True
|
FEMTOBOLT_AVAILABLE = False
|
||||||
print("信息: pykinect_azure库已安装,FemtoBolt深度相机功能已启用")
|
print("信息: pykinect_azure库已安装,FemtoBolt深度相机功能已启用")
|
||||||
print("使用Orbbec SDK K4A Wrapper以确保与FemtoBolt设备的兼容性")
|
print("使用Orbbec SDK K4A Wrapper以确保与FemtoBolt设备的兼容性")
|
||||||
except ImportError:
|
except ImportError:
|
||||||
@ -659,11 +659,30 @@ class DeviceManager:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
# 检查是否已经在推流
|
||||||
|
if self.femtobolt_streaming:
|
||||||
|
logger.warning('FemtoBolt深度相机推流已在运行')
|
||||||
|
return True
|
||||||
|
|
||||||
|
# 重置停止事件
|
||||||
|
self.streaming_stop_event.clear()
|
||||||
|
|
||||||
|
# 设置推流标志
|
||||||
self.femtobolt_streaming = True
|
self.femtobolt_streaming = True
|
||||||
|
|
||||||
|
# 启动推流线程
|
||||||
|
self.femtobolt_streaming_thread = threading.Thread(
|
||||||
|
target=self._femtobolt_streaming_thread,
|
||||||
|
daemon=True,
|
||||||
|
name='FemtoBoltStreamingThread'
|
||||||
|
)
|
||||||
|
self.femtobolt_streaming_thread.start()
|
||||||
|
|
||||||
logger.info('FemtoBolt深度相机推流已开始')
|
logger.info('FemtoBolt深度相机推流已开始')
|
||||||
return True
|
return True
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f'FemtoBolt深度相机推流启动失败: {e}')
|
logger.error(f'FemtoBolt深度相机推流启动失败: {e}')
|
||||||
|
self.femtobolt_streaming = False
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def stop_femtobolt_stream(self):
|
def stop_femtobolt_stream(self):
|
||||||
@ -815,7 +834,7 @@ class DeviceManager:
|
|||||||
logger.error(f'摄像头帧推送失败: {e}')
|
logger.error(f'摄像头帧推送失败: {e}')
|
||||||
|
|
||||||
# 控制帧率
|
# 控制帧率
|
||||||
time.sleep(1/30) # 30 FPS
|
# time.sleep(1/30) # 30 FPS
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f'摄像头推流线程异常: {e}')
|
logger.error(f'摄像头推流线程异常: {e}')
|
||||||
@ -833,32 +852,37 @@ class DeviceManager:
|
|||||||
# 获取FemtoBolt帧
|
# 获取FemtoBolt帧
|
||||||
capture = self.femtobolt_camera.update()
|
capture = self.femtobolt_camera.update()
|
||||||
|
|
||||||
# 检查capture是否有效以及color图像是否存在
|
# 检查capture是否有效并获取彩色深度图像
|
||||||
if capture is not None and capture.color is not None:
|
if capture is not None:
|
||||||
# 转换颜色格式
|
ret, color_image = capture.get_transformed_colored_depth_image()
|
||||||
color_image = capture.color
|
if ret and color_image is not None:
|
||||||
color_image = cv2.cvtColor(color_image, cv2.COLOR_BGRA2BGR)
|
# 转换颜色格式(如果需要)
|
||||||
|
if len(color_image.shape) == 3 and color_image.shape[2] == 4:
|
||||||
# 调整帧大小
|
color_image = cv2.cvtColor(color_image, cv2.COLOR_BGRA2BGR)
|
||||||
height, width = color_image.shape[:2]
|
elif len(color_image.shape) == 3 and color_image.shape[2] == 3:
|
||||||
if width > 960:
|
# 已经是BGR格式,无需转换
|
||||||
scale = 960 / width
|
pass
|
||||||
new_width = 960
|
|
||||||
new_height = int(height * scale)
|
# 调整帧大小
|
||||||
color_image = cv2.resize(color_image, (new_width, new_height))
|
height, width = color_image.shape[:2]
|
||||||
|
if width > 960:
|
||||||
# JPEG编码
|
scale = 960 / width
|
||||||
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 80]
|
new_width = 960
|
||||||
success, buffer = cv2.imencode('.jpg', color_image, encode_param)
|
new_height = int(height * scale)
|
||||||
|
color_image = cv2.resize(color_image, (new_width, new_height))
|
||||||
if success and self.socketio:
|
|
||||||
jpg_as_text = base64.b64encode(buffer).decode('utf-8')
|
# JPEG编码
|
||||||
self.socketio.emit('depth_camera_frame', {
|
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 80]
|
||||||
'image': jpg_as_text,
|
success, buffer = cv2.imencode('.jpg', color_image, encode_param)
|
||||||
'frame_id': frame_count,
|
|
||||||
'timestamp': time.time()
|
if success and self.socketio:
|
||||||
})
|
jpg_as_text = base64.b64encode(buffer).decode('utf-8')
|
||||||
frame_count += 1
|
self.socketio.emit('depth_camera_frame', {
|
||||||
|
'image': jpg_as_text,
|
||||||
|
'frame_id': frame_count,
|
||||||
|
'timestamp': time.time()
|
||||||
|
})
|
||||||
|
frame_count += 1
|
||||||
else:
|
else:
|
||||||
# 如果没有获取到有效帧,短暂等待后继续
|
# 如果没有获取到有效帧,短暂等待后继续
|
||||||
time.sleep(0.01)
|
time.sleep(0.01)
|
||||||
|
@ -43,7 +43,7 @@ class AzureKinectImageCapture:
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.device = None
|
self.device = None
|
||||||
self.current_mode = 1 # 1:彩色, 2:深度, 3:红外, 4:彩色深度
|
self.current_mode = 4 # 1:彩色, 2:深度, 3:红外, 4:彩色深度
|
||||||
self.save_counter = 0
|
self.save_counter = 0
|
||||||
|
|
||||||
# 创建保存图像的目录
|
# 创建保存图像的目录
|
||||||
|
Loading…
Reference in New Issue
Block a user