;i%VdZddlZddlZddlZddlZddlmZddlZ ddl m Z m Z m Z e jddddlZ ddlZe jdddZn#e$rdZd ZYnwxYw ddlZdZn#e$rdZd ZYnwxYw dd lmZn #e$rdZYnwxYwejd Zed d dddeddgddeddededdddgdd ed!dd"d#ed$d dd%&ed'd dd(d)ed*d+d,d-ed.ed/ed0eejd1dZ ej!Z"e>e j#Z$e$%de j#&e$e j'd2Z(e j)Z*e*+d3ej,a-tZ.e*e*/e^tZj01d tZj02tZj03d4zn=etZ_4tZj56tZj4tZj78e j9oetZj71etZj:8eoe j;d5tZj:1etZj<=e j>tZj?=e j@dtZjA=e j@d1tZjBCe jDtZjE8e jFdktZjGHd6d17tZjIHdd17tZjItZjGtZjJtZjKtZjLtZjMgaNe j9rereaOneaOe jP@tZjQ8d tZjR8d n tZjQ8deSe jPd8krttZjR8d tZjI=e jPdtZjG=e jPd1nyeSe jPd9krQtZjR8deTte jPD]\ZUZVeU=eVneWd:e jPd;tZjX8e jYtZjZ8e j[e j\a]tZj^_tt`e jaZbtcebdadd<ZetZjfjgheeeetZjZjiheed=ZjejtZjRjihejiakd>Zld?Zmd@ZndAZoeltZjBjpheltZjEjiheltZj?jqheltZjAjqheltZj<jqheltZj?jrhemtZjAjrhemtZj<jrhemtZj7jihentZj:jiheodasdBZte juZvevjwhetevxdeZyeyjzhdCe{dDkre j|dSdS)Ez Tests the speed of image updates for an ImageItem and RawImageWidget. The speed will generally depend on the type of data being shown, whether it is being scaled and/or converted by lookup table, and whether OpenGL is used by the view widget N) FrameCounter)QtCoreQtGui QtWidgetsimageAxisOrderz row-majoruseCupyTF)RawImageGLWidgetz'Benchmark for testing video performance) descriptionz--cuda store_truezUse CUDA to process on the GPUcuda)defaultactionhelpdestz--dtypeuint8)ruint16floatz%Image dtype (uint8, uint16, or float))r choicesrz--framesz.Number of image frames to generate (default=3))r typerz --image-modemonorgbzImage data mode (mono or rgb) image_mode)r rrrz--levelscZtd|dDS)Nc,g|]}t|S)r.0xs UC:\PYTHON\MyICR_Workspace\venv\Lib\site-packages\pyqtgraph/examples/VideoSpeedTest.py z../sCcCcCcQRE!HHCcCcCc,tuplesplitss r r)/s-UCcCcVWV]V]^aVbVbCcCcCc=d=dr"zhmin,max levels to scale monochromatic image dynamic range, or rmin,rmax,gmin,gmax,bmin,bmax to scale rgbz--lutzUse color lookup table)r rrz --lut-alphazUse alpha color lookup table lut_alphaz--size512x512cZtd|dDS)Nc,g|]}t|Sr)intrs r r!z..2sFdFdFdRSs1vvFdFdFdr"rr$r's r r)r)2s-FdFdWXW^W^_bWcWcFdFdFd@e@er"z&WxH image dimensions default='512x512'z --iterationsinfz*Number of iterations to run before exitingzVideo Speed Test Examplez!pyqtgraph example: VideoSpeedTestz (OpenGL not available)useNumba)valuestepz;levels argument must be 2 or 6 comma-separated values (got )c:tj}|dkrd}nd}tj|tjatr+ttkrtj tadSdSdS)Nr)alpha) ui dtypeCombo currentTextgradientgetLookupTable alphaCheck isCheckedLUT _has_cupyxpcpasarray)dtypens r updateLUTrJ}s M % % ' 'E    + $ $Qbm.E.E.G.G $ H HCR2XXjooXXr"ctjr)tddD]}|ddStddD]}|ddS)Nr5TF)r<rgbLevelsCheckrB levelSpins setEnabledr's r updateScalerOs ""$$ ABB  A LL      ABB  A LL      r"ctj5tj}tj}tj}tjtj |||f}|tvr|ddkrtj }d}d}d}nV|ddkrtj}d}d}d }n7|dd krtj}d }d }d }nt!d |d||f}tj r|dz} n|} t|f| z|at$d|z} t)| jdD]S} tj|||} |dd krt| d|| | | | <T|t$dddddf<|t$dddddf<|t$dddddf<|t$ia t|at3t5ddddS#1swxYwYdS)Nrr@r2rr:iirg?g?zunable to handle dtype: )r)rH))locscalesize)out 20 / )pg BusyCursorr< framesSpinr3 widthSpin heightSpinr=r>rgbCheckrBcacherErrfloat32 ValueErroremptydatareshaperangeshaperandomnormalcliprJ updateSize) frameswidthheightcacheKeydtrTrUmx chan_shape frame_shapeviewidxsubdatas r mkDatar}s //$$&& ""$$$$&&M--//1F1F1H1H&RWY_` 5 {g%%X!((Y!''Z !IHQK!I!IJJJ %J{$$&& )(4/ ( 88VI 328>>D<< 233DTZ]++ $ $)**s%j*QQA;'))GGGQG888#S !#DBrE2  "DB"  "DB" t$EX  _//////////////////sII44I8;I8cNtj}tj}tj}t ttj }tj rdnd}tj d||z|z|z|jzdz ztt#jdd||dS)Nrr0z%d MBg.Ar)r<rbr3rcrdrErHstrr=r>rerB sizeLabelsetTextitemsizevbsetRangerQRectF)rrrsrtrHrs r rqrqs ] " "F L   E ] " "F HHS224455 6 6E{$$&& -!!ACLFUNV$;c$AEN$RUX$XYZZZKK aE62233333r"ciatjr6trt an.tatjdntatdS)NF) rfr< cudaCheckrBrDrFrEnp setCheckedr}rr"r noticeCudaCheckrs\ E |  +BBB L # #E * * * *  HHHHHr"cvtjdtotjdS)Nr1)r`setConfigOption _has_numbar< numbaCheckrBrr"r noticeNumbaCheckrs.z:#K"-2I2I2K2KLLLLLr"ctttjkr4tt dStj rt}nd}tj }tj rtj rtjtjgtjtjgtjtjgg}n?tjtjg}nd}tj retjt2t4t2jdz||tjdntj retjt2t4t2jdz||tjdnat@t2t4t2jdzd|||tjdt4dz atB"dS)Nr)lutlevelsr0r5F) autoLevelsrrautoDownsample)#nextiterations_counterargs iterationstimerstopappquitr<lutCheckrBrCdownsampleCheck scaleCheckrLminSpin1r3maxSpin1minSpin2maxSpin2minSpin3maxSpin3rawRadiorawImgsetImagerjptrrmstacksetCurrentIndex rawGLRadiorawGLImgimgframecntupdate)useLut downsampleuseScales r rrs\ $/11   t {#--//J }    & & ( ( B""$$bk&7&7&9&9:""$$bk&7&7&9&9:""$$bk&7&7&9&9:->-@-@AHH {$ 4DJqM 12xPPP   ####  " "$ T#djm"34&RRR   #### T#djm+,xU[lv www   ###1HC OOr"cHtj|ddS)Nz.1fz fps)r<fpsLabelr)fpss r r)r)&s""+*=*=>N>N>N>N*O*Or"__main__)}__doc__argparse itertoolssysnumpyrutilsr pyqtgraphr` pyqtgraph.QtrrrrVideoTemplate_generic ui_templatecupyrFrD ImportErrornumbar pyqtgraph.widgets.RawImageWidgetr ArgumentParserparser add_argumentr.r parse_argsargvrcountrQSurfaceFormatsfmtsetSwapIntervalsetDefaultFormatmkQAppr QMainWindowwinsetWindowTitle Ui_MainWindowr<setupUishowrrNrtextrr addWidgetrrr rgetConfigOptionrbsetValuerrrcrVrdr=setCurrentTextrHrerrsetOptsrrrrrrMrErrrLlenzipspinvalrhrrrAr*ViewBoxr graphicsViewsetCentralItemsetAspectLocked ImageItemraddItemrCrJr?sigGradientChangedconnecttoggledrOrfr}rqrrcurrentIndexChangededitingFinished valueChangedrrQTimerrtimeoutstartr sigFpsUpdate__name__execrr"r rs  1111111111#[111++++By$'''II BIIILLLJJ EJJJAAAAAAA ! -V W W WHeLGgntuuuIw8T8T8T\CDDDJ:jkkkNFVUORqyEFFFJ3d3dlVWWWGU>OOPPP z BGIIIIIs5A A! A!%A,, A87A8<BB  B