Пример #1
0
    def save_image_to_numpy(self) -> np.array:
        """
        save image to a numpy array and return it
        """
        err = ctypes.c_int(AC_OK)
        size = c_ac.acGetResultDataLength(self.ac_object, ctypes.pointer(err))
        if err.value != AC_OK:
            raise ACError(err.value)

        data = (ctypes.c_ubyte * size)()
        ptr = ctypes.pointer(data)
        ptr = ctypes.pointer(ptr)

        err = c_ac.acSaveImageRGBBytes(self.ac_object, ptr)
        if err != AC_OK:
            raise ACError(err)

        np_array = np.ctypeslib.as_array(data)

        shape = (ctypes.c_int * 3)()
        err = c_ac.acGetResultShape(self.ac_object, ctypes.pointer(shape))
        if err != AC_OK:
            raise ACError(err)

        np_array = np_array.reshape((shape[0], shape[1], shape[2]))
        return np_array
Пример #2
0
 def load_video(self, src_path: str):
     """
     load a video from disk
     """
     if self.parameters.videoMode is False:
         raise ACError(AC_ERROR_VIDEO_MODE_UNINIT)
     err = c_ac.acLoadVideo(self.ac_object, ctypes.c_char_p(src_path.encode(os_encoding)))
     if err != AC_OK:
         raise ACError(err)
Пример #3
0
 def save_image(self, dst_path: str):
     """
     save image to disk
     """
     err = c_ac.acSaveImage(self.ac_object, ctypes.c_char_p(dst_path.encode(os_encoding)))
     if err != AC_OK:
         raise ACError(err)
Пример #4
0
    def load_image_from_numpy(self,
                              np_array: np.array,
                              input_type: int = AC_INPUT_RGB):
        """
        load an image from numpy array, supported type is RGB and YUV444
        """

        input_as_yuv444 = input_type == AC_INPUT_YUV444

        input_as_rgb32 = input_type == AC_INPUT_RGB32 or input_type == AC_INPUT_BGR32

        if input_type == AC_INPUT_RGB or input_type == AC_INPUT_RGB32:
            self.input_type = AC_INPUT_RGB

        rows, cols, _ = np_array.shape
        data = np_array.ctypes.data_as(ctypes.POINTER(ctypes.c_ubyte))
        err = c_ac.acLoadImageRGBPackedB(
            self.ac_object,
            ctypes.c_int(rows),
            ctypes.c_int(cols),
            data,
            ctypes.c_int64(0),
            ctypes.c_int(input_as_yuv444),
            ctypes.c_int(input_as_rgb32),
        )
        if err != AC_OK:
            raise ACError(err)
Пример #5
0
 def load_image(self, src_path: str):
     """
     load an image from disk
     """
     err = c_ac.acLoadImage(self.ac_object, ctypes.c_char_p(src_path.encode(os_encoding)))
     if err != AC_OK:
         raise ACError(err)
Пример #6
0
 def show_image(self):
     """
     quickly show image which has been inputted
     """
     err = c_ac.acShowImage(self.ac_object, ctypes.c_int(self.input_type))
     if err != AC_OK:
         raise ACError(err)
Пример #7
0
 def init_GPUCNN(self):
     """
     initialize GPU for GPUCNN mode
     """
     err = c_ac.acInitGPUCNN()
     if err != AC_OK:
         raise ACError(err)
Пример #8
0
    def set_arguments(self, parameters: Parameters):
        err = c_ac.acSetArguments(
            self.ac_object, ctypes.byref(self.__get_c_parameters(parameters)))
        if err != AC_OK:
            raise ACError(err)

        self.parameters = parameters
Пример #9
0
 def save_video(self):
     """
     compete output video, should be called after calling process
     """
     err = c_ac.acSaveVideo(self.ac_object)
     if err != AC_OK:
         raise ACError(err)
Пример #10
0
    def __init__(
        self,
        managerList: ManagerList = None,
        parameters: Parameters = Parameters(),
        type: ProcessorType = ProcessorType.CPU_ACNet,
    ):
        err = ctypes.c_int(AC_OK)
        self.ac_object = c_ac.acGetInstance2(
            ctypes.c_uint(
                managerList.get_managers() if managerList is not None else 0),
            ctypes.byref(managerList.get_manager_data())
            if managerList is not None else None,
            ctypes.byref(self.__get_c_parameters(parameters)),
            ctypes.c_int(type),
            ctypes.pointer(err),
        )
        if err.value != AC_OK:
            raise ACError(err.value)

        self.parameters = parameters
        self.ac_object = ctypes.c_void_p(self.ac_object)

        self.input_type = AC_INPUT_BGR
        self.processor_type = type

        self.process_status = AC_PROCESS_STOP
Пример #11
0
    def stop_video_process(self):
        """
        stop video processing
        """
        err = c_ac.acStopVideoProcess(self.ac_object)
        if err != AC_OK:
            raise ACError(err)

        self.process_status = AC_PROCESS_STOP
Пример #12
0
    def continue_video_process(self):
        """
        continue video processing
        """
        err = c_ac.acContinueVideoProcess(self.ac_object)
        if err != AC_OK:
            raise ACError(err)

        self.process_status = AC_PROCESS_RUNNING
Пример #13
0
    def pause_video_process(self):
        """
        pause video processing
        """
        err = c_ac.acPauseVideoProcess(self.ac_object)
        if err != AC_OK:
            raise ACError(err)

        self.process_status = AC_PROCESS_PAUSED
Пример #14
0
    def process(self):
        """
        process image or video
        """
        self.process_status = AC_PROCESS_RUNNING

        err = c_ac.acProcess(self.ac_object)
        if err != AC_OK:
            raise ACError(err)

        self.process_status = AC_PROCESS_STOP
Пример #15
0
    def process_with_progress(self):
        """
        process video with progress displaying
        """
        self.process_status = AC_PROCESS_RUNNING

        err = c_ac.acProcessWithPrintProgress(self.ac_object)
        if err != AC_OK:
            raise ACError(err)

        self.process_status = AC_PROCESS_STOP
Пример #16
0
    def process_with_progress_callback(self, func):
        """
        process video with callback function:

        func(v :float) -> None

        v: progress value (0 to 1)
        """
        self.process_status = AC_PROCESS_RUNNING

        c_callback = ctypes.CFUNCTYPE(None, ctypes.c_double)
        err = c_ac.acProcessWithProgress(self.ac_object, c_callback(func))
        if err != AC_OK:
            raise ACError(err)

        self.process_status = AC_PROCESS_STOP
Пример #17
0
    def set_save_video_info(
        self, dst_path: str, codec: Codec = Codec.MP4V, fps: float = 0
    ):
        """
        set output video saving path and codec, should be called before calling process

        set fps to 0 for automatic detection
        """
        err = c_ac.acSetSaveVideoInfo(
            self.ac_object,
            ctypes.c_char_p(dst_path.encode(os_encoding)),
            ctypes.c_int(codec),
            ctypes.c_double(fps),
        )
        if err != AC_OK:
            raise ACError(err)
Пример #18
0
    def __init__(
        self,
        initGPU: bool = False,
        initGPUCNN: bool = False,
        platformID: int = 0,
        deviceID: int = 0,
        parameters: Parameters = Parameters(),
        type: ProcessorType = ProcessorType.AUTO,
    ):
        if type == ProcessorType.AUTO:
            # init it to CPUCNN
            type = ProcessorType.CPUCNN
            initGPU = False
            initGPUCNN = False
            # Test all GPUs
            _, platforms, devices = AC.get_GPU_list()
            for p_id in range(platforms):
                for d_id in range(devices[p_id]):
                    support_flag = AC.check_GPU_support(p_id, d_id)
                    if support_flag:
                        type = ProcessorType.GPUCNN
                        initGPUCNN = True

        ac_parameters_p = ctypes.byref(self.__get_c_parameters(parameters))
        err = ctypes.c_int(AC_OK)
        self.ac_object = c_ac.acGetInstance(
            ctypes.c_int(initGPU),
            ctypes.c_int(initGPUCNN),
            ctypes.c_uint(platformID),
            ctypes.c_uint(deviceID),
            ac_parameters_p,
            ctypes.c_int(type),
            ctypes.pointer(err),
        )
        if err.value != AC_OK:
            raise ACError(err.value)
        self.parameters = parameters
        self.ac_object = ctypes.c_void_p(self.ac_object)

        self.input_type = AC_INPUT_BGR
        self.processor_type = type
        self.GPUID = (platformID, deviceID)

        self.process_status = AC_PROCESS_STOP
Пример #19
0
 def set_video_mode(self, flag: bool = True):
     err = c_ac.acSetVideoMode(self.ac_object, ctypes.c_int(flag))
     if err != AC_OK:
         raise ACError(err)
     self.parameters.videoMode = flag