概述
今天实现分割抠图和人脸融合功能
视频里用的是python,但我选择用java,为啥?!后面几节课用的也是java,而且用python的话,大家都在写,我用java,岂不妙哉。
话不多说,直接上手。
1.首先开通人体分割https://vision.aliyun.com/experience/detail?spm=a211p3.14020179.J_7524944390.19.66cd35cc22y0Lj&tagName=imageseg&children=SegmentBody
2.打开IDEA,新建一个maven项目,由于代码量很少,直接使用昨天的工程(maven、jdk、idea、maven项目的创建昨天做过了,这里不再重复)
3.改pom.xml,增加以下依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.14</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-imageseg -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-imageseg</artifactId>
<version>1.1.2</version>
</dependency>
4.新建一个测试类,并写入以下代码
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import java.util.*;
import com.aliyuncs.imageseg.model.v20191230.*;
public class SegmentBody {
public static void main(String[] args) {
DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", "idxxxxx", "keyxxxxxx");
IAcsClient client = new DefaultAcsClient(profile);
SegmentBodyRequest request = new SegmentBodyRequest();
request.setRegionId("cn-shanghai");
request.setImageURL("http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/imageseg/SegmentBody/SegmentBody1.png");
try {
SegmentBodyResponse response = client.getAcsResponse(request);
System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
}
5.运行代码,得到以下结果即为调用API成功
然后,还有个合图(将png人像融合到一张背景图上),我在官网的能力广场没找到这个合图,所以我们来玩个更好玩的,人脸融合(就是AI换脸【手动狗头】)
1.开通服务https://vision.aliyun.com/experience/detail?spm=a211p3.14020179.J_7524944390.14.29c735ccS4uE48&tagName=facebody&children=MergeImageFace
2.首先我们要获取TemplateId,两种方式,一种直接在以下网址在线调用生成https://next.api.aliyun.com/api/facebody/2019-12-30/AddFaceImageTemplate?spm=api-workbench..0.0.10e71e0fKTDdGR¶ms={%22ImageURL%22:%22http://invi-label.oss-cn-shanghai.aliyuncs.com/label/temp/cartoon/test_data/g02.jpeg%22,%22UserId%22:%22test%22}&OSSAccessKeyId=LTAI4FoLmvQ9urWXgSRpDvh1&Signature=m4CF4ieza9oq5emJoSKM5JarxWw%3D%22}&tab=DEBUG
另一种是,我们依旧使用上一次的maven项目,增加依赖,并运行代码得到结果,userid的话随便填,图片地址要放在上海的OSS里面,或者用官方示例图(如何存放的话第一天已经详细讲过了)。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>facebody20191230</artifactId>
<version>1.0.9</version>
</dependency>
import com.aliyun.tea.*;
import com.aliyun.facebody20191230.*;
import com.aliyun.facebody20191230.models.*;
import com.aliyun.teaopenapi.*;
import com.aliyun.teaopenapi.models.*;
public class Sample {
/**
* 使用AK&SK初始化账号Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
public static com.aliyun.facebody20191230.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config()
// 您的AccessKey ID
.setAccessKeyId(accessKeyId)
// 您的AccessKey Secret
.setAccessKeySecret(accessKeySecret);
// 访问的域名
config.endpoint = "facebody.cn-shanghai.aliyuncs.com";
return new com.aliyun.facebody20191230.Client(config);
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
com.aliyun.facebody20191230.Client client = Sample.createClient("idxxxx", "keyxxxxx");
AddFaceImageTemplateRequest addFaceImageTemplateRequest = new AddFaceImageTemplateRequest()
.setImageURL("http://invi-label.oss-cn-shanghai.aliyuncs.com/label/temp/cartoon/test_data/g02.jpeg")
.setUserId("test");
// 复制代码运行请自行打印 API 的返回值
System.out.println(client.addFaceImageTemplate(addFaceImageTemplateRequest).toMap());
}
}
3.新建一个测试类,然后写入代码,运行后得到的imageurl即为结果,TemplateId是上一步获取的,userid是上一步填入的。图片地址也是要放在OSS里(这个图片就是要与上张图片要融合的另一张图片,或者用官方示例图)。
import com.aliyun.tea.*;
import com.aliyun.facebody20191230.*;
import com.aliyun.facebody20191230.models.*;
import com.aliyun.teaopenapi.*;
import com.aliyun.teaopenapi.models.*;
public class Sample2 {
/**
* 使用AK&SK初始化账号Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
public static com.aliyun.facebody20191230.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config()
// 您的AccessKey ID
.setAccessKeyId(accessKeyId)
// 您的AccessKey Secret
.setAccessKeySecret(accessKeySecret);
// 访问的域名
config.endpoint = "facebody.cn-shanghai.aliyuncs.com";
return new com.aliyun.facebody20191230.Client(config);
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
com.aliyun.facebody20191230.Client client = Sample2.createClient("idxxxx", "keyxxxx");
MergeImageFaceRequest mergeImageFaceRequest = new MergeImageFaceRequest()
.setUserId("test")
.setTemplateId("e3184189-7243-400e-a918-99038edabb22")
.setImageURL("https://invi-label.oss-cn-shanghai.aliyuncs.com/label/temp/faceswap/img_facefusion/template/sucai1.jpg");
// 复制代码运行请自行打印 API 的返回值
client.mergeImageFace(mergeImageFaceRequest);
System.out.println(client.mergeImageFace(mergeImageFaceRequest).toMap());
}
}
4.最终融合结果
5.顺利完成所有任务!!
阿里云高校计划,陪伴两千多所高校在校生云上实践、云上成长。在这里你可以领用免费的cpu资源,还可以参加免费训练营,实践提高:https://developer.aliyun.com/adc/student/
最后
以上就是糟糕西装为你收集整理的阿里云趣味视觉AI训练营Class 2笔记的全部内容,希望文章能够帮你解决阿里云趣味视觉AI训练营Class 2笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复