Example #1
0
def runVideoProcess(camnum, camind, camqueue, msgqueue):
    lasttimesent = time.perf_counter()
    failures = 0
    paused = False
    camera = makeCamera(camind)
    while True:
        if failures >= failure_tolerance:
            break
        msg = readQueueWithTimeout(msgqueue)
        if msg == b"stop":
            break
        elif msg == b"pause":
            paused = True
        elif msg == b"go":
            paused = False
        if paused:
            continue
        camvals = pollCamVars(camnum)
        if True:  #camvals["isactive"] and (time.perf_counter()-lasttimesent) >= 1/camvals["framerate"]:
            ret, img = camera.read()
            print(ret, img)
            if ret:
                if failures > 0:
                    failures = 0
                img = processImage(img, camvals)
                if not camqueue.full():
                    camqueue.put(img)
                    lasttimesent = time.perf_counter()
            else:
                failures += 1
    camera.release()
    msgqueue.put(b"dead")
Example #2
0
def runVideoSender(camnum, camind, msgqueue):
    lasttimesent = time.perf_counter()
    failures = 0
    paused = False
    camera = makeCamera(camind)
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:
        while True:
            if failures >= failure_tolerance:
                break
            msg = readQueueWithTimeout(msgqueue)
            if msg == b"stop":
                break
            elif msg == b"pause":
                paused = True
            elif msg == b"go":
                paused = False
            if paused:
                continue
            camvals = pollCamVars(camnum)
            if True:  #camvals["isactive"] and (time.perf_counter()-lasttimesent) >= 1/camvals["framerate"]:
                ret, img = camera.read()
                time.sleep(failures / 4)
                print(ret, failures)
                if ret:
                    print(ret, img)
                    if failures > 0:
                        failures = 0
                    img = processImage(img, camvals)
                    size = sock.sendto(img, (cliip, 5800 + camnum))
                else:
                    failures += 1
    finally:
        camera.release()
        msgqueue.put(b"dead")
Example #3
0
def config(listener):
    message = b""
    camdict = {}
    qdict = {}
    badcams = []
    indsused = 0
    while message != b"start":
        #Scans for active cameras and posts them to NetworkTables
        cams = stdreader.scanForCameras()
        for camnum in cams:
            if (not camnum in camdict):
                camera = makeCamera(indsused)
                camdict[camnum] = camera
                queue = Queue()
                qdict[camnum] = queue
                makeVideoProcess(camera, camnum, queue).start()
                indsused += 1
        for num in qdict:
            if not camdict[num].grab():
                qdict[num].put(b"stop")
                badcams.append(num)
        for num in badcams:
            camdict.pop(num)
            qdict.pop(num)
    return camdict, qdict
Example #4
0
def exportSwappableStream(sock,
                          camnums,
                          timeout=default_match_time,
                          socktype=UDP):
    #Camnums are the potential camera numbers to be switched to
    starttime = time.perf_counter()
    lastimesent = 0
    #The last time since diagnostic data was printed
    lastimesincediag = 0
    framesent = 0
    totalsize = 0
    activecam = table.getNumber("activecam", camnums[0])
    if activecam in camnums:
        camera = makeCamera(activecam)
    else:
        camera = makeCamera(0)
    while time.perf_counter() - starttime <= time:
        if activecam != table.getNumber("activecam", camnums[0]):
            camera.release()
            activecam = table.getNumber("activecam", camnums[0])
            if activecam in camnums:
                camera = makeCamera(activecam)
            else:
                camera = makeCamera(0)
        camvals = pollCamVars(activecam)
        if camvals["isactive"] and time.perf_counter(
        ) - lastimesent >= 1 / camvals[
                "framerate"]:  #If camera is active and framerate time has passed
            size = exportImage(camera=camera,
                               camnum=activecam,
                               sock=sock,
                               camvals=camvals,
                               ip=cliip)
            if size == -1:
                continue
            totalsize += size
            framesent += 1
            lastimesent = time.perf_counter()
        if time.perf_counter() - lastimesincediag >= 10:
            bytespersec = totalsize / 10
            fps = framesent / 10
            print("{0} frames sent at {1}fps. Average image size: {2}".format(
                framesent, fps, bytespersec * 8 / 1000000))
            framesent = 0
            totalsize = 0
            lastimesincediag = time.perf_counter()
            cv2.waitKey(1)
Example #5
0
def makeCam(camnum):
    """
  Tries to make a camera, fails if it doesn't work
  """
    camera = makeCamera(camnum)
    ret, _ = camera.read()
    if ret:
        return camera
    else:
        return False
Example #6
0
def configLegacy(sock):
    message = b""
    camdict = {}
    indsused = 0
    while message != b"start":
        #Scans for active cameras and posts them to NetworkTables
        cams = stdreader.scanForCameras()
        badcams = exportTestStream(sock, camdict)
        for camnum in cams:
            if (not camnum in camdict):
                camdict[camnum] = makeCamera(indsused)
                indsused += 1
        print(camdict, indsused)
        for badcam in badcams:
            cam = camdict.pop(badcam)
            cam.release()
            indsused -= 1
        message = recvWithTimeout(sock)
    return camdict
Example #7
0
def testCamnum(camnum):
    camera = makeCamera(camnum)
    if camera.grab():
        return camera
    else:
        return None