NIMA 算法测试图片清晰度
简介
该算法从两个不同的维度进行判断。首先是判断照片的质量等。
美观等主观方面,该算法也可以用来判断拍照水平。摄影爱好者可以用来提高自己的摄影水平。
如何检测图片
NIMA基于最新的深度物体识别(object detection)神经网络,能够从直接观感(技术角度)和吸引程度(美学角度)预测人类对图像的评估意见的分布。
文中提出的神经网络的打分具有与人类主观打分很相近的优点,因此可以用于图像质量评估工作。
NIMA算法是用来单纯检测图片质量,采用AVA数据集合训练。可以用于检查监控画面是否清晰、摄影拍照水平是如何。
NIMA是分数范围1~10分数越高图片质量越好 一般5以上代表图片质量正常,4.5~5代表质量普通,4.5以下代表质量模糊
from nima.inference.inference_model import InferenceModel
import os
import time
# add other package
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from PIL import Image
加载模型
path_model = './model/pretrain-model.pth'
model = InferenceModel(path_to_model=path_model)
加载图片
idir = './image'
filelist = []
filenames = os.listdir(idir)
images={}
print(filenames)
for fn in filenames:
if fn == '.DS_Store':
continue
fullfilename = os.path.join(idir, fn)
filelist.append(fullfilename)
images[fn]=plt.imread(fullfilename)
pass
print(filelist)
['clear.png', 'clear3.png', 'clear2.png', 'vague5.png', 'vague4.png', 'vague3.png', 'vague.png']
['./image/clear.png', './image/clear3.png', './image/clear2.png', './image/vague5.png', './image/vague4.png', './image/vague3.png', './image/vague.png']
进行运算
timeall = 0
results={}
for i in range(0, len(filelist)):
path_image = filelist[i]
try:
time0 = time.time()
result = model.predict_from_file(path_image)#1-10分
time1 = time.time()
timed = time1 - time0
timeall = timeall + timed
print(filenames[i],result["mean_score"],timeall)
results[filenames[i]] = filenames[i]+':'+str(result["mean_score"])
except Exception as e:
print('error',e)
continue
clear.png 5.0833471827209 0.15367412567138672
clear3.png 4.556422473862767 0.29868006706237793
clear2.png 5.269062386825681 0.44592714309692383
vague5.png 3.793891074601561 0.5606961250305176
vague4.png 4.713200172409415 0.6726200580596924
vague3.png 4.217929469421506 0.8103981018066406
vague.png 4.431853944435716 0.9465303421020508
显示结果
plt.figure(figsize=(50,50))
i =1;
dic={}
for im in images:
plt.subplot(4,2,i)
plt.imshow(images[im])
title = im+':'+str(results[im])
plt.title(results[im], fontsize=28)
i+=1
plt.show()
结果
- 图片 vague5 最模糊,分数为 3.79
- 图片 clear2 最为清晰 分数为 5.2
模糊的图片分数都在4.5以下,4.5以上的图片基本为清晰和正常
每次检测时间消耗在 0.15s 左右