add das
This commit is contained in:
parent
4337b10a87
commit
5727df26c8
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@
|
||||
.venv
|
||||
bak
|
||||
__pycache__
|
||||
@DS
|
||||
@ -15,6 +15,7 @@ dependencies = [
|
||||
"scipy>=1.14.1",
|
||||
"tqdm>=4.67.1",
|
||||
"vtk>=9.4.0",
|
||||
"jupyter>=1.1.1",
|
||||
]
|
||||
|
||||
[tool.uv]
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import zmq
|
||||
from zmq import Context
|
||||
|
||||
from Msg import Msg
|
||||
from utils.Msg import Msg
|
||||
|
||||
|
||||
class BusClient:
|
||||
|
||||
@ -1,15 +1,14 @@
|
||||
import fractions
|
||||
import logging
|
||||
import math
|
||||
from itertools import tee
|
||||
from struct import pack, unpack_from
|
||||
from typing import Iterator, List, Optional, Sequence, Tuple, Type, TypeVar
|
||||
|
||||
import av
|
||||
import math
|
||||
from aiortc.codecs.base import Decoder, Encoder
|
||||
from aiortc.jitterbuffer import JitterFrame
|
||||
from aiortc.mediastreams import VIDEO_TIME_BASE, convert_timebase
|
||||
from aiortc.codecs.base import Decoder, Encoder
|
||||
|
||||
from av.frame import Frame
|
||||
from av.packet import Packet
|
||||
|
||||
|
||||
@ -4,9 +4,9 @@ from typing import Callable
|
||||
import cupy as cp
|
||||
import numpy as np
|
||||
|
||||
from ds.Config import DeviceConfig
|
||||
from imaging.dist import refraction_dist, direct_dist
|
||||
from imaging.kernels import dist_mat_to_yids, dist_mat_to_yids_pwi
|
||||
from beamformer.dist import refraction_dist, direct_dist
|
||||
from beamformer.kernels import dist_mat_to_yids, dist_mat_to_yids_pwi
|
||||
from utils.Config import DeviceConfig
|
||||
|
||||
|
||||
def repeat_range_in_axis(shape: tuple, axis: int,p=cp):
|
||||
|
||||
@ -5,8 +5,8 @@ where f(y,x) is the pixel distance in echo pulse RF signal between point(0,0) an
|
||||
import numpy as np
|
||||
from scipy.optimize import fsolve
|
||||
|
||||
from ds.Config import DeviceConfig
|
||||
from utils.filename import DS
|
||||
from config import DS
|
||||
from utils.Config import DeviceConfig
|
||||
|
||||
|
||||
def refraction_dist(dev_cfg=DeviceConfig()):
|
||||
|
||||
@ -7,9 +7,9 @@ xri: x receive index
|
||||
xrs: x receive shape
|
||||
"""
|
||||
import cupy as cp
|
||||
from beamformer.dist import direct_dist
|
||||
|
||||
from ds.Config import DeviceConfig
|
||||
from imaging.dist import direct_dist
|
||||
from utils.Config import DeviceConfig
|
||||
|
||||
|
||||
def dist_mat_to_yids(dist_mat: cp.ndarray, dev_cfg=DeviceConfig()):
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
from ds.Config import ImagingConfig
|
||||
from imaging.ScanData import ScanData
|
||||
import cupy as cp
|
||||
|
||||
from imaging.das import TFM
|
||||
from beamformer.das import TFM
|
||||
from utils.Config import ImagingConfig
|
||||
from utils.ScanData import ScanData
|
||||
|
||||
tfm_cache = [None]
|
||||
|
||||
|
||||
@ -1,3 +1,19 @@
|
||||
socket1 = '127.0.0.1:5003'
|
||||
video_height = 1920
|
||||
video_width = 1080
|
||||
from pathlib import Path
|
||||
|
||||
SOCKET1 = '127.0.0.1:5003'
|
||||
VIDEO_HEIGHT = 1920
|
||||
VIDEO_WIDTH = 1080
|
||||
|
||||
BASE = Path(__file__).parent.parent
|
||||
DS = BASE / '@DS'
|
||||
DOC = BASE / 'doc'
|
||||
DS.mkdir(exist_ok=True, parents=True)
|
||||
DOC.mkdir(exist_ok=True, parents=True)
|
||||
|
||||
CONFIG_FOLDER = BASE / 'config'
|
||||
LAST_CONFIG = BASE / 'config' / 'last_imaging_config.json'
|
||||
|
||||
CONFIG_FOLDER.mkdir(exist_ok=True)
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(BASE)
|
||||
@ -1,10 +1,9 @@
|
||||
import cv2
|
||||
import numpy as np
|
||||
import zmq
|
||||
import cupy as cp
|
||||
|
||||
from Msg import BMMsg, ImageArgMsg, KillMsg
|
||||
from config import socket1, video_width, video_height
|
||||
from utils.Msg import BMMsg, ImageArgMsg, KillMsg
|
||||
from config import SOCKET1, VIDEO_WIDTH, VIDEO_HEIGHT
|
||||
from nodes.Node import Node
|
||||
|
||||
|
||||
@ -26,14 +25,14 @@ class Beamformer(Node):
|
||||
b *= 255
|
||||
b = b.astype(np.uint8)
|
||||
b = cv2.rotate(b, cv2.ROTATE_90_CLOCKWISE)
|
||||
b = cv2.resize(b, (video_width, video_height))
|
||||
b = cv2.resize(b, (VIDEO_WIDTH, VIDEO_HEIGHT))
|
||||
b = cv2.cvtColor(b, cv2.COLOR_GRAY2RGBA, b)
|
||||
self.send(BMMsg(0, b.tobytes()))
|
||||
|
||||
def loop(self):
|
||||
s2 = self.context.socket(zmq.PULL)
|
||||
s2.setsockopt(zmq.CONFLATE, 1)
|
||||
s2.connect(f"tcp://{socket1}")
|
||||
s2.connect(f"tcp://{SOCKET1}")
|
||||
self.c.poller.register(s2, zmq.POLLIN)
|
||||
buffer = None
|
||||
while True:
|
||||
|
||||
@ -4,7 +4,7 @@ import zmq
|
||||
from zmq import ContextTerminated
|
||||
|
||||
from nodes.Node import Node
|
||||
from Msg import KillMsg
|
||||
from utils.Msg import KillMsg
|
||||
|
||||
|
||||
class Broker(Node):
|
||||
|
||||
@ -1,15 +1,9 @@
|
||||
import sys
|
||||
|
||||
import cv2
|
||||
import numpy as np
|
||||
import zmq
|
||||
|
||||
from PyQt6.QtWidgets import QMainWindow, QApplication
|
||||
|
||||
from Image import Ui_MainWindow
|
||||
from RfFile import RfFolder
|
||||
from Msg import StrMsg, MoveAxisMsg, KillMsg, Msg, ImageArgMsg, BMMsg
|
||||
from config import video_height, video_width
|
||||
from utils.Msg import BMMsg
|
||||
from config import VIDEO_HEIGHT, VIDEO_WIDTH
|
||||
from nodes.Node import Node
|
||||
|
||||
|
||||
@ -18,7 +12,7 @@ class ImageCV(Node):
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.buffer = np.zeros((video_height, video_width, 3), dtype=np.uint8) + 128
|
||||
self.buffer = np.zeros((VIDEO_HEIGHT, VIDEO_WIDTH, 3), dtype=np.uint8) + 128
|
||||
|
||||
def loop(self):
|
||||
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
|
||||
@ -28,7 +22,7 @@ class ImageCV(Node):
|
||||
r = self.recv()
|
||||
if isinstance(r, BMMsg):
|
||||
b = np.frombuffer(r.data, dtype=np.uint8)
|
||||
b = np.reshape(b, (video_height, video_width, 4))
|
||||
b = np.reshape(b, (VIDEO_HEIGHT, VIDEO_WIDTH, 4))
|
||||
self.buffer = b
|
||||
cv2.imshow('image', self.buffer)
|
||||
cv2.waitKey(1)
|
||||
|
||||
@ -1,17 +1,14 @@
|
||||
import sys
|
||||
|
||||
import numpy as np
|
||||
import zmq
|
||||
from PyQt6 import QtCore
|
||||
from PyQt6.QtCore import QByteArray
|
||||
from PyQt6.QtGui import QImage, QPixmap
|
||||
from PyQt6.QtWidgets import QMainWindow, QApplication
|
||||
|
||||
from Image import Ui_MainWindow
|
||||
from RfFile import RfFolder
|
||||
from Msg import StrMsg, MoveAxisMsg, KillMsg, Msg, ImageArgMsg, BMMsg
|
||||
from utils.Msg import KillMsg, Msg, ImageArgMsg, BMMsg
|
||||
from ZMQReceiver import ZMQReceiver
|
||||
from config import video_height, video_width
|
||||
from config import VIDEO_HEIGHT, VIDEO_WIDTH
|
||||
from nodes.Node import Node
|
||||
|
||||
|
||||
@ -34,7 +31,7 @@ class Adv(QMainWindow, Ui_MainWindow):
|
||||
# height, width, channel = cvImg.shape
|
||||
# bytesPerLine = 3 * width
|
||||
# qImg = QImage(cvImg.data, width, height, bytesPerLine, QImage.Format.Format_RGB888).rgbSwapped()
|
||||
qImg = QImage(msg.data, video_width, video_height, 4 * video_width, QImage.Format.Format_RGB888).rgbSwapped()
|
||||
qImg = QImage(msg.data, VIDEO_WIDTH, VIDEO_HEIGHT, 4 * VIDEO_WIDTH, QImage.Format.Format_RGB888).rgbSwapped()
|
||||
self.label.setPixmap(QPixmap(qImg))
|
||||
|
||||
@QtCore.pyqtSlot(int)
|
||||
|
||||
@ -1,8 +1,7 @@
|
||||
import numpy as np
|
||||
import zmq
|
||||
|
||||
from RfFile import RfFolder
|
||||
from Msg import StrMsg, MoveAxisMsg, KillMsg
|
||||
from utils.RfFile import RfFolder
|
||||
from utils.Msg import MoveAxisMsg, KillMsg
|
||||
from nodes.Node import Node
|
||||
|
||||
|
||||
|
||||
@ -1,14 +1,11 @@
|
||||
import sys
|
||||
|
||||
import numpy as np
|
||||
import zmq
|
||||
from PyQt6 import QtCore
|
||||
from PyQt6.QtCore import QByteArray
|
||||
from PyQt6.QtWidgets import QMainWindow, QApplication
|
||||
|
||||
from Main import Ui_MainWindow
|
||||
from RfFile import RfFolder
|
||||
from Msg import StrMsg, MoveAxisMsg, KillMsg, Msg, ImageArgMsg
|
||||
from utils.Msg import KillMsg, Msg, ImageArgMsg
|
||||
from ZMQReceiver import ZMQReceiver
|
||||
from nodes.Node import Node
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ from abc import abstractmethod
|
||||
import zmq
|
||||
|
||||
from BusClient import BusClient
|
||||
from Msg import Msg, KillMsg
|
||||
from utils.Msg import Msg, KillMsg
|
||||
|
||||
|
||||
class Node:
|
||||
|
||||
@ -9,7 +9,6 @@ from fractions import Fraction
|
||||
import aiohttp
|
||||
import aiohttp_cors
|
||||
import aiortc.rtcrtpsender
|
||||
import cv2
|
||||
import numpy as np
|
||||
import zmq
|
||||
from aiohttp import web, WSMessage
|
||||
@ -19,8 +18,8 @@ from av import VideoFrame
|
||||
|
||||
import H264NV
|
||||
from BusClient import BusClient
|
||||
from Msg import BMMsg, Msg, TickMsg, KillMsg, StrMsg, MoveAxisMsg, ImageArgMsg
|
||||
from config import video_width, video_height
|
||||
from utils.Msg import BMMsg, Msg, KillMsg, MoveAxisMsg, ImageArgMsg
|
||||
from config import VIDEO_WIDTH, VIDEO_HEIGHT
|
||||
|
||||
ROOT = os.path.dirname(__file__)
|
||||
from nodes.Node import Node
|
||||
@ -29,7 +28,7 @@ web.WebSocketResponse()
|
||||
|
||||
|
||||
def generate_placeholder():
|
||||
z = np.zeros((video_height, video_width, 4), dtype=np.uint8)
|
||||
z = np.zeros((VIDEO_HEIGHT, VIDEO_WIDTH, 4), dtype=np.uint8)
|
||||
z[:, :, 3] = 0
|
||||
z[:, :, :3] = 128
|
||||
return z.tobytes()
|
||||
@ -58,7 +57,7 @@ class WebRTC(Node):
|
||||
msg: BMMsg = Msg.decode_msg(events[0][0].recv())
|
||||
self.buffer = msg.data
|
||||
|
||||
frame = VideoFrame.from_bytes(self.buffer, video_width, video_height)
|
||||
frame = VideoFrame.from_bytes(self.buffer, VIDEO_WIDTH, VIDEO_HEIGHT)
|
||||
frame.time_base = Fraction(1, 60)
|
||||
frame.pts = self.pts
|
||||
self.pts += 1
|
||||
|
||||
103
src/rtcserver.py
103
src/rtcserver.py
@ -1,103 +0,0 @@
|
||||
import asyncio
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
from fractions import Fraction
|
||||
|
||||
import aiohttp_cors
|
||||
import aiortc.rtcrtpsender
|
||||
import zmq
|
||||
from aiohttp import web
|
||||
from aiortc import MediaStreamTrack, RTCPeerConnection, RTCSessionDescription, RTCConfiguration, RTCRtpCodecCapability
|
||||
|
||||
from av import VideoFrame
|
||||
|
||||
import H264NV
|
||||
|
||||
ROOT = os.path.dirname(__file__)
|
||||
|
||||
|
||||
class PlayerStreamTrackx(MediaStreamTrack):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
context = zmq.Context()
|
||||
self.socket = context.socket(zmq.PULL)
|
||||
self.socket.bind("tcp://*:5555")
|
||||
self.kind = 'video'
|
||||
self.pts = 0
|
||||
|
||||
async def recv(self):
|
||||
frame = VideoFrame.from_bytes(self.socket.recv(), 1920, 1080)
|
||||
frame.time_base = Fraction(1, 120)
|
||||
frame.pts = self.pts
|
||||
self.pts += 1
|
||||
return frame
|
||||
|
||||
|
||||
pcs = set()
|
||||
px = PlayerStreamTrackx()
|
||||
|
||||
|
||||
async def offer(request):
|
||||
params = await request.json()
|
||||
offer = RTCSessionDescription(sdp=params["sdp"], type=params["type"])
|
||||
pc = RTCPeerConnection(RTCConfiguration([]))
|
||||
# print(request.remote)
|
||||
pcs.add(pc)
|
||||
rc = pc.addTransceiver(px, 'sendonly')
|
||||
rc.setCodecPreferences([RTCRtpCodecCapability(mimeType='video/H264',
|
||||
clockRate=90000,
|
||||
channels=None,
|
||||
parameters={
|
||||
'level-asymmetry-allowed': '1',
|
||||
'packetization-mode': '1',
|
||||
'profile-level-id': '42e01f'
|
||||
})])
|
||||
await pc.setRemoteDescription(offer)
|
||||
answer = await pc.createAnswer()
|
||||
await pc.setLocalDescription(answer)
|
||||
return web.Response(
|
||||
content_type="application/json",
|
||||
text=json.dumps(
|
||||
{"sdp": pc.localDescription.sdp, "type": pc.localDescription.type}
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
async def on_shutdown(app):
|
||||
# close peer connections
|
||||
coros = [pc.close() for pc in pcs]
|
||||
await asyncio.gather(*coros)
|
||||
pcs.clear()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
f0 = aiortc.RTCRtpSender.__init__
|
||||
|
||||
|
||||
def f1(*args, **kwargs):
|
||||
f0(*args, **kwargs)
|
||||
if not args[1] == 'audio':
|
||||
args[0]._RTCRtpSender__encoder = H264NV.H264NVENCEncoder()
|
||||
|
||||
|
||||
aiortc.RTCRtpSender.__init__ = f1
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
app = web.Application()
|
||||
app.on_shutdown.append(on_shutdown)
|
||||
app.router.add_post("/offer", offer)
|
||||
|
||||
cors = aiohttp_cors.setup(app, defaults={
|
||||
"*": aiohttp_cors.ResourceOptions(
|
||||
allow_credentials=True,
|
||||
expose_headers="*",
|
||||
allow_headers="*"
|
||||
)
|
||||
})
|
||||
|
||||
for route in list(app.router.routes()):
|
||||
cors.add(route)
|
||||
|
||||
web.run_app(
|
||||
app, access_log=None, host='0.0.0.0', port=8081
|
||||
)
|
||||
@ -1,7 +1,7 @@
|
||||
import dataclasses
|
||||
import json
|
||||
|
||||
from utils.filename import LAST_CONFIG, CONFIG_FOLDER
|
||||
from config import CONFIG_FOLDER
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
import dataclasses
|
||||
import json
|
||||
import struct
|
||||
import time
|
||||
from enum import auto, Enum
|
||||
|
||||
|
||||
|
||||
@ -1,4 +1,7 @@
|
||||
from enum import Enum, auto
|
||||
from pathlib import Path
|
||||
import inspect
|
||||
from typing import Annotated, get_type_hints
|
||||
|
||||
from attr import dataclass
|
||||
|
||||
@ -9,6 +12,7 @@ class RfFolder:
|
||||
D: str
|
||||
L: int = 30
|
||||
C: str = 'PAR'
|
||||
SHAPE = (1500, 256)
|
||||
|
||||
@staticmethod
|
||||
def from_path(p: Path | str) -> 'RfFolder':
|
||||
@ -59,11 +63,144 @@ class RfFile:
|
||||
# print(filename)
|
||||
return self.folder.path / filename
|
||||
|
||||
@property
|
||||
def bin(self):
|
||||
return self.path.read_bytes()
|
||||
|
||||
|
||||
def test2():
|
||||
r = RfFile.from_path('/run/media/lambda/b86dccdc-f134-464b-a310-6575ee9ae85c/cap4/TEST1,L=30,C=PAR/S=925,E=4.bin')
|
||||
print(r)
|
||||
|
||||
|
||||
COMMIT_KEY = 'COMMIT'
|
||||
|
||||
|
||||
class SM:
|
||||
@classmethod
|
||||
@property
|
||||
def p2a(clz):
|
||||
gh = get_type_hints(clz, include_extras=True)
|
||||
return {k: gh[k].__metadata__[0] for k in gh}
|
||||
|
||||
@classmethod
|
||||
@property
|
||||
def p2t(clz):
|
||||
return get_type_hints(clz)
|
||||
|
||||
@classmethod
|
||||
@property
|
||||
def a2p(clz):
|
||||
return {v: k for k, v in clz.p2a.items()}
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
p2a = self.p2a
|
||||
p2t = self.p2t
|
||||
a2p = self.a2p
|
||||
arr = []
|
||||
if COMMIT_KEY in a2p:
|
||||
cp = a2p[COMMIT_KEY]
|
||||
del p2a[cp]
|
||||
arr.append(f'{self.__getattribute__(cp)}')
|
||||
for p in p2a:
|
||||
t = p2t[p]
|
||||
v = self.__getattribute__(p)
|
||||
if issubclass(t, Enum):
|
||||
vs = v.name
|
||||
elif issubclass(t, tuple):
|
||||
vs = f'({' '.join([str(vv) for vv in v])})'
|
||||
else:
|
||||
vs = str(v)
|
||||
arr.append(f'{p2a[p]}={vs}')
|
||||
return ",".join(arr) + '.bin'
|
||||
|
||||
@classmethod
|
||||
def from_name(clz, name: str):
|
||||
p2t = clz.p2t
|
||||
a2p = clz.a2p
|
||||
c = clz()
|
||||
sp = Path(name).stem.split(',')
|
||||
if COMMIT_KEY in a2p:
|
||||
c.__setattr__(a2p[COMMIT_KEY], sp.pop(0))
|
||||
for pv in sp:
|
||||
a, v = pv.split('=')
|
||||
p = a2p[a]
|
||||
t = p2t[p]
|
||||
if issubclass(t, Enum):
|
||||
c.__setattr__(p, t[v])
|
||||
elif issubclass(t, tuple):
|
||||
c.__setattr__(p, tuple(int(i) for i in v[1:-1].split(' ')))
|
||||
else:
|
||||
c.__setattr__(p, t(v))
|
||||
|
||||
return c
|
||||
|
||||
|
||||
class RfFrame:
|
||||
@dataclass
|
||||
class RfFrameMeta(SM):
|
||||
encoder: Annotated[int, 'E'] = None
|
||||
sequence_id: Annotated[int, 'S'] = None # test3
|
||||
robot_x: Annotated[int, 'X'] = None
|
||||
robot_y: Annotated[int, 'Y'] = None
|
||||
robot_z: Annotated[int, 'Z'] = None
|
||||
|
||||
def __init__(self, data: bytes | Path, meta: RfFrameMeta):
|
||||
self.data = data
|
||||
self.meta = meta
|
||||
|
||||
def save(self, folder: Path):
|
||||
(folder / self.meta.name).write_bytes(self.bytes)
|
||||
|
||||
@property
|
||||
def bytes(self):
|
||||
if isinstance(self.data, bytes):
|
||||
return self.data
|
||||
if isinstance(self.data, Path):
|
||||
return self.data.read_bytes()
|
||||
|
||||
|
||||
@dataclass
|
||||
class RfSequenceMeta(SM):
|
||||
class RfSequenceMode(Enum):
|
||||
PWI = auto()
|
||||
TFM = auto()
|
||||
|
||||
commit: Annotated[int, COMMIT_KEY] = None
|
||||
shape: Annotated[tuple, 'S'] = None
|
||||
mode: Annotated[RfSequenceMode, 'M'] = RfSequenceMode.PWI
|
||||
us: Annotated[int, 'U'] = None
|
||||
|
||||
|
||||
class RfSequence:
|
||||
def __init__(self, frames: list[RfFrame], meta: RfSequenceMeta):
|
||||
self.frames = frames
|
||||
self.meta = meta
|
||||
|
||||
@classmethod
|
||||
def from_folder(cls, folder: Path | str) -> 'RfSequence':
|
||||
folder = Path(folder)
|
||||
meta = RfSequenceMeta.from_name(folder.name)
|
||||
arr = []
|
||||
for f in folder.glob('*.bin'):
|
||||
arr.append(RfFrame(f, RfFrame.RfFrameMeta.from_name(f.name)))
|
||||
return RfSequence(arr, meta)
|
||||
|
||||
@property
|
||||
def all(self):
|
||||
pass
|
||||
|
||||
def query(self):
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
test2()
|
||||
t = (1, 2)
|
||||
f = RfSequenceMeta.from_name('123123,U=321,S=(1 2 3),M=PWI')
|
||||
# print(f.commit)
|
||||
print(f.name)
|
||||
# print(RfSequence.RfSequenceMeta.p2t)
|
||||
# f = RfFrame.RfFrameMeta(123, 345)
|
||||
# print(f.name)
|
||||
rs = RfSequence([], RfSequenceMeta())
|
||||
|
||||
@ -2,7 +2,7 @@ import time
|
||||
|
||||
|
||||
from BusClient import BusClient
|
||||
from Msg import KillMsg
|
||||
from utils.Msg import KillMsg
|
||||
|
||||
if __name__ == '__main__':
|
||||
c = BusClient()
|
||||
|
||||
@ -2,15 +2,45 @@
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "initial_id",
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
"collapsed": true,
|
||||
"ExecuteTime": {
|
||||
"end_time": "2025-01-12T12:27:14.384233Z",
|
||||
"start_time": "2025-01-12T12:27:13.172285Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
""
|
||||
"from beamformer.process import pwi_process\n",
|
||||
"from utils.RfFile import RfFile\n",
|
||||
"from utils.ScanData import ScanData\n",
|
||||
"\n",
|
||||
"f = RfFile.from_path('/run/media/lambda/b86dccdc-f134-464b-a310-6575ee9ae85c/cap4/trim/R1,L=30,C=PAR/S=1063,E=4.bin')\n",
|
||||
"s = ScanData.from_file(f)\n",
|
||||
"pwi_process()"
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"/home/lambda/source/scarlet/flandre/.venv/lib/python3.12/site-packages/cupyx/jit/_interface.py:173: FutureWarning: cupyx.jit.rawkernel is experimental. The interface can change in the future.\n",
|
||||
" cupy._util.experimental('cupyx.jit.rawkernel')\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"ename": "TypeError",
|
||||
"evalue": "ScanData.from_file() missing 1 required positional argument: 'shape'",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
|
||||
"\u001B[0;31mTypeError\u001B[0m Traceback (most recent call last)",
|
||||
"Cell \u001B[0;32mIn[2], line 6\u001B[0m\n\u001B[1;32m 3\u001B[0m \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21;01mutils\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01mScanData\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;28;01mimport\u001B[39;00m ScanData\n\u001B[1;32m 5\u001B[0m f \u001B[38;5;241m=\u001B[39m RfFile\u001B[38;5;241m.\u001B[39mfrom_path(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m/run/media/lambda/b86dccdc-f134-464b-a310-6575ee9ae85c/cap4/trim/R1,L=30,C=PAR/S=1063,E=4.bin\u001B[39m\u001B[38;5;124m'\u001B[39m)\n\u001B[0;32m----> 6\u001B[0m s \u001B[38;5;241m=\u001B[39m \u001B[43mScanData\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mfrom_file\u001B[49m\u001B[43m(\u001B[49m\u001B[43mf\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 7\u001B[0m pwi_process()\n",
|
||||
"\u001B[0;31mTypeError\u001B[0m: ScanData.from_file() missing 1 required positional argument: 'shape'"
|
||||
]
|
||||
}
|
||||
],
|
||||
"execution_count": 2
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
|
||||
@ -0,0 +1,2 @@
|
||||
if __name__ == '__main__':
|
||||
print(tuple(str((1, 2, 3))))
|
||||
@ -10,12 +10,11 @@ from tqdm import tqdm
|
||||
from nodes.Beamformer import Beamformer
|
||||
from nodes.Broker import Broker
|
||||
from nodes.ImageCV import ImageCV
|
||||
from nodes.ImageQt import ImageQt
|
||||
from nodes.Loader import Loader
|
||||
from nodes.MainUI import MainUI
|
||||
from nodes.Node import Node
|
||||
from BusClient import BusClient
|
||||
from Msg import Msg1, Msg2, BMMsg, TickMsg, StrMsg, KillMsg
|
||||
from utils.Msg import Msg1, Msg2, BMMsg, TickMsg, StrMsg, KillMsg
|
||||
from nodes.WebRTC import WebRTC
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user