水印情缘,opencv模拟ai人脸棍骗的研商

图片 1

——第一期:关于营造简便动态眨眼

自作者发觉本人临近跟水印有缘。。。。

一、搜求背景

乘机智能AI的升华,ai人脸识别已经化为人工智能应用中不可缺点和失误的一局地,各行各业都起来用这么些新兴技艺,收缩审查批准成本,扩展调查效能,可是智能AI究竟跟人照旧有异样的,因为人工智能的对面部的论断是透过重重算法跟模型演习,才会进一步标准,所以有广大人为看起来特别假的图,人工智能总括后是足以经过的。

比方一张人脸,要是是不是是自己人脸的四个判定规范是:1、人脸跟本人居民身份证件照片相似度达五分之四。2、检查实验的人是个活体。满意那七个标准化ai的论断尽管通过,可是那八个规格实在都以足以伪造的,比方说找小编的图形,通过技能手腕让眼睛嘴巴动起来,ai就能够咬定成活体,而且与自己相似度极高,因而就透过了,这种气象我们誉为ai人脸期骗。

为此本期的探赜索隐正是经过opencv让静态人脸上的眼睛动起来,进而模仿照片为自个儿且是活体的机能,模拟ai人脸棍骗。

记得以前刚学C#最怕图片相关的操作,后来时常和她打交道(常常生活)

二、必要动用的第三方依赖库

V1应该是最后归中举的水印了,项目里面好些个也都是这么搞

OpenCV

OpenCV是一个跨平台的Computer视觉库,是开源的,能够运用在主流操作系统上,举例:Linux、windows、Android和Mac
os操作系统上。它由一连串的c函数和一些些的c++类构成,同不时间也提供了Python、Ruby、MATLAB等接口,实现了图像处理和计算机视觉方面包车型客车不在少数通用算法。本次的模仿ai人脸诈骗,首要用的正是这几个开源库。

http://www.cnblogs.com/dunitian/p/4939369.html

Pillow 与PIL

PIL:Python Imaging
Library,已是Python平台事实上的图像处理规范库了。PIL功能非常强大,但API并非常轻易易用。
由于PIL仅援助到Python
2.7,加2014破败不堪,于是一堆志愿者在PIL的基础上创办了协作的本子,名字叫Pillow,扶助最新Python
3.x,又走入了无数新性格,由此,大家得以向来设置使用Pillow。

 

三、景况的搭建

V2增多了剪贴板效能,删除了文字水印功用

python版本:2.7

本子信任库:

立时的新性情:

pip:9.0.1
$brew install pip

单个图片水印

安装pillow:5.0.0
$pip install pillow

图片 2

安装pillow-PIL 0.1dev
$pip install pillow

多文件直接水印

numpy 1.14.1
$pip install numpy

此间可能会赶樱笋时经设置numpy1.0.8rc1不能够卸载的主题素材,请参见链接:
http://blog.csdn.net/hqzxsc2006/article/details/51602654

图片 3

OpenCV-python 3.3.0.10
$brew install OpenCV

万一境遇Permissiondenied设置战败,请加上sudo重试。
除了上述的版本,还必要一个python编辑器,推荐用pycharm。

亲测在真实情状下搭建情状进度相比较繁琐,并且便于遇到种种主题素材。建议通过pycharm搭建多个设想情状来贯彻。

网页图片批量转

四、用python实现静态图变动态图

率先附上静图变动图的源码:

#静态图片变动图代码
import os
import numpy
from PIL import Image, ImageDraw
import cv2
left = cv2.imread("/Users/aa/PycharmProjects/untitled1/left.png")
right = Image.open("/Users/aa/PycharmProjects/untitled1/right.png")
classifier = cv2.CascadeClassifier("/Users/aa/PycharmProjects/untitled1/haarcascade_eye.xml")
count = 0
while count > -1:
    img = cv2.imread("/Users/aa/PycharmProjects/untitled1/timg.jpg")
    Face = img[55:136, 170:255]
    eyeRects = classifier.detectMultiScale(img, 1.2, 2, cv2.CASCADE_SCALE_IMAGE, (20, 20))
    key = cv2.waitKey(1)
    if len(eyeRects) > 0:
        for faceRect in eyeRects:
            x, y, w, h = faceRect
            cv2.rectangle(img, (int(x), int(y)), (int(x) + int(w), int(y) + int(h)), (0, 255, 0), 2, 0)
            ex_show=cv2.resize(left,(w,h),interpolation=cv2.INTER_CUBIC)
            #Y1=y+55
            #Y2=(y+h)+55
            #X1=x+170
            #X2=(x+w)+170
            if key == ord('p'):
               #img[ Y1:Y2, X1:X2]=ex_show
               #Face[y:y+h, x:x+w]=ex_show
               img[y:y+h, x:x+w]= ex_show
    cv2.imshow('video', img)
    cv2.resizeWindow('video',1280,720)
    if key == ord('q'):
        break
cv2.destroyAllWindows()

上述内容及代码均依照互连网检索和参照外人的代码,结合笔者的构思和驾驭,本人写的代码,下边内容会剖析代码每一句代表的意义以及功能,何况自个儿也绘制了一部分数学模型图,帮忙大家对眼睛识别及替换的原理有越来越深厚的通晓。

先是大家初始入注重库,用它的image跟ImageDraw包来管理图片

import os

import numpy

from PIL import Image, ImageDraw

import cv2

接下来先读取一张主图:

img = cv2.imread("/Users/aa/PycharmProjects/untitled1/timg.png")

格式为:img =
cv2.imread(”文件路线”),默许是色彩缤纷的,尽管想要天青能够这样设置:img=cv2.imread(“文件路线”,0),后边的参数决定图片的情调。

接下来大家再用:

cv2.imshow('video', img)

来查看图片是或不是出示寻常,突显的结果是那样子的:

图片 4

34c492850f998791c9c78d0aa34d91fe.png

导入成功,想要眼睛动起来,首先大家得先识别出眼睛所在的区域。那时候能够用贰个现存的经过演练的人眼识别xml支持,文件名字:haarcascade_eye.xml,这么些xml在互连网也能找到,导入这几个xml并树立三个对象。

classifier = cv2.CascadeClassifier("/Users/dingjingjing058/Downloads/haarcascade_eye.xml")

通过对象调用xml的detectMultiScale函数况且赋值给三个变量。

eyeRects = classifier.detectMultiScale(img, 1.2, 2, cv2.CASCADE_SCALE_IMAGE, (20, 20))

那条代码的情趣,正是在整张图片中,识别出人眼的区域。

detectMultiScale那么些函数的用法笔者就不详细说了,粗略的说一下每贰个参数的意思:

detectMultiScale函数介绍:
参数1:image–待检测图片,日常为灰度图像加速检查评定速度
参数2:objects–被检验物体的矩形框向量组;
参数3:scaleFactor–表示在前后一回相继的围观中,寻找窗口的百分比全面。暗中同意为1.1即每一趟搜寻窗口依次扩张百分之十;
参数4:minNeighbors–代表结合检查评定对象的邻座矩形的细微个数(默感到3个)。
假诺结合检查评定对象的小矩形的个数和小于minneighbors – 1
都会被解除。如果min
neighbors 为 0,
则函数不做别的操作就重回全数的被检候选矩形框,这种设定值日常用在顾客自定义对质量评定结果的整合程序上;
参数5:flags–flags–要么选拔暗中同意值,要么使用CV_HAAR_DO_CANNY_PRUNING,假诺设置为CV_HAAR_DO_CANNY_PRUNING,那么函数将会采取Canny边缘检验来扫除边缘过多或过少的区域,因而这一个区域平日不会是人脸所在区域;
参数6、7:minSize和maxSize用来界定获得的对象区域的范围。

下一场就是把识别出来的人眼区域画一个矩形,画矩形的代码是那样的:

cv2.rectangle(img, ((x1,y1) , (X2,Y2), (0, 255, 0), 2, 0)

在那之中X1,Y1是矩形的左上角坐标,X2,Y2是矩形的右下角坐标。依据那么些坐标来绘制八个矩形。

而是大家怎么遵照人眼识别的点来画矩形呢?用叁个for循环在xml里遍历一下faceRect这么些函数,遍历的代码就那样:

 if len(faceRects) > 0:

    for faceRect in eyeRects:

        x, y, w, h = eyeRect

        cv2.rectangle(img, (int(x), int(y)), (int(x) + int(w), int(y) + int(h)), (0, 255, 0), 2, 0)

莫比不上较空虚,我们就以美术二个坐标,原点为右上角的点,图像的宽为x轴,高为y轴,然后画矩形正是用x跟y轴的坐标。

规律图如下,上述代码就能够绘制出来上面包车型客车那幅图。

图片 5

87cd3d2523f3558e06736805437a4960.png

下一场大家再来运转后的人眼识别结果,识别成功:

图片 6

bf77601b1e7ab5f69900a16614f4196b.png

识别成功今后,怎么把那么些静态图片造成叁个动态的图纸呢?那时候大家就必要替换矩形内部的图像,首先先把要换图的区域给一定出来,用那有些代码定位:

img[ y:(y + h), x:(x + w)]

那行代码的意趣是把y1=y y2=y+h,x1=x
,X2=x+w,把那四根线重叠的有的给抠出来,如下图橄榄黑阴影部分:

图片 7

e2fcefdc7aac9e352dd09d9a2ab5a861.png

然后再置换到其余一张图纸,大家先是导入要替换眼睛有些的图形,并让图片适应框的分寸。

ex_show=cv2.resize(left,(w,h),interpolation=cv2.INTER_CUBIC)

接下来把刚刚圈出来的那多少个区域,替换到那张图片:

img[ y:(y + h), x:(x + w)]=ex_show

接下来就顺理成章,效果如下图所示:

图片 8

d4ee1ceae2b75072d16159bb4f9d7f6d.png

然后怎么让那些图动起来呢,我们就设定按钮盘有些开关的时候,那张图纸才会交替,那样不断按那个按键,图片就产生动图啦。

if key == ord('p'):

          img[ y:(y + h), x:(x + w)]=ex_show

如此一幅动态识别替换眼睛有些的动图就完事啦,那样就能够用静态图片不断沟通眼睛有些以构建是活体的功效,进而瞒过人工智能。

图片 9

五、识别准确度优化的落实

以上内容是自身对源码的研究和透亮,以下内容是本人在源码的基本功上温馨写的片段优化代码,让眼部的辨别更精准。

虽说大家中标的成就了人眼识别并替换其余图片,不过大家都发觉,上海教室的辨识部分不太可相信,有一部分早已识别到腋下去了,那么大家怎么让识别范围更为的正确吗?

我的主张便是,框定贰个区域,比方说人脸,然后让眼睛识别就在这一个区域内举行,那样的话准确度会大大的提升。

于是乎决定先把人脸部分的坐标先抠出来:

Face = img[55:136, 170:255]

下一场在抠出来的图中间实行遍历,识别人眼。

if len(faceRects) > 0:

    for faceRect in eyeRects:

        x, y, w, h = faceRect

        cv2.rectangle(Face, (int(x), int(y)), (int(x) + int(w), int(y) + int(h)), (0, 255, 0), 2, 0)

下一场再运行一下,我们发掘已经把矩形正确的长久到肉眼的一些啦。

图片 10

f611b7d068c8a40b5ee9470d31fe6c96.png

不过此时大家开采摘运输营程序,会意识替换图片的时候跑偏了。为何会跑偏呢?原本大家在抠出来的图中画矩形的时候,矩形已经不是以全体图片为原点,而是以抠出来的图的左上角坐标为原点,这时候的x,y是相持于坐标(55,170)而设置的,再来看大家轮换图片的代码:

img[ y:(y + h), x:(x + w)]=ex_show

只是大家轮换图片的时候,依然是以原图为参照他事他说加以考察的,这时候的x,y识别到的
是以原图左上角为原点,x,y为矩形左上角点的局地。那时候大家得把抠出来的图的坐标再还原到原图上,进而识别替换部分的坐标:

图片 11

b60bf26acc1f488cf0be97f3ac402845.png

为此替换图片的坐标应该改成这么:

Y1=y+55

Y2=(y+h)+55

X1=x+170

X2=(x+w)+170

if key == ord('p'):

   img[ Y1:Y2, X1:X2]=ex_show

实际还会有一种尤其简明的办法,没有错就是平昔把替换区域也改成以抠出来的图为参考:

Face[y:y+h, x:x+w]=ex_show       

如此一幅高精度的人眼识别动图就做出来啊!

图片 12

2b5aa56c9c578d6a6f395339e3dff2a1.png

这段代码中抠出来的人脸坐标是写死的只是为着更有利掌握它的规范进度,之后方可换来智能人脸识别,先把人脸识别出来,然后把人脸的部分抠出来再开展人眼识别,其实跟上述的原理同样的,只但是把写死的那么些坐标img[55:136,170:255]替换来变量坐标而已。

最终,本期只是做一个特意基本的品味探寻,在那一个进程中也遇上了好些个主题素材,情状上,遭逢了大多条件搭建的标题,比方说设置精晓后还是无法导入image跟imageview的包,最终经过搭建虚构情形解决了难点,譬如人眼识别不太精准总是识别到另外东西。那期做的只是三个特别简单的人眼识别然后替换的完毕,中期会尝试实现人眼蒙版过渡得更自然-附近于实际人眼的睁眼闭眼的模拟,然后让识别越来越高精度,不会识别到别的地点。后期会尝试加上嘴巴的辨别,让静态图片的嘴巴实现动态张闭,以及静态图摇头的效果的贯彻。

word文书档案图片批量转

图片 13

剪贴板图片水印

图片 14

自动化配置,针对新浪编辑器的剪贴板水印等

http://www.cnblogs.com/dunitian/p/5377097.html

 

V3变态水印。铺满+浅背景黑水印,暗背景浅水印

http://www.cnblogs.com/dunitian/p/5895133.html

V3引进了异步成效。是帮朋友设计的,Ta在婚纱拍录职业,天天加水印消耗一大波日子,作者编了那些软件之后,Ta天天只要点一下,全体下班

像这么的:

图片 15图片 16

 

这样的

图片 17图片 18

 

 

小编觉着事情就这么甘休了,然则。。。。

有一天Ta的上边看到了,哟,软件真平价,点一下就好了啊~~

然后提出了八个平素不曾过的渴求==》水印不许加脸上!

 

他俩都手工业达成,不加脸上反而省了岁月。。。

于是乎朋友有苦命的手工业水印水印。。。

 

于是乎~~V4人脸识别版本出现了

 

事先自身用的是Face++,有无需付费版本的,后来自己相当多都设计好模型和算法了

图片 19

用起来开掘===》

图片 20

免费版的您调用速度给您卡的稳定的,非得逼你花钱,并且十四遍调用4次直接系统繁忙!笔者去

图片 21

图片 22
正确度也就日常般:另一位吧?

图片 23

你感觉她们是2个女孩子拍婚纱?

图片 24

如若用Face++的自个儿得以提供多少个key:

4a7evRnYJprlIlOyIbVmrXQpOHxaryUH
TWkJ8ONzLHGftTooYvO51oyfLyc4hHaf

APIURL:apicn.faceplusplus.com

7b1b47699e1e4834b4e5cc6d5da24964
N5U-S2MJAy6ikL5ghj3bGhgc-ozg0MqQ

0df565d6e2a56d30a100686779ada46f
hO1Ox6df2oym7QKBb562_VRywxwHBj6d

0ef14fa726ce34d820c5a44e57fef470
4Y9YXOMSDvqu1Ompn9NSpNwWQFHs1hYD

 

新生想起来几年前本人在C#吧写的一篇小说,是介绍微软的人脸识别

接下来本人又翻了翻:

要害是那么些地方:

https://dev.projectoxford.ai/docs/services/563879b61984550e40cbbe8d/operations/563879b61984550f30395236

图片 25

https://www.microsoft.com/cognitive-services/zh-cn/subscriptions

图片 26

在线调试

https://dev.projectoxford.ai/docs/services/563879b61984550e40cbbe8d/operations/563879b61984550f30395236/console

 

废话没有多少说了,说下主见,因为急用,所以准备先弄第三个版本(有更加好思路能够说一下)

先是个本子==》平衡Key算法,得到坐标后先把人脸抠出来,水印达成后再贴上去

其次个本子==》提升速度,大图就先缩略图,然后上传,获得关键点按比例求出真实坐标

其三版本==》一套算法来贯彻无异水印

 

过一段时间你就映珍视帘了~~~先睡觉,养精神,前日早起职业~