Files
tst/script/test_camserver.py
2026-03-13 15:28:30 +01:00

82 lines
2.6 KiB
Python

#START AS: pshell console -dev -v -k -b -g -t test_camserver,1,5 -r false (-cl FINE)(--debug -y)
import ch.psi.pshell.screenpanel.CamServerViewer as CamServerViewer
import traceback
SHOW_RENDERER=False
CAMERA="simulation"
CHANNEL_IMG = "TEST:FPICTURE"
CHANNEL_WIDTH = "TEST:WIDTH"
CHANNEL_HEIGHT = "TEST:HEIGHT"
INTERVAL = 1.0
SHOW_PROFILE = False
SHOW_FIT = True
#IMAGE_TYPE = PV.Type.SHORT
IMAGE_TYPE = PV.Type.BYTE
#IMAGE_SIZE = Dimension(500,500)
#IMAGE_SIZE = Dimension(255,255)
IMAGE_SIZE = Dimension(300,218)
MAX_IMAGE_SIZE = 65500 if PV.Type.BYTE else 65500/2
DEBUG = (not Setup.isServerMode()) or Setup.isDebug()
PLOT = DEBUG
img = PV.waveform(CHANNEL_IMG, IMAGE_TYPE, MAX_IMAGE_SIZE)
width = PV.scalar(CHANNEL_WIDTH, PV.Type.INT)
height = PV.scalar(CHANNEL_HEIGHT, PV.Type.INT)
viewer = CamServerViewer()
viewer.applyOptions();
viewer.initialize(CamServerViewer.SourceSelecionMode.Single);
viewer.setStream(CAMERA)
viewer.camera.config.colormap=Colormap.Flame
viewer.camera.config.colormapAutomatic = True
viewer.setShowProfile(SHOW_PROFILE)
viewer.setShowFit(SHOW_FIT)
r=viewer.renderer
r.setPenProfile(Pen(Color.GRAY, 0))
viewer.setPenFit(Pen(Color.WHITE, 0))
viewer.setPenCross(Pen(Color.WHITE, 0))
if SHOW_RENDERER:
f=SwingUtils.showFrame(App.getMainFrame(), "CamServerViewer", Dimension(450,250), r)
f.setAlwaysOnTop(True)
else:
r.device.addListener(r)
p=None
try:
r.waitImage(10000)
while True:
i=r.getImage(True, IMAGE_SIZE)
i=ImagingUtils.grayscale(i)
d = Data(i)
a = d.array
if IMAGE_TYPE != PV.Type.BYTE:
a=Convert.toUnsigned(a)
img.write(a)
width.write(d.width)
height.write(d.height)
if PLOT:
matrix = Convert.reshape(a, d.height, d.width)
if IMAGE_TYPE == PV.Type.BYTE:
matrix=Convert.toUnsigned(matrix)
#p=plot(matrix)[0]
if p is None or (s.numberOfBinsX!=d.width) []or (s.numberOfBinsY!=d.height):
p=plot(matrix)[0]
p.setColormap(Colormap.Grayscale)
p.getAxis(p.AxisId.Y).inverted=True
s=p.getSeries(0)
else:
s.setData(Convert.toDouble(matrix))
if INTERVAL:
time.sleep(INTERVAL)
r.waitNext(10000) #If stops receiving, tries restarting
except:
width.write(0)
height.write(0)
if DEBUG:
print "Camera image processing exception:"
print sys.exc_info()[1]
traceback.print_exc()
finally:
viewer.setStream(None)