Camera ITS当中的test_param_exposure_time测试
(1)源码解析
- 获取midSensitivity对应的shutter/gain值;
- 将shutter乘以系数(0.8,0.9, 1.0, 1.1, 1.2)计算出一组shutter的值;
- 每个shutter值+获取的gain值搭配manul mode参数进行拍照,取中心10%计算RGB的值;
- Pass的条件是R,G,B值是递增的;
import os.pathimport its.caps
import its.device
import its.image
import its.objects
import its.targetimport matplotlib
from matplotlib import pylabNAME = os.path.basename(__file__).split('.')[0]def main():"""Test that the android.sensor.exposureTime parameter is applied."""exp_times = []r_means = []g_means = []b_means = []with its.device.ItsSession() as cam:props = cam.get_camera_properties()//(1)判断测试条件its.caps.skip_unless(its.caps.compute_target_exposure(props))sync_latency = its.caps.sync_latency(props)//(2)获取测试sizedebug = its.caps.debug_mode()largest_yuv = its.objects.get_largest_yuv_format(props)if debug:fmt = largest_yuvelse:match_ar = (largest_yuv['width'], largest_yuv['height'])fmt = its.objects.get_smallest_yuv_format(props, match_ar=match_ar)//(3)获取sensor支持的midExposureTime对应的shutter和gain值e, s = its.target.get_target_exposure_combos(cam)['midExposureTime']print 'fmt = ', fmt, ',s = ', s, ',e = ', efor i, e_mult in enumerate([0.8, 0.9, 1.0, 1.1, 1.2]):print 'e_mult = ', e_mult, ',e * e_mult = ', e * e_mult//(4)根据获取的shutter值乘以系数(0.8, 0.9, 1.0, 1.1, 1.2)计算出一组shutter的值,每个shutter+获取的gain值搭配manul mode参数进行拍照req = its.objects.manual_capture_request(s, e * e_mult, 0.0, True, props)cap = its.device.do_capture_with_latency(cam, req, sync_latency, fmt)img = its.image.convert_capture_to_rgb_image(cap)its.image.write_image(img, '%s_frame%d.jpg' % (NAME, i))//(5)取中心10%计算RGB的值tile = its.image.get_image_patch(img, 0.45, 0.45, 0.1, 0.1)rgb_means = its.image.compute_image_means(tile)exp_times.append(e * e_mult)r_means.append(rgb_means[0])g_means.append(rgb_means[1])b_means.append(rgb_means[2])# Draw a plot.//(6)根据各个shutter下的RGB值进行画图,并且判断R/G/B值是否根据shutter的增加成递增的关系pylab.plot(exp_times, r_means, '-ro')pylab.plot(exp_times, g_means, '-go')pylab.plot(exp_times, b_means, '-bo')pylab.ylim([0, 1])pylab.title(NAME)pylab.xlabel('Exposure times (ns)')pylab.ylabel('RGB means')plot_name = '%s_plot_means.png' % NAMEmatplotlib.pyplot.savefig(plot_name)# Test for pass/fail: check that each shot is brighter than the previous.for means in [r_means, g_means, b_means]:for i in range(len(means)-1):assert means[i+1] > means[i], 'See %s' % plot_nameif __name__ == '__main__':main()
(2)参数影响
//config_static_metadata.sensor.xxxx_mipi_raw.hCONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_SENSITIVITY_RANGE)CONFIG_ENTRY_VALUE(100, MINT32)CONFIG_ENTRY_VALUE(1600, MINT32)CONFIG_METADATA_END()CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_EXPOSURE_TIME_RANGE)// 1 us - 30 secCONFIG_ENTRY_VALUE( 100000L, MINT64)CONFIG_ENTRY_VALUE(300000000L, MINT64)CONFIG_METADATA_END()CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_MAX_FRAME_DURATION)// 30 secCONFIG_ENTRY_VALUE(300000000L, MINT64)CONFIG_METADATA_END()CONFIG_METADATA_BEGIN(MTK_SENSOR_MAX_ANALOG_SENSITIVITY)CONFIG_ENTRY_VALUE(400, MINT32)CONFIG_METADATA_END()//Sensor的最小gain值需要配置为100(1倍gain)
//xxxx_mipiraw_Sensor.cstatic struct imgsensor_struct imgsensor = {.mirror = IMAGE_H_MIRROR, //mirrorflip information.sensor_mode = IMGSENSOR_MODE_INIT, //IMGSENSOR_MODE enum value,record current sensor mode,such as: INIT, Preview, Capture, Video,High Speed Video, Slim Video.shutter = 0x3D0, //current shutter.gain = 0x100, //current gain.dummy_pixel = 0, //current dummypixel.dummy_line = 0, //current dummyline.current_fps = 0, //full size current fps : 24fps for PIP, 30fps for Normal or ZSD.autoflicker_en = KAL_FALSE, //auto flicker enable: KAL_FALSE for disable auto flicker, KAL_TRUE for enable auto flicker.test_pattern = KAL_FALSE, //test pattern mode or not. KAL_FALSE for in test pattern mode, KAL_TRUE for normal output.current_scenario_id = MSDK_SCENARIO_ID_CAMERA_PREVIEW,//current scenario id.ihdr_en = 0, //sensor need support LE, SE with HDR feature.i2c_write_id = 0x00,//record current sensor's i2c write id
};
(3)测试结果和Log分析
(A)测试过程和结果展示
//python tests/scene1_1/test_param_exposure_time.py camera=0 scenes=1_1fmt = {'width': 320, 'height': 240, 'format': 'yuv'} ,s = 100 ,e = 144403538e_mult = 0.8 ,e * e_mult = 115522830.4
Capturing 1 frame with 1 format [yuv]e_mult = 0.9 ,e * e_mult = 129963184.2
Capturing 1 frame with 1 format [yuv]e_mult = 1.0 ,e * e_mult = 144403538.0
Capturing 1 frame with 1 format [yuv]e_mult = 1.1 ,e * e_mult = 158843891.8
Capturing 1 frame with 1 format [yuv]e_mult = 1.2 ,e * e_mult = 173284245.6
Capturing 1 frame with 1 format [yuv]
会画出归一化之后的RGB的值,以及保存每一个shutter和gain组合对应的照片。
(B)Main_Log查看过程
I ItsSerializer: [555785] Set: android.sensor.exposureTime -> 115522830
I ItsSerializer: [555787] Set: android.sensor.sensitivity -> 100
I FlashMgrM: setManualExposureTime(): manualExp(115522).
I FlashMgrM: setManualSensitivity(): ISO(100)
D ae_mgr : [updateAEInfo2ISP()] State:10 eAEstate:0 VDNum:0 Exp/Afe/Isp/ISO:115522/1024/1024/100I ItsSerializer: [556494] Set: android.sensor.exposureTime -> 129963184
I ItsSerializer: [556496] Set: android.sensor.sensitivity -> 100
I FlashMgrM: setManualExposureTime(): manualExp(129963).
I FlashMgrM: setManualSensitivity(): ISO(100)
D ae_mgr : [updateAEInfo2ISP()] State:10 eAEstate:0 VDNum:0 Exp/Afe/Isp/ISO:129963/1024/1024/100I ItsSerializer: [557253] Set: android.sensor.exposureTime -> 144403538
I ItsSerializer: [557255] Set: android.sensor.sensitivity -> 100
I FlashMgrM: setManualExposureTime(): manualExp(144403).
I FlashMgrM: setManualSensitivity(): ISO(100)
D ae_mgr : [updateAEInfo2ISP()] State:10 eAEstate:0 VDNum:0 Exp/Afe/Isp/ISO:144403/1024/1024/100I ItsSerializer: [558018] Set: android.sensor.exposureTime -> 158843891
I ItsSerializer: [558019] Set: android.sensor.sensitivity -> 100
I FlashMgrM: setManualExposureTime(): manualExp(158843).
I FlashMgrM: setManualSensitivity(): ISO(100)
D ae_mgr : [updateAEInfo2ISP()] State:10 eAEstate:0 VDNum:0 Exp/Afe/Isp/ISO:158843/1024/1024/100I ItsSerializer: [558797] Set: android.sensor.exposureTime -> 173284245
I ItsSerializer: [558799] Set: android.sensor.sensitivity -> 100
I FlashMgrM: setManualExposureTime(): manualExp(173284).
I FlashMgrM: setManualSensitivity(): ISO(100)
D ae_mgr : [updateAEInfo2ISP()] State:10 eAEstate:0 VDNum:0 Exp/Afe/Isp/ISO:173284/1024/1024/100
(C)Kernel_Log查看过程
//100 = 0x64
(0)[10414:3AEventThd]OV13853_camera_sensor[set_shutter] Enter! shutter =11552
(1)[1077:kworker/u8:16]OV13853_camera_sensor[set_gain] gain = 64 , reg_gain = 0x10(2)[10480:3AEventThd]OV13853_camera_sensor[set_shutter] Enter! shutter =12996
(2)[0:swapper/2]OV13853_camera_sensor[set_gain] gain = 64 , reg_gain = 0x10(2)[10545:3AEventThd]OV13853_camera_sensor[set_shutter] Enter! shutter =14440
(0)[0:swapper/0]OV13853_camera_sensor[set_gain] gain = 64 , reg_gain = 0x10(2)[10610:3AEventThd]OV13853_camera_sensor[set_shutter] Enter! shutter =15884
(0)[0:swapper/0]OV13853_camera_sensor[set_gain] gain = 64 , reg_gain = 0x10(3)[10675:3AEventThd]OV13853_camera_sensor[set_shutter] Enter! shutter =17328
(0)[0:swapper/0]OV13853_camera_sensor[set_gain] gain = 64 , reg_gain = 0x10
Camera ITS当中的test_param_exposure_time测试相关推荐
- Camera ITS当中的test_lens_shading_and_color_uniformity测试
(1)源码解析 此项是scene5当中的测试项,需要使用灰卡将摄像头遮住,用来测试摄像头成像的均匀性. Shading 测试包括两部分:lens shading(亮度均匀性)和color shadin ...
- Camera ITS当中的test_exposure测试
(1)测试源码 这个测试项主要是测试不同的shutter和gain 组合,拍的照片亮度差异要小于range. import os.pathimport its.caps import its.devi ...
- Camera ITS当中的test_ev_compensation_basic测试
(1)测试源码 此项是设置5组不同的EV值,然后求每组EV进行拍照(每组EV各拍摄8张照片),拍下来的之间的亮度差异,要求随着EV的增加亮度随之增加. import os.pathimport its ...
- Camera ITS当中的部分测试项文档
(1)部分测试项的文档介绍 有Camera ITS当中Scenes1_1的部分文档,如下: test_3a.py test_auto_vs_manual.py test_ev_compensation ...
- Camera ITS当中的gain/shutter组合测试
(1)Hal流程的代码 (A)updateAEInfo2ISP(ae_mgr.cpp) //vendor/mediatek/proprietary/hardware/mtkcam/aaa/source ...
- Camera ITS测试
一.手机端设置: 将 CtsVerifier.apk 安装到设备上, 连接上linux主机. 二.主机端设置: 基础:CTS测试运行环境 然后,主机安装python2.7,及numpy/scipy/m ...
- 独家 | 115个A/B测试的分析结果︰平均提升为4%,大部分缺乏统计检定力
作者 : Georgi Georgiev 翻译:Gabriel Ng 校对:张玲本文约6400字,建议阅读10分钟 本文讨论初始数据必要的修剪,然后分享元分析的详细结果,最后作出一个简短的总结. 从1 ...
- 计算机视觉测试数据集 dataset
WallFlower dataset: 用于评价背景建模算法的好坏. Ground-truth foreground provided. Foreground/Background segmenta ...
- 不要再用main方法测试代码性能了,用这款JDK自带工具
前言 作为软件开发人员,我们通常会写一些测试程序用来对比不同算法.不同工具的性能问题.而最常见的做法是写一个main方法,构造模拟场景进行并发测试. 如果细心的朋友可能已经发现,每次测试结果误差很大, ...
最新文章
- MySQL主从复制原理图
- UnicodeEncodeError: 'ascii' codec can't encode character '\xe3' in position 0: ordinal not in range
- 【问链财经-区块链基础知识系列】 第二十二课 贸易金融区块链平台的技术机理与现实意义
- idea修改新的git提交地址
- Java基础夺命连环16问
- 微信小程序盲盒-可对接微信支付
- model数据库orm操作
- 内网信息安全厂商对客户的误导
- javaScript判断输入框是否为空
- JSONArray.fromObject(); 引入问题
- LoadRunner11代理在Win10操作系统启动不起来,或者报错:该内存不能为written
- 腾讯云:服务器资源池化技术发展趋势
- 生活随记 - 尝试与师傅沟通争取自己的权益
- 前端DES加密、base64编码,后端DES解密、base64解码
- Emacs 显示左侧行号
- [GBase 8s 教程]GBase 8s UNION 操作符
- 包头师范学院计算机系,包头师范学院数学科学学院
- 买的美国服务器怎么上传文件,虚拟主机空间的文件怎样上传和实现的
- 目前最完美的Windows Server 2008企业版激活方法
- Hexo系列 | Hexo安装、启动
热门文章
- 行为型模式:观察者模式
- DDD(Domain-Driven Design)领域驱动架构介绍
- android studio项目改成android.mk编译APP闪退java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader
- 当我精通vue2的源码dep和watcher的关系时
- creator 反复横跳瞄准线的实现
- Java 数组和List的使用
- Ingest Node Pipeline Processor
- 制作stlink(烧录部分)
- 苹果CMS V10自动采集脚本开始执行 版本:v1.0
- 【互动赠书】第 4 期开奖,第 5 期书单(21本)