Skip to content

Commit 86943f1

Browse files
committed
add laiyu xyz controller and pipette, add laiyu camera USB/Wifi
1 parent 152d3a7 commit 86943f1

25 files changed

Lines changed: 3245 additions & 0 deletions

unilabos/devices/cameraSII/cameraDriver.py

Lines changed: 712 additions & 0 deletions
Large diffs are not rendered by default.

unilabos/devices/cameraSII/cameraUSB.py

Lines changed: 401 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import cv2
2+
3+
# 推荐把 @ 进行 URL 编码:@ -> %40
4+
RTSP_URL = "rtsp://admin:admin123@192.168.31.164:554/stream1"
5+
OUTPUT_IMAGE = "rtsp_test_frame.jpg"
6+
7+
def main():
8+
print(f"尝试连接 RTSP 流: {RTSP_URL}")
9+
cap = cv2.VideoCapture(RTSP_URL)
10+
11+
if not cap.isOpened():
12+
print("错误:无法打开 RTSP 流,请检查:")
13+
print(" 1. IP/端口是否正确")
14+
print(" 2. 账号密码(尤其是 @ 是否已转成 %40)是否正确")
15+
print(" 3. 摄像头是否允许当前主机访问(同一网段、防火墙等)")
16+
return
17+
18+
print("连接成功,开始读取一帧...")
19+
ret, frame = cap.read()
20+
21+
if not ret or frame is None:
22+
print("错误:已连接但未能读取到帧数据(可能是码流未开启或网络抖动)")
23+
cap.release()
24+
return
25+
26+
# 保存当前帧
27+
success = cv2.imwrite(OUTPUT_IMAGE, frame)
28+
cap.release()
29+
30+
if success:
31+
print(f"成功截取一帧并保存为: {OUTPUT_IMAGE}")
32+
else:
33+
print("错误:写入图片失败,请检查磁盘权限/路径")
34+
35+
if __name__ == "__main__":
36+
main()
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# run_camera_push.py
2+
import time
3+
from cameraDriver import CameraController # 这里根据你的文件名调整
4+
5+
if __name__ == "__main__":
6+
controller = CameraController(
7+
host_id="demo-host",
8+
signal_backend_url="wss://sciol.ac.cn/api/realtime/signal/host",
9+
rtmp_url="rtmp://srs.sciol.ac.cn:4499/live/camera-01",
10+
webrtc_api="https://srs.sciol.ac.cn/rtc/v1/play/",
11+
webrtc_stream_url="webrtc://srs.sciol.ac.cn:4500/live/camera-01",
12+
camera_rtsp_url="rtsp://admin:admin123@192.168.31.164:554/stream1",
13+
)
14+
15+
try:
16+
while True:
17+
status = controller.get_status()
18+
print(status)
19+
time.sleep(5)
20+
except KeyboardInterrupt:
21+
controller.stop()
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
4+
"""
5+
使用 CameraController 来测试 PTZ:
6+
让摄像头按顺序向下、向上、向左、向右运动几次。
7+
"""
8+
9+
import time
10+
import sys
11+
12+
# 根据你的工程结构修改导入路径:
13+
# 假设 CameraController 定义在 cameraController.py 里
14+
from cameraDriver import CameraController
15+
16+
17+
def main():
18+
# === 根据你的实际情况填 IP、端口、账号密码 ===
19+
ptz_host = "192.168.31.164"
20+
ptz_port = 2020 # 注意要和你单独测试 PTZController 时保持一致
21+
ptz_user = "admin"
22+
ptz_password = "admin123"
23+
24+
# 1. 创建 CameraController 实例
25+
cam = CameraController(
26+
# 其他摄像机相关参数按你类的 __init__ 来补充
27+
ptz_host=ptz_host,
28+
ptz_port=ptz_port,
29+
ptz_user=ptz_user,
30+
ptz_password=ptz_password,
31+
)
32+
33+
# 2. 启动 / 初始化(如果你的 CameraController 有 start(config) 之类的接口)
34+
# 这里给一个最小的 config,重点是 PTZ 相关字段
35+
config = {
36+
"ptz_host": ptz_host,
37+
"ptz_port": ptz_port,
38+
"ptz_user": ptz_user,
39+
"ptz_password": ptz_password,
40+
}
41+
42+
try:
43+
cam.start(config)
44+
except Exception as e:
45+
print(f"[TEST] CameraController start() 失败: {e}", file=sys.stderr)
46+
return
47+
48+
# 这里可以判断一下内部 _ptz 是否初始化成功(如果你对 CameraController 做了封装)
49+
if getattr(cam, "_ptz", None) is None:
50+
print("[TEST] CameraController 内部 PTZ 未初始化成功,请检查 ptz_host/port/user/password 配置。", file=sys.stderr)
51+
return
52+
53+
# 3. 依次调用 CameraController 的 PTZ 方法
54+
# 这里假设你在 CameraController 中提供了这几个对外方法:
55+
# ptz_move_down / ptz_move_up / ptz_move_left / ptz_move_right
56+
# 如果你命名不一样,把下面调用名改成你的即可。
57+
58+
print("向下移动(通过 CameraController)...")
59+
cam.ptz_move_down(speed=0.5, duration=1.0)
60+
time.sleep(1)
61+
62+
print("向上移动(通过 CameraController)...")
63+
cam.ptz_move_up(speed=0.5, duration=1.0)
64+
time.sleep(1)
65+
66+
print("向左移动(通过 CameraController)...")
67+
cam.ptz_move_left(speed=0.5, duration=1.0)
68+
time.sleep(1)
69+
70+
print("向右移动(通过 CameraController)...")
71+
cam.ptz_move_right(speed=0.5, duration=1.0)
72+
time.sleep(1)
73+
74+
print("测试结束。")
75+
76+
77+
if __name__ == "__main__":
78+
main()
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
4+
"""
5+
测试 cameraDriver.py中的 PTZController 类,让摄像头按顺序运动几次
6+
"""
7+
8+
import time
9+
10+
from cameraDriver import PTZController
11+
12+
13+
def main():
14+
# 根据你的实际情况填 IP、端口、账号密码
15+
host = "192.168.31.164"
16+
port = 80
17+
user = "admin"
18+
password = "admin123"
19+
20+
ptz = PTZController(host=host, port=port, user=user, password=password)
21+
22+
# 1. 连接摄像头
23+
if not ptz.connect():
24+
print("连接 PTZ 失败,检查 IP/用户名/密码/端口。")
25+
return
26+
27+
# 2. 依次测试几个动作
28+
# 每个动作之间 sleep 一下方便观察
29+
30+
print("向下移动...")
31+
ptz.move_down(speed=0.5, duration=1.0)
32+
time.sleep(1)
33+
34+
print("向上移动...")
35+
ptz.move_up(speed=0.5, duration=1.0)
36+
time.sleep(1)
37+
38+
print("向左移动...")
39+
ptz.move_left(speed=0.5, duration=1.0)
40+
time.sleep(1)
41+
42+
print("向右移动...")
43+
ptz.move_right(speed=0.5, duration=1.0)
44+
time.sleep(1)
45+
46+
print("测试结束。")
47+
48+
49+
if __name__ == "__main__":
50+
main()
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/usr/bin/env python3
2+
import time
3+
import json
4+
5+
from cameraUSB import CameraController
6+
7+
8+
def main():
9+
# 按你的实际情况改
10+
cfg = dict(
11+
host_id="demo-host",
12+
signal_backend_url="wss://sciol.ac.cn/api/realtime/signal/host",
13+
rtmp_url="rtmp://srs.sciol.ac.cn:4499/live/camera-01",
14+
webrtc_api="https://srs.sciol.ac.cn/rtc/v1/play/",
15+
webrtc_stream_url="webrtc://srs.sciol.ac.cn:4500/live/camera-01",
16+
video_device="/dev/video7",
17+
width=1280,
18+
height=720,
19+
fps=30,
20+
video_bitrate="1500k",
21+
audio_device=None,
22+
)
23+
24+
c = CameraController(**cfg)
25+
26+
# 可选:如果你不想依赖 __init__ 自动 start,可以这样显式调用:
27+
# c = CameraController(host_id=cfg["host_id"])
28+
# c.start(cfg)
29+
30+
run_seconds = 30 # 测试运行时长
31+
t0 = time.time()
32+
33+
try:
34+
while True:
35+
st = c.get_status()
36+
print(json.dumps(st, ensure_ascii=False, indent=2))
37+
38+
if time.time() - t0 >= run_seconds:
39+
break
40+
41+
time.sleep(2)
42+
except KeyboardInterrupt:
43+
print("Interrupted, stopping...")
44+
finally:
45+
print("Stopping controller...")
46+
c.stop()
47+
print("Done.")
48+
49+
50+
if __name__ == "__main__":
51+
main()

0 commit comments

Comments
 (0)