首页 > 编程知识 正文

证件照网站源码,网上生成证件照

时间:2023-05-06 11:01:54 阅读:269268 作者:2608

起因

这段时间很火的证件照在线生成技术很是火,所以研究了一下这项技术,原本以为只需要用扣扣人物换一张底色即可,但并非如此,实践证明用python的OpenCV技术来实现非常不理想。一下是我找到的几种证件照换底色代码。

实现代码

第一种:

import cv2import numpy as npimg=cv2.imread('timg.jpg')#缩放rows,cols,channels = img.shapeimg=cv2.resize(img,None,fx=0.5,fy=0.5)rows,cols,channels = img.shapecv2.imshow('img',img)#转换hsvhsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)lower_blue=np.array([90,70,70])upper_blue=np.array([110,255,255])mask = cv2.inRange(hsv, lower_blue, upper_blue)cv2.imshow('Mask', mask)#腐蚀膨胀erode=cv2.erode(mask,None,iterations=1)cv2.imshow('erode',erode)dilate=cv2.dilate(erode,None,iterations=1)cv2.imshow('dilate',dilate)#遍历替换for i in range(rows): for j in range(cols): if dilate[i,j]==255: img[i,j]=(0,0,255)#此处替换颜色,为BGR通道cv2.imshow('res',img)cv2.waitKey(0)cv2.destroyAllWindows()

最终效果

整体布局情况下还是容易扣出但是一般就失去了证件照真正的意义(既然自己原本就是一张蓝色图片换成红色也基本上没必要)。

技术难度

这项技术主要难度就在于抠出人体范围,如何告诉程序这个范围在那一块,如果是背景单色的请客下很容易识别出来,但是复杂情况下就是很糟糕的一种情况了,这里我找到了一款百度AI发布的一款不错的产品百度人像分割 ,通过分割复杂情况下背景来最后分出人像部分。

这里感觉还不错,能分割复杂场景下的图片

import cv2import base64import numpy as npimport time from aip import AipBodyAnalysis # 在百度云中申请,每天各接口有 500 次调用限制.startTime = time.time()APP_ID = '****'API_KEY = '****'SECRET_KEY = '****' client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY) imgfile = 'test2.jpg'ori_img = cv2.imread(imgfile)height, width, _ = ori_img.shape with open(imgfile, 'rb') as fp: img_info = fp.read() seg_res = client.bodySeg(img_info)labelmap = base64.b64decode(seg_res['labelmap'])nparr = np.fromstring(labelmap, np.uint8)labelimg = cv2.imdecode(nparr,1)labelimg = cv2.resize(labelimg,(width,height), interpolation=cv2.INTER_NEAREST)new_img = np.where(labelimg==1, 255, labelimg)maskfile = imgfile.replace('.jpg', '_mask.png')cv2.imwrite(maskfile, new_img) res_imgfile = imgfile.replace('.jpg', '_res.jpg')result = cv2.bitwise_and(ori_img, new_img)cv2.imwrite(res_imgfile, result)endTime = time.time()print("useTime: ", endTime-startTime)print('Done.')————————————————版权声明:本文为CSDN博主「echo_1994」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/echo_1994/article/details/84317833

这是echo_1994博主给出的具体调用代码

目前最好的效果

但是根据测试往往很多地方如 不清晰,图片不正等情况下或者证件照尺寸等问题还是解决不了这个问题,后来百度后找到了一款在线生成证件照的几家平台,个人感觉在线生成证件照(https://www.taobaxiu.com)这个服务平台算是目前不错的,我体验了一下(源代码收费)。
(对比效果图)
虽然运行时间稍微有点久,但是自动抠出来的效果整体还是不错的,并且能准确识别背景以及座椅等复杂情况下的图片,据说有美颜功能等等。

总结

无论是在线生成证件照还是用python实现的代码,无非就是一个能够看谁更加精准的分离人像,至于替换证件照背景是很简单的事情。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。