Exemplo n.º 1
0
def convert_opencv_to_texture(frame):
    if frame is None:
        return Texture()
    buf1 = cv2.flip(frame, 0)
    buf = buf1.tostring()
    image_texture = Texture.create(size=(frame.shape[1], frame.shape[0]),
                                   colorfmt='bgr')
    image_texture.blit_buffer(buf, colorfmt='bgr', bufferfmt='ubyte')

    return image_texture
    def init_camera(self):
        self._release_camera()
        self._android_camera = Camera.open(self._index)
        params = self._android_camera.getParameters()
        width, height = self._resolution
        zoom = self._zoom  # edit by ableity
        focusmode = self._focusmode  # edit by lilei
        params.setPreviewSize(width, height)
        params.setFocusMode(focusmode)  #edit by lilei
        params.setZoom(zoom)  # edit by ableity
        self._android_camera.setParameters(params)
        # self._android_camera.setDisplayOrientation()
        self.fps = 30.

        pf = params.getPreviewFormat()
        assert (pf == ImageFormat.NV21)  # default format is NV21
        self._bufsize = int(
            ImageFormat.getBitsPerPixel(pf) / 8. * width * height)

        self._camera_texture = Texture(width=width,
                                       height=height,
                                       target=GL_TEXTURE_EXTERNAL_OES,
                                       colorfmt='rgba')
        self._surface_texture = SurfaceTexture(int(self._camera_texture.id))
        self._android_camera.setPreviewTexture(self._surface_texture)

        self._fbo = Fbo(size=self._resolution)
        self._fbo['resolution'] = (float(width), float(height))
        self._fbo.shader.fs = '''
            #extension GL_OES_EGL_image_external : require
            #ifdef GL_ES
                precision highp float;
            #endif

            /* Outputs from the vertex shader */
            varying vec4 frag_color;
            varying vec2 tex_coord0;

            /* uniform texture samplers */
            uniform sampler2D texture0;
            uniform samplerExternalOES texture1;
            uniform vec2 resolution;

            void main()
            {
                vec2 coord = vec2(tex_coord0.y * (
                    resolution.y / resolution.x), 1. -tex_coord0.x);
                gl_FragColor = texture2D(texture1, tex_coord0);
            }
        '''
        with self._fbo:
            self._texture_cb = Callback(
                lambda instr: self._camera_texture.bind)
            Rectangle(size=self._resolution)
Exemplo n.º 3
0
    def start_preview(self, resolution):
        if self.java_camera_device is None:
            raise ValueError(
                "Camera device not yet opened, cannot create preview stream")

        if resolution not in self.supported_resolutions:
            raise ValueError(
                "Tried to open preview with resolution {}, not in supported resolutions {}"
                .format(resolution, self.supported_resolutions))

        if self.preview_active:
            raise ValueError(
                "Preview already active, can't start again without stopping first"
            )

        logger.info(
            "Creating capture stream with resolution {}".format(resolution))

        self.preview_resolution = resolution
        self._prepare_preview_fbo(resolution)
        self.preview_texture = Texture(width=resolution[0],
                                       height=resolution[1],
                                       target=GL_TEXTURE_EXTERNAL_OES,
                                       colorfmt="rgba")
        logger.info("Texture id is {}".format(self.preview_texture.id))
        self.java_preview_surface_texture = SurfaceTexture(
            int(self.preview_texture.id))
        self.java_preview_surface_texture.setDefaultBufferSize(*resolution)
        self.java_preview_surface = Surface(self.java_preview_surface_texture)

        self.java_capture_request = self.java_camera_device.createCaptureRequest(
            CameraDevice.TEMPLATE_PREVIEW)
        self.java_capture_request.addTarget(self.java_preview_surface)
        self.java_capture_request.set(
            CaptureRequest.CONTROL_AF_MODE,
            ControlAfMode.CONTROL_AF_MODE_CONTINUOUS_PICTURE.value
        )  # CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE)
        self.java_capture_request.set(CaptureRequest.CONTROL_AE_MODE,
                                      ControlAeMode.CONTROL_AE_MODE_ON.value
                                      )  # CaptureRequest.CONTROL_AE_MODE_ON)

        self.java_surface_list = ArrayList()
        self.java_surface_list.add(self.java_preview_surface)

        self.java_camera_device.createCaptureSession(
            self.java_surface_list,
            self._java_capture_session_java_callback,
            _global_handler,
        )

        return self.preview_fbo.texture
    def new_sample(self, appsink):
        sample = self.appsink.emit('pull-sample')
        buf = sample.get_buffer()

        tex_id = glstuff.get_texture_id_from_buffer(ctypes.c_void_p(hash(buf)))

        if not tex_id == self.old_tex_id:
            self.old_tex_id = tex_id

            texture = texture_map.get(tex_id)

            if not texture:
                texture = Texture(1920,
                                  1080,
                                  self.texture_target,
                                  colorfmt='rgba',
                                  texid=tex_id)
                texture.flip_vertical()
                texture_map[tex_id] = texture

            self.image.texture = texture