用Python识别假图片ps过的图片

我们经常在线通过网页提交身份材料办理业务的时候,发现ps修改过的图片在办理业务的时候提示非真实拍照要求重新上传,那么这个是怎么实现的,今天教大家用python来实现一个识别图片真假的程序。

用<a href='/tag/python.html'>Python</a>识别假图片ps过的图片

我们先说说鉴别的原理

▊ 主要分两级鉴别:

▶第一级、通过检查图片文件中的metadata获取图片被修改的签名信息,如被Photoshop修改的话会有相关的签名字样,但是这个不能完全杜绝通过其他途径修改图片信息,那么我们就进行第二级别的验证。

▶第二级、对图像进行ELA(错误级别分析)检测,然后将检测结果提供给LBPH(本地二进制模式直方图) 识别器,该识别器确定其是伪图像还是真实图像。虽然LBPH算法用于人脸识别,但是它也可以在该项目中用于生成直方图并进行比较。

好了,我们来看看代码怎么写吧。

▊ 所需要使用的python库

Python 2.7.14
OpenCV2
Tkinter
Pillow
Numpy
▊ 第一级检测代码

f=1
img = PIL.Image.open(imgName)info = img._getexif()if info:
   for (tag, value) in info.items():
       if "Software" == TAGS.get(tag, tag):
             lab['text'] = lab['text'] + "\非拍照图"
             lab['text'] = lab['text'] + "\n找到修改软件的签名 : " + value
              f=0
if f:
     lab['text'] = lab['text'] + "\n没找到修改软件签名"
     lab['text'] = lab['text'] + "\n看似是真实图片,进入第二级检测"


▋ 第二级检测代码


    window.title("Level 2 Testing")
    lab['text'] = "Doing ELA analysis ... Please wait for a minute"
    window.update_idletasks()    TEMP = 'temp.jpg'
    SCALE = 10
    original = PIL.Image.open(imgName)
    original.save(TEMP, quality=90)
    temporary = PIL.Image.open(TEMP)
    diff = ImageChops.difference(original, temporary)    d = diff.load()
    WIDTH, HEIGHT = diff.size    for x in range(WIDTH):
            for y in range(HEIGHT):
                    d[x, y] = tuple(k * SCALE for k in d[x, y])
    diff.save("img.jpg")
    lab['text'] = lab['text'] + "\nDoing Histogram Analysis ..."
    window.update_idletasks()    rec = cv2.createLBPHFaceRecognizer()    rec.load("TrainedDataFolder/TraningData.yml") 
    imggray = PIL.Image.open("img.jpg").convert('L') 
    gray = np.array(imggray,'uint8')
    lab['text'] = lab['text'] + "\nResult : "
    id,conf = rec.predict(gray)     if(id == 2):
            lab['text'] = lab['text'] + "\nREAL "
            lab['text'] = lab['text'] + str(100 - conf)
    else:
            lab['text'] = lab['text'] + "\nFAKE "
            lab['text'] = lab['text'] + str(100 - conf)
    b1.pack_forget()


▋ 好了,我来看看代码运行的效果
用<a href='/tag/python.html'>Python</a>识别假图片ps过的图片
用<a href='/tag/python.html'>Python</a>识别假图片ps过的图片
点击下载源码Fake-Detection.zip

{{collectdata}}

网友评论1

  1. # 107
    好像有用,可以试一下
    carlfu127 2023-02-28回复