def test_param_write(device): print("->test specified parameters writing...") wparams = { dmcam.PARAM_DEV_MODE: dmcam.param_val_u(), dmcam.PARAM_FRAME_RATE: dmcam.param_val_u(), } wparams[dmcam.PARAM_DEV_MODE].dev_mode = 0 wparams[dmcam.PARAM_FRAME_RATE].frame_rate.fps = 30 ret = dmcam.param_batch_set(device, wparams) assert ret is True pass
# print(regval) # assert regval[0] == 0x1803 print(" Set paramters ...") # write illumination power: 100% pwr_percent = 100 wparams = { dmcam.PARAM_ILLUM_POWER: dmcam.param_val_u(), dmcam.PARAM_INTG_TIME: dmcam.param_val_u(), dmcam.PARAM_FRAME_FORMAT: dmcam.param_val_u(), } wparams[dmcam.PARAM_ILLUM_POWER].illum_power.percent = pwr_percent wparams[dmcam.PARAM_INTG_TIME].intg.intg_us = 1000 wparams[ dmcam.PARAM_FRAME_FORMAT].frame_format.format = dmcam.DM_FRAME_FMT_DISTANCE if not dmcam.param_batch_set(dev, wparams): print(" set parameter failed") print(" Start capture ...") dmcam.cap_start(dev) f = bytearray(320 * 240 * 4 * 2) run = True while run: # get one frame finfo = dmcam.frame_t() ret = dmcam.cap_get_frames(dev, 1, f, finfo) # print("get %d frames" % ret) if ret > 0: print(" frame @ %d, %dx%d (%d)" % (finfo.frame_info.frame_idx, finfo.frame_info.width,
def set_intg(self, v=500): print('[INF] dmcam_dev_c.set_intg(%d)' % v) wparams = {dmcam.PARAM_INTG_TIME: dmcam.param_val_u()} wparams[dmcam.PARAM_INTG_TIME].intg.intg_us = v if not dmcam.param_batch_set(self.dev, wparams): print('Set parameter failed')
def set_illum(self, v=100): print('[INF] dmcam_dev_c.set_illum(%d)' % v) wparams = {dmcam.PARAM_ILLUM_POWER: dmcam.param_val_u()} wparams[dmcam.PARAM_ILLUM_POWER].illum_power.percent = v if not dmcam.param_batch_set(self.dev, wparams): print('Set parameter failed')
def set_freq(self, v=12000000): print('[INF] dmcam_dev_c.set_freq(%d)' % v) wparams = {dmcam.PARAM_MOD_FREQ: dmcam.param_val_u()} wparams[dmcam.PARAM_MOD_FREQ].mod_freq = int(v) if not dmcam.param_batch_set(self.dev, wparams): print('Set parameter failed')
def set_framerate(self, v=30): print('[INF] dmcam_dev_c.set_framerate(%d)' % v) wparams = {dmcam.PARAM_FRAME_RATE: dmcam.param_val_u()} wparams[dmcam.PARAM_FRAME_RATE].frame_rate.fps = v if not dmcam.param_batch_set(self.dev, wparams): print('Set parameter failed')
def _start_dmcam(self): if self.dev is None: log.info(" Open dmcam device ..") self.dev = dmcam.dev_open(None) if self.dev.version.ver.sw_ver < 154: print(u"仅支持固件版本不低于于154的模组设备,当前固件版本{},请升级模组固件,详见Readme".format( self.dev.version.ver.sw_ver)) input("") # win32api.MessageBox(0, u"仅支持固件版本不低于于154的模组设备,当前固件版本{},请升级模组固件,详见Readme".format(self.dev.version.ver.sw_ver), u"错误", win32con.MB_OK) sys.exit(0) # - set capture config - cap_cfg = dmcam.cap_cfg_t() cap_cfg.cache_frames_cnt = 10 # framebuffer = 10 cap_cfg.on_error = None # use cap_set_callback_on_error to set cb cap_cfg.on_frame_rdy = None # use cap_set_callback_on_frame_ready to set cb cap_cfg.en_save_replay = False # True = save replay, False = not save cap_cfg.en_save_dist_u16 = False # True to save dist stream for openni replay cap_cfg.en_save_gray_u16 = False # True to save gray stream for openni replay cap_cfg.fname_replay = os.fsencode( "dm_replay.oni") # set replay filename log.info("Set parameters ...") wparams = { dmcam.PARAM_INTG_TIME: dmcam.param_val_u(), dmcam.PARAM_FRAME_RATE: dmcam.param_val_u(), dmcam.PARAM_FRAME_FORMAT: dmcam.param_val_u(), # dmcam.PARAM_HDR_INTG_TIME: dmcam.param_val_u(), dmcam.PARAM_MOD_FREQ: dmcam.param_val_u() } wparams[dmcam.PARAM_INTG_TIME].intg.intg_us = 250 # wparams[dmcam.PARAM_HDR_INTG_TIME].intg.intg_us = 1000 wparams[dmcam.PARAM_FRAME_RATE].frame_rate.fps = 20 wparams[dmcam.PARAM_FRAME_FORMAT].frame_format.format = 2 wparams[dmcam.PARAM_MOD_FREQ].mod_freq = 12000000 amp_min_val = dmcam.filter_args_u() amp_min_val.min_amp = 60 intg_auto_arg = dmcam.filter_args_u() intg_auto_arg.sat_ration = 100 # 自动曝光设置的值 if not dmcam.filter_enable(self.dev, dmcam.DMCAM_FILTER_ID_AMP, amp_min_val, sys.getsizeof(amp_min_val)): log.error("set amp to %d %% failed" % 0) if not dmcam.filter_disable(self.dev, dmcam.DMCAM_FILTER_ID_MEDIAN): log.error("disable Median Filter failed") # hdr = dmcam.filter_args_u() if not dmcam.filter_disable(self.dev, dmcam.DMCAM_FILTER_ID_HDR): log.error("set hdr failed") if not dmcam.filter_enable( self.dev, dmcam.DMCAM_FILTER_ID_AUTO_INTG, intg_auto_arg, sys.getsizeof(intg_auto_arg)): log.error("set auto intg failed") print("set auto intg failed") else: print("set auto intg") if not dmcam.param_batch_set(self.dev, wparams): log.error("set parameter failed") assert self.dev is not None if not self.status: log.info("Start capture ...") dmcam.cap_start(self.dev) self.status = True
## Oprerate fileter # DMCAM_FILTER_ID_AMP amp_min_val = dmcam.filter_args_u() amp_min_val.min_amp = parms[3] # 40 if not dmcam.filter_enable(dev, dmcam.DMCAM_FILTER_ID_AMP, amp_min_val, sys.getsizeof(amp_min_val)): print(" set amp to %d %% failed" % 0) if not dmcam.filter_disable(dev, dmcam.DMCAM_FILTER_ID_MEDIAN): print(" disable median filter failed") hdr = dmcam.filter_args_u() if not dmcam.filter_enable(dev, dmcam.DMCAM_FILTER_ID_HDR, hdr, sys.getsizeof(hdr)): print(" enable hdr filter failed") ret = dmcam.param_batch_set(dev, wparams) assert ret is True # show batch param get print("-> batch param parameters reading...\n") params_to_read = list(range(dmcam.PARAM_ENUM_COUNT)) param_val = dmcam.param_batch_get(dev, params_to_read) assert param_val is not None print("dev_mode = %d" % param_val[dmcam.PARAM_DEV_MODE].dev_mode) print("mode_freq = %d" % param_val[dmcam.PARAM_MOD_FREQ].mod_freq) print("vendor: %s" % param_val[dmcam.PARAM_INFO_VENDOR].info_vendor) print("product: %s" % param_val[dmcam.PARAM_INFO_PRODUCT].info_product) print("max frame info: %d x %d, depth=%d, fps=%d, intg_us=%d" % (param_val[dmcam.PARAM_INFO_CAPABILITY].info_capability.max_frame_width, param_val[dmcam.PARAM_INFO_CAPABILITY].info_capability.max_frame_height, param_val[dmcam.PARAM_INFO_CAPABILITY].info_capability.max_frame_depth,