前提・実現したいこと
ソースコード
上記リンクで公開されているNoiseprintを抽出しするコードmain_extraction.py
を実行し、それを表示するコードmain_showout.py
を実行すると失敗時の画像になってしまいます。
正確に動作させたいのですが何を行えばよいでしょうか?
成功すると成功画像のようになるらしいです。
該当のソースコード
# This is the code to extract Noiseprint # python main_extraction.py input.png noiseprint.mat # python main_showout.py input.png noiseprint.mat # # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # # Copyright (c) 2019 Image Processing Research Group of University Federico II of Naples ('GRIP-UNINA'). # All rights reserved. # This work should only be used for nonprofit purposes. # # By downloading and/or using any of these files, you implicitly agree to all the # terms of the license, as specified in the document LICENSE.txt # (included in this package) and online at # http://www.grip.unina.it/download/LICENSE_OPEN.txt # from sys import argv from time import time from noiseprint.noiseprint import genNoiseprint from noiseprint.utility.utilityRead import imread2f from noiseprint.utility.utilityRead import jpeg_qtableinv imgfilename = argv[1] outfilename = argv[2] timestamp = time() img, mode = imread2f(imgfilename, channel=1) try: QF = jpeg_qtableinv(strimgfilenameeam) except: QF = 200 res = genNoiseprint(img,QF) timeApproach = time() - timestamp out_dict = dict() out_dict['noiseprint'] = res out_dict['QF'] = QF out_dict['time'] = timeApproach if outfilename[-4:] == '.mat': import scipy.io as sio sio.savemat(outfilename, out_dict) else: import numpy as np np.savez(outfilename, **out_dict)
# This code shows the noiseprint_blind output # python main_blind.py input.png output.mat # python main_showout.py input.png output.mat # # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # # Copyright (c) 2019 Image Processing Research Group of University Federico II of Naples ('GRIP-UNINA'). # All rights reserved. # This work should only be used for nonprofit purposes. # # By downloading and/or using any of these files, you implicitly agree to all the # terms of the license, as specified in the document LICENSE.txt # (included in this package) and online at # http://www.grip.unina.it/download/LICENSE_OPEN.txt # import matplotlib.pyplot as plt import numpy as np from sys import argv imgfilename = argv[1] outfilename = argv[2] print(' %s' % imgfilename) from noiseprint.utility.utilityRead import imread2f img, mode = imread2f(imgfilename, channel = 3) print('size : ', img.shape) if outfilename[-4:] == '.mat': import scipy.io as sio dat = sio.loadmat(outfilename) else: import numpy as np dat = np.load(outfilename) time = dat['time'].flatten() qf = dat['QF'].flatten() print('time : %g' % time) print('qf : %g' % qf) if 'noiseprint' in dat.keys(): res = dat['noiseprint'] vmin = np.min(res[34:-34,34:-34]) vmax = np.max(res[34:-34,34:-34]) plt.figure() plt.subplot(1,2,1) plt.imshow(img, clim=[0,1]) plt.title('input \n image (%s, %d)' % (mode, qf)) plt.subplot(1,2,2) plt.imshow(res.clip(vmin,vmax), clim=[vmin,vmax], cmap='gray') plt.title('noiseprint') plt.show() if 'map' in dat.keys(): mapp = dat['map'] valid = dat['valid'] range0 = dat['range0'].flatten() range1 = dat['range1'].flatten() imgsize = dat['imgsize'].flatten() from noiseprint.noiseprint_blind import genMappUint8 mapUint8 = genMappUint8(mapp, valid, range0,range1, imgsize) plt.figure() plt.subplot(1,2,1) plt.imshow(img, clim=[0,1]) plt.title('input \n image (%s, %d)' % (mode, qf)) plt.subplot(1,2,2) plt.imshow(mapUint8, clim=[0,255], cmap='gray') plt.title('heatmap') plt.show()
試したこと
tensorflow、cuDNN、CUDAの再インストール
補足情報(FW/ツールのバージョンなど)
ubuntu18.04
python3.6
tensorflow1.14.0
cuDNN7.4
CUDA10.0.130
質問の「失敗時の画像」をダウンロードして、周囲をトリミングして元の画像部分だけにして、
https://github.com/grip-unina/noiseprint
からダウンロードしたコードを無修正で、
python main_extraction.py testnp.jpg testnp.npz
python main_showout.py testnp.jpg testnp.npz
みたいに実行したら、左に元画像、右にモヤモヤっとした画像が並んで表示されました
(「testnp.jpg」が、質問の画像をトリミングしたもの)
ただし、元画像の黒い部分(左下の長方形と右端)は、モヤモヤっとしてなくてグレーの塗り潰しになってましたので、質問の「成功画像」とは違いますけど、質問の「失敗時の画像」のような普通の画像ではありませんでした
返信遅れてすみません。
その方法を試したら確かに普通の画像ではなくなりました。
その考えはありませんでした。ありがとうございます。
うまくいかなかったのは、それぞれの「*.py」を使った実行コマンドを間違えてたのですか?
matでやっていたのですが、npzにしたところ上手くいきました。
さらに、tensorflowの1.6以上だと上手くいかないPCがあるという記事を見かけ1.5.0にダウングレードしたところmatでも上手くできました。
> 1.5.0にダウングレードしたところmatでも上手くできました
なるほど
3年くらい前のTFのバージョンじゃないと、matだと動かないのですね
動かない場合があるという感じらしいです。
なにはともあれありがとうございました。
回答1件
あなたの回答
tips
プレビュー