AI智能人脸识别,抠图-应用证件照

news2024/11/16 13:41:55

效果展示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
关键代码:

import numpy as np
import cv2
import os


def crop_face(source_image_path, output_folder_path, tag_width, tag_height):
    face_detector = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
    #images = os.listdir(input_folder_path)

   # image_path = os.path.join(source_image_path, image)
    img = cv2.imread(source_image_path)

    height, width, channels = img.shape
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_detector.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5, minSize=(30, 30))

    # 无法识别面部的图片
    if len(faces) == 0:
        print(f"No face found in {source_image_path}")
        return

    if len(faces) > 0:
        # 取第一个脸部位置,这里假设一张图片只有一个脸部特征
        x, y, w, h = faces[0]
        expand_w = int(0.5 * w)
        expand_h = int(0.8 * h)
        # 计算扩充后的ROI区域的坐标
        x1 = max(0, x - expand_w)
        y1 = max(0, y - expand_h)
        x2 = min(img.shape[1], x + w + expand_w)
        y2 = min(img.shape[0], y + h + expand_h)


        # 绘制扩充后的ROI区域
        #cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)

        # 截取扩充后的ROI区域
        roi = img[y1:y2, x1:x2]

        resized = cv2.resize(roi, (tag_width, tag_height), interpolation=cv2.INTER_CUBIC)
        output_path = os.path.join(output_folder_path)
        print(output_path)
        cv2.imwrite(output_path, resized)



if __name__ == "__main__":
    input_folder = r"input/33.jpg"
    output_folder = r"Output"
    # 创建输出目录
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    crop_face(input_folder, output_folder+"33.jpg", 295, 413)
    print('Done!')

def resize_image(self, org_img, width, height, color, filename, suffix, config_path):
today = date_util.todaystr()
parent_folder = config_path[‘root_folder’]
static_folder = config_path[‘static’]
temp_folder = config_path[‘temp’]
parent_path = os.path.join(parent_folder, static_folder, today)

    if not os.path.exists(parent_path):
        os.makedirs(parent_path)
    temp_path = os.path.join(parent_folder, temp_folder)
    if not os.path.exists(temp_path):
        os.makedirs(temp_path)

    id_image = os.path.join(parent_path, filename + suffix)

    crop_face(org_img, id_image, int(width), int(height))

    model = onnx_test_image.Matting(model_path='./model/modnet.onnx', input_size=(512, 512))
    model.predict_image(id_image, os.path.join(parent_path, filename + "_cutout.png"),color)



    info = {}
    if width and height:
        width = int(width)
        height = int(height)

        target_image = os.path.join(parent_path, filename + '_finally.jpg')
        resize_image.resize_image(id_image, width, height, target_image)
        target_iamge_cut = os.path.join(static_folder, today, filename + '_finally.jpg')
        info['targetImageCut'] = target_iamge_cut
        print('target_iamge_cut===', target_iamge_cut)

    # 最终图包含背景且切图

    #原图
    source_image = os.path.join(static_folder, today, filename + suffix)
    source_image_not_back = os.path.join(static_folder, today, filename + "_cutout.png")
    print('source_image_not_back===', source_image_not_back)

代码地址:

https://gitee.com/get-help/ai-photo-web

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/695178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法题解】45. N叉树的层序遍历

这是一道 中等难度 的题 https://leetcode.cn/problems/n-ary-tree-level-order-traversal/ 题目 给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。 树的序列化输入是用层序遍历,每组子节点都由 nu…

fopen,fputs,fgets,fclose

fopen 是打开文件 fputs 往文件里面写内容(里面有2个参数其中第一个是一个char 型 数组用于存放读取的字符串,表示读取 1-n个字符。第二个表示是文件读入指针) fgets 读取文件里面的内容 (里面有三个参数其中 第一个是一个char 型 数组用于存放读取的字符串。第二…

阿里云安全组 IP地址段 设置方法 斜线后面数字含义

比如公司搬家后,我的ip变成了101.83.11.11 但我希望安全组中.只限制ip的前2段,后面两段是多少,都不会限制访问 先登录阿里云的服务器管理后台,找到主机,进安全组,添加 设置方法为 端口1234为自定义的,比如远程桌面访问你的服务器,源:就是ip地址段. 101.83.1.1/16解释 斜杠…

使用 Jetpack Compose 构建 LinearProgressIndicator

欢迎阅读这篇关于如何使用 Jetpack Compose 构建 LinearProgressIndicator(线性进度指示器)的博客。Jetpack Compose 是 Google 推出的一款现代化 UI 工具包,用于构建 Android 界面。其声明式的设计使得 UI 开发更加简洁、直观。 什么是 Line…

mfc100u.dll丢失的各种解决方法分享,探究mfc100u.dll文件

在计算机系统中,有许多重要的文件扮演着关键角色。其中之一就是Mfc100u.dll,一但这个文件丢失了,那么你的电脑就会出现问题,如程序运行不了等等。今天主要来给大家讲讲Mfc100u.dll这个文件,mfc100u.dll丢失的各种解决方…

由spring定时任务@Scheduled(cron = “0 0 0/1 * * ?“)引起的坑

这两天做到的一个功能,定时任务每整点生成一条记录,然后使用的cron表达式是: Scheduled(cron "0 0 0/1 * * ?")意为每整点执行一次。 定时任务执行之后使用new Date() 拿到当前本机时间,作为记录的创建时间&#xf…

使用Jmeter完成数据库造数

1.添加驱动 如果使用jmeter连接数据库,需要在jmeter的lib下添加对应的数据库驱动 MySQL: mysql-connector-jar Oracle: ojdbc6-11.2.0.3.jar ps:找到自己对应的驱动版本 2.bin目录启动 localhost bin % sh jmeter.sh ps: Jmeter版本:5.6 mysq…

在windows同时安装两个idea的方法教程

因为近期使用jdk17,所以需要升级Idea的版本,但是我电脑之前用的Idea2018,我又不想卸载,所以想同时装两个版本的。 安装教程如下: IDea官网:https://www.jetbrains.com.cn/idea/download/?sectionwindows 在官网下载.…

从文本、图像到音视频,AIGC技术将如何重构我们的数字世界?

引言 1950 年,艾伦图灵提出著名的「图灵测试」,给出判定机器是否具有智能的试验方法。16 年后,世界上第一款可人机对话的机器人“Eliza”问世,这是 AI 技术最早期的萌芽阶段。但由于当时的科技水平限制,AIGC 仅限于小…

【MySql】C语言连接mysql|图形化工具

文章目录 Connector/C 使用mysql接口介绍Navicat远程连接数据库 Connector/C 使用 说完了mysql的基础,后面我们只关心使用,要使用C语言连接mysql,需要使用mysql官网提供的库,前往官网下载即可。 但是实际上我们并不需要这样去做,…

Feign、Ribbon、Hystrix(铁三角)以及三者超时时间配置

在微服务架构中很多功能都需要调用多个服务才能完成某一项功能,一个成熟的微服务集群,内部调用必然依赖一个好的 RPC 框架,比如:基于 Http 协议的 Feign,基于私有 tcp 协议的 Dubbo 1. Feign 是什么 Feign 是Spring …

Consul 理解

Consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。服务部署简单,只有一…

SpringBoot实现自定义配置属性提示

前言 我们在使用SpringBoot开发项目时,常常需要编写一些属性配置类,用来完成自定义或特定的属性配置。在配置文件application.yml中,IDEA会自动提示官方默认的相关配置且可以点击属性自动跳转到属性对应的配置类中,实现快速查看属…

力扣387:字符串中的第一个唯一字符

题目描述:给定一个字符串s,找到它的第一个不重复字符,并返回索引,如果不存在,则返回-1. 提示:s 不为空且 s 只包含小写字母 思路: 将字符串中的每个字符遍历一次,将其中每个字符以…

基于Java斗车交易系统设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

centos下的Nginx, tar安装不能使用systemctl启动问题

1.systemctl start nginx启动报错 2.报错原因 解压方式nginx,系统服务内没有nginx的服务,所以报错 3.配置nginx系统服务 1)/etc/init.d/目录下创建nginx 2)nginx文件内容 #!/bin/sh # nginx - this script starts and stops the nginx daemin # # c…

【漏洞案例】云上攻防之云主机中web应用自身漏洞

0x00 前言 最近在做项目的时候,测到了一个部署在云上的存在 Laravel UEditor SSRF 漏洞的站点,并且发现这个 SSRF 漏洞可以读取到临时凭证,这不巧了,正好最近写了一个云环境利用的工具。 开始之前这里先简单介绍一下这个工具&am…

(三)R-studio调度

1、准备测试脚本 from datetime import datetime print(111) print(datetime.now()) 2、设置定时调度 如果crontab没有安装,需要在root用户下安装,并启动,可参考:Ubuntu下crontab的安装和使用 (base) rstudio5abc0fae5cff:~/p…

JVM的OOM问题定位解决

1、生成dump文件(错误日志文件),MAT可以进行解读 (1)参数 -XX:HeapDumpOnOutOfMemoryErrorOOM时导出堆到文件。 -Xms1m -Xmx8m -XX:HeapDumpOnOutOfMemoryError(2)设置参数 -Xms1m -Xmx8m -…

【Python】 Windows上通过git bash执行python卡住的解决方法

解决方法 编辑 C:\Program Files\Git\etc\profile.d\aliases.sh,将python2.7改成python 编辑完成后,重启git bash, 输入python即可 参考 https://blog.csdn.net/ofreelander/article/details/112058975