コード例 #1
0
ファイル: imgutils_Tests.py プロジェクト: fanff/astroScop
    def test_realImages_instick(self):
        return
        print("writes in stick")
        if not os.path.exists("/media/imgstick"):
            return

        rmtree("/media/imgstick/a", ignore_errors=True)
        time.sleep(1)

        saver = ImgSaver("/media/imgstick/")

        # source images
        realimagesNames = ["moon1.jpg", "moon2.jpg", "mars1.png"]

        realimages = [
            PIL.Image.open("testimgs/%s" % (_, )) for _ in realimagesNames
        ]
        # resols
        srcResols = [(1280, 720), (3296, 2464)]

        expcount = 30
        res = []

        save_formats = ["tiff", "jpg", "bmp"]

        for realimgname, realimg in zip(realimagesNames, realimages):

            for srcResol in srcResols:
                srcimg = resizeImage(realimg, srcResol)
                srcimgs = [srcimg for i in range(expcount)]
                datesrcs = list(range(expcount))

                srcPixCount = srcResol[0] * srcResol[1]
                for save_format in save_formats:

                    for srcimg, dt in zip(srcimgs, datesrcs):
                        strt = time.time()
                        saver.save(srcimg, save_format, "a", str(srcPixCount),
                                   dt)
                        dur = time.time() - strt

                        res.append([
                            dur, srcResol, srcPixCount, save_format,
                            realimgname
                        ])
                        time.sleep(.2)

        cols = ["dur", "srcResol", "srcPixCount", "save_format", "realimgname"]
        df = pd.DataFrame(res, columns=cols)
        df["pixspeed"] = (df["srcPixCount"] / df["dur"]) / 10**6
        df.to_pickle("./save.df")
        makeStatpng(df, "realinstick.png", "real_in stick")

        rmtree("/media/imgstick/a")
コード例 #2
0
async def bgjob():
    """
    use the IMGBUFF global object

    """
    global serverConnection
    global serverOverwhelmed

    log = logging.getLogger("imgForwd")
    sleepdur = .1
    lastTimingSend = 0
    while True:
        try:
            if len(IMGBUFF.content) > 0:
                a, params, triggerDate = IMGBUFF.pop()

                save_format = params.get("save_format", "none")
                save_section = params.get("save_section", "work")
                save_subsection = params.get("save_subsection", "")

                if save_format not in ["none"]:
                    TOSAVEBUFF.stack((a, params, triggerDate))

                if not serverOverwhelmed:
                    log.debug("bgjob with %s objects in buff ",
                              len(IMGBUFF.content))
                    log.debug("params : %s", params)
                    log.debug("will send to server")

                    if "capture_format" in params and params[
                            "capture_format"] == "jpeg":

                        w = params["shootresol"]["width"]
                        h = params["shootresol"]["height"]

                        #image = Image.frombytes('RGB', (w,h), a,decoder_name="jpeg")
                        import io
                        image = Image.open(io.BytesIO(a))
                    else:
                        image = Image.fromarray(a)

                    if serverConnection:
                        try:

                            dispresol = (params["dispresol"]["width"],
                                         params["dispresol"]["height"])

                            log.debug("go for resize b64 json")
                            imageDisplay = imgutils.resizeImage(
                                image, dispresol)
                            data = imgutils.pilimTobase64Jpg(imageDisplay)
                            msg = json.dumps({
                                "usedParams": params,
                                "msgtype": "srcimage",
                                "imageData": data
                            })

                            log.debug("sending to server")
                            await serverConnection.send(msg)
                            await asyncio.sleep(.02)  # wait a little

                        except websockets.exceptions.ConnectionClosed as e:
                            serverConnection = False
                            log.error("disconnected with server %s", e)
                        except Exception as e:
                            log.exception("err sending to server %s", e)
                    else:
                        log.info("no server")
                else:
                    log.debug("server has too much work")
                    await asyncio.sleep(.001)
            else:
                # wait for image
                await asyncio.sleep(sleepdur)

            if time.time() > lastTimingSend + 3:
                lastTimingSend = time.time()
                # now send timing data
                timingData = {
                    "imgbuffcount": len(IMGBUFF.content),
                    "tosavecount": len(TOSAVEBUFF.content),
                }

                #msg = ",".join(["%s: %.2f"%(k,timingData[k]) for k in sorted(timingData.keys()) if "dur" in k])
                log.info("some info %s ", timingData)

                if serverConnection:
                    msg = makeMessage("camTiming", timingData, jdump=True)
                    await serverConnection.send(msg)
                await asyncio.sleep(.0001)
        except concurrent.futures._base.CancelledError as e:
            log.info("quit due to cancelledError")
            return
        except KeyboardInterrupt as e:
            log.info("quit due to key interrupt")
            return
        except Exception as e:
            log.exception("error")
コード例 #3
0
ファイル: imgutils_Tests.py プロジェクト: fanff/astroScop
    def test_1(self):
        """

        ls:[ {name:"128x64", width:128,height:64},
            {name:"480x368", width:480,height:368},
          {name:"640x480", width:640,height:480},


          {name:"1280x720", width:1024,height:720},
          {name:"1640x1232", width:1640,height:1232},

          {name:"1920x1080", width:1920,height:1080},
          {name:"1920x1088", width:1920,height:1088},
          {name:"3280x2464", width:3280,height:2464},
          {name:"3296x2464", width:3296,height:2464},
        ],
        """

        #srcResol = (3296,2464)
        #targtResol = (1280,720)

        srcResol = (3296, 2464)
        targtResol = (480, 368)

        srcPixCount = srcResol[0] * srcResol[1]
        trgPixCount = targtResol[0] * targtResol[1]
        rgap = None

        expcount = 10

        mods = [["NEAREST", PIL.Image.NEAREST], ["BICUBIC", PIL.Image.BICUBIC]]

        rgaps = [None, 1.0, 2.0, 3.0]

        res = []
        srcimgs = [makePilIMgs(resol=srcResol) for i in range(expcount)]

        for modestr, mod in mods:
            for rgap in rgaps:
                for srcimg in srcimgs:

                    strt = time.time()
                    newimgs = resizeImage(srcimg,
                                          targtResol,
                                          mod,
                                          reducing_gap=None)
                    dur = time.time() - strt
                    res.append([
                        dur, srcResol, targtResol, srcPixCount, trgPixCount,
                        rgap, modestr
                    ])
        cols = [
            "dur", "srcResol", "targtResol", "srcPixCount", "trgPixCount",
            "rgap", "modestr"
        ]
        df = pd.DataFrame(res, columns=cols)

        df["pixspeed"] = (df["srcPixCount"] / df["dur"]) / 10**6
        df.to_pickle("./save.df")
        makeStatpng(df,
                    "resizeSpd.png",
                    "resize Speed",
                    testedCols=["rgap", "modestr"])
コード例 #4
0
async def cameraLoop():

    global continueLoop
    global freshParams
    await asyncio.sleep(1)

    while True:
        try:
            log = logging.getLogger("cameraLoop")

            params = cleanParams(freshParams)
            shootresol = params["shootresol"]
            strtResolution = (shootresol["width"], shootresol["height"])

            log.info("OpeningCamera at resol %s", (strtResolution, ))
            with PiCamera(resolution=strtResolution,
                          framerate_range=(0.1, 30)) as camera:
                log.info("got camera")

                continueLoop = True
                while continueLoop:
                    params = cleanParams(freshParams)
                    shootresol = params["shootresol"]
                    dispresol = (params["dispresol"]["width"],
                                 params["dispresol"]["height"])
                    if (shootresol["width"] != strtResolution[0]):
                        log.info("resolution changed!")
                        break
                    log.info("looping %s", params)

                    capture_format = params["capture_format"]

                    # setting camera config
                    camsetting_start = time.time()

                    camera.iso = params["isovalue"]
                    camera.brightness = params["brightness"]
                    camera.contrast = params["contrast"]
                    # camera.analog_gain=1.0
                    camera.exposure_mode = params["expomode"]
                    camera.exposure_compensation = params[
                        "exposure_compensation"]
                    camera.saturation = params["saturation"]

                    camera.shutter_speed = params["shutterSpeed"]

                    log.info("setting awb_mode off")
                    camera.awb_mode = 'off'

                    g = (params["redgain"], params["bluegain"])
                    camera.awb_gains = g

                    camsetting_dur = time.time() - camsetting_start

                    log.info("create databuff")
                    if (capture_format in ["yuv"]):
                        stream = open("/dev/shm/lol.data", "w+b")
                    else:
                        stream = BytesIO()

                    log.info("capture start capture_format:%s", capture_format)
                    triggerDate = time.time()
                    camera.capture(stream,
                                   format=capture_format,
                                   use_video_port=False)

                    capture_dur = time.time() - triggerDate

                    # into pill
                    log.info("reading image")
                    strtTime = time.time()
                    if (capture_format == "jpeg"):
                        stream.seek(0)
                        image = Image.open(stream)

                    elif (capture_format == "yuv"):
                        stream.seek(0)
                        rgb = imgutils.yuvbytesToRgb(stream, *strtResolution)
                        image = Image.fromarray(rgb)
                    elif (capture_format == "rgb"):
                        stream.seek(0)
                        image = Image.frombytes("RGB", strtResolution,
                                                stream.getvalue(), "raw",
                                                "RGB", 0, 1)
                        #image = Image.frombuffer("RGB",strtResolution,stream,"raw","RGB",0,1)
                    pil_dur = time.time() - strtTime

                    #log.info(image.size)
                    strtTime = time.time()
                    #histData = imgutils.colorHist(image)
                    hist_dur = time.time() - strtTime

                    log.info("resizing")
                    strtTime = time.time()
                    imageDisplay = imgutils.resizeImage(image, dispresol)
                    resize_dur = time.time() - strtTime

                    # save original image
                    strtTime = time.time()
                    save_format = params["save_format"]
                    save_section = params["save_section"]
                    save_subsection = params["save_subsection"]

                    if save_format in [
                            "none",
                    ]:
                        pass
                    else:
                        IMGBUFF.stack((image, save_format, save_section,
                                       save_subsection, triggerDate))

                    save_dur = time.time() - strtTime

                    # publish image to server
                    usedParams = {
                        "triggerDate": triggerDate,
                        "gains": [float(_) for _ in camera.awb_gains],
                        "analog_gain": float(camera.analog_gain),
                        "iso": camera.iso,
                        "brightness": camera.brightness,
                        "saturation": camera.saturation,
                        "contrast": camera.contrast,
                        "exposure_compensation": camera.exposure_compensation,
                        "resolution": list(strtResolution),
                        "imageSize": image.size,
                        "shutterSpeed": camera.shutter_speed,
                        "exposure_speed": camera.exposure_speed,
                        "exposure_mode": camera.exposure_mode,
                        "awb_mode": camera.awb_mode,
                        "capture_format": capture_format,
                        "save_format": save_format,
                        "save_section": save_section,
                        "camsetting_dur": camsetting_dur,
                        "capture_dur": capture_dur,
                        "pil_dur": pil_dur,
                        "hist_dur": hist_dur,
                        "resize_dur": resize_dur,
                        "save_dur": save_dur,
                    }

                    strtTime = time.time()
                    if serverConnection:
                        try:
                            data = imgutils.pilimTobase64Jpg(imageDisplay)
                            msg = json.dumps({
                                "usedParams": usedParams,
                                "msgtype": "srcimage",
                                "imageData": data
                            })
                            await serverConnection.send(msg)
                        except Exception as e:
                            log.exception("err %s", e)
                    else:
                        log.info("no server")
                    # end sending
                    send_dur = time.time() - strtTime

                    # now send timing data
                    timingData = {
                        "triggerDate": triggerDate,
                        "imgbuffcount": len(IMGBUFF.content),
                        "send_dur": send_dur,
                        "usedParams": usedParams
                    }

                    msg = ",".join([
                        "%s: %.2f" % (k, timingData[k])
                        for k in sorted(timingData.keys()) if "dur" in k
                    ])
                    log.info("timing info %s , %s in buff", msg,
                             len(IMGBUFF.content))

                    if serverConnection:
                        msg = makeMessage("camTiming", timingData, jdump=True)
                        await serverConnection.send(msg)
                    await asyncio.sleep(.0001)
                # end while
                log.info("ending capture loop, camera will be reopened")

            #end with camera
            #no camera here

            log.info("camera closed")
        except Exception as e:
            log.exception("whooops")
            await asyncio.sleep(1)