背景介紹
關鍵詞
ISP(Image Signal Processor) IPC圖像質量 圖像質量算法測試 自動化測試
摘 要
本文主要介紹一種測試IPC圖像質量的測試方法,測試方法的思路基於用戶的使用場景,以及算法的適應,自動化測試圖像質量的方法;按照自然的方法進行測試,記錄下ISP算法的參數變化以及對應的圖像質量,根據這些數據來改善圖像質量。
1 當前測試方法不足
IPC圖像質量測試現狀已經有了一套非常規范的測試方法,在不同的燈光下測試色彩還原能力,測試寬動態等,有專業的測試軟件,例如Imatest等,可以基於這些方法和工具進行設備之間的對比測試,給出全面的圖像質量的評價。
但是這樣的測試有幾個地方沒有考慮到:
- 不能進行自動化測試,需要人工搭建測試環境,進行人工采集測試結果並分析,測試效率較低。
- 脫離了設備實際應用場景,只是模擬了典型場景,離真實環境還有一段距離。
- 只是單點的測試ISP的算法,沒有測試到算法的適應性以及算法中間的過渡。
- 沒有記錄算法中間的變化過程。不能縱向記錄ISP算法的參數變化,即按照時間的順序記錄算法調整的變化。
2 測試方法介紹
基於上述測試方法的不足之處,我們能否有一個測試方法,放置設備在一個固定的地點,記錄下IPC設備全天圖像變化的情況,觀察設備隨着時間變化圖像質量的變化,可以以24小時為周期測試,記錄24小時的圖像變化,然后判斷IPC圖像質量的效果。根據這個思路,方法有兩個:
- 按照時間間隔定期抓取圖片
- 根據ISP參數的變化抓取圖片
因為我們需要測試ISP圖像質量,所以根據ISP參數的變化來抓取圖片比較合理。
結合產品的特性,可以按照下面的測試方法進行測試:
實時獲取影響ISP算法參數的值(例如:YUV數值,快門,增益,iris),作為基准數據;一秒鍾后,獲取值,並與基准數據做比較,如果有變化,則調用ISP算法接口,截取一幀的數據轉換為JEPG格式保存,並記錄下當前的YUV數據值;保存當前的YUV數據位基准參數。重新獲取YUV值,與基准參數比較,如果有變化,抓取圖片,保存基准參數。
如此循環,可以記錄ISP算法的變化和圖像質量情況,可以根據算法的變化曲線進行優化算法等。
測試流程圖如下:

3 測試方法的優缺點分析
- 優點:
- 實現圖像質量測試自動化,做到全天候測試,數據收集更加豐富
- 可以實現多台設備同時測試,測試效率更高
- 測試場景與客戶真實使用場景一致,更加真實
- 可以記錄ISP參數全天以及更長時間的變化,為優化算法提供基本數據
- 測試成本低,不增加新的設備和儀器,利用現有資源測試
- 測試方法簡單,結果觀察方便
- 不涉及到圖形界面操作,測試可靠性較好
- 缺點
- 因測試原理為視頻數據抽幀轉為圖片格式,中間有轉換損失(如果直接調用前端抓拍接口,則不存在此問題)
- 無法直接判斷測試結果,需要人工判斷(如果有圖片質量評比工具就可以自動判斷了)
- 必須由開發人員對代碼做一些修改或者調整
- 測試依賴環境的自然變化,測試驗證場景單一
- 在實際測試中發現,每天測試生成的圖片非常多,查閱測試結果需要一定的時間。(這個可以根據參數的閾值來調節,但是閾值設置需要驗證)
4 開發支持准備
需要在軟件添加兩個接口,並注冊到OSP模塊,用來測試使用
一是:獲取YUV值參數信息
獲取ISP算法的參數,3A等參數信息。
二是:從數據流中保存一幀數據,轉換為圖片並保存
測試接口的功能類似於相機的拍照功能,根據參數觸發圖像數據抓拍
5 測試方法實現
根據測試方法描述,測試實現較為快速高效的實現是使用腳本來進行控制。需要使用FTP,Telnet功能。
腳本功能分析,根據上述測試思路,實現自動化測試,選取 Python腳本來實現。需要實現的模塊有:
| 編號 |
模塊名稱 |
模塊功能 |
| 1 |
YUV數據獲取模塊 |
telnet到設備,執行名稱,獲取YUV數據 |
| 2 |
YUV數據提取模塊 |
從返回的數據中提取出YUV數據數值 |
| 3 |
抓取圖片模塊 |
執行抓取圖片命令,獲得當前參數下的圖片 |
| 4 |
FTP下載圖片模塊 |
用ftp方法把圖片從設備保存到本地目錄 |
| 5 |
輸出測試報告模塊 |
根據YUV數據,圖片,以及時間輸出html格式測試報告 |
6 測試方法應用
前面章節介紹了傳統測試方法的缺點,也介紹了此測試方法的優勢。但是此測試方法不能替代原有的專業的ISP圖像質量測試方法,但是可以作為快速驗證、回歸測試以及對比測試的方法。
快速驗證:現在每天都有版本出來,靠傳統方法難以快速驗證,利用此方法可以做到驗證每天版本的ISP圖像質量。
回歸測試:在ISP算法調整后,回歸測試算法調整效果。ISP算法調整后,用此測試方法驗證算法的基本情況以及適應性。
對比測試:同時測試兩台設備的效果對比,快捷方便。
7 自動化圖片質量打分
#sudo pip install PIL def pil_image_similarity(filepath1, filepath2): from PIL import Image import math import operator image1 = Image.open(filepath1) image2 = Image.open(filepath2) # image1 = get_thumbnail(img1) # image2 = get_thumbnail(img2) h1 = image1.histogram() h2 = image2.histogram() rms = math.sqrt(reduce(operator.add, list(map(lambda a,b: (a-b)**2, h1, h2)))/len(h1) ) return rms
此段代碼使用了:monkey https://testerhome.com/topics/202
