跟一个学习视频的老铁聊天,问我Java能不能做AI人工智能的东西?当然可以,很多大厂都提供了AI人工智能的免费或付费服务,可以通过三方接口调用来完成,这是最简单的方式了,当然如果你对AI确实感兴趣,建议可以从神经网络、图像与视觉、OpenCV,机器学习的实现技术,俗话说得好,兴趣是最好的老湿,威哥带一起搞一个简单的AI美颜程序出来,体验一下,AI的魅力所在。

为了让老铁们可以快速上手撸代码,威哥采用百度AI的API来实现这个案例,放心,so eazy!

先上效果图:

一、程序启动后先加载默认图片

java技术栈 logo java技术栈如何转ai_开发语言

二、直接按下【一键美妆】按钮,看看效果:

java技术栈 logo java技术栈如何转ai_json_02

美女果然是换妆啦,我喜欢这种淡淡的粉红粉红色,你喜欢吗,不喜欢也没办法,这是直接调用百度AI换妆API自动换妆后返回的结果。

三、再看看【一键去泰国】功能是啥情况?哈哈

java技术栈 logo java技术栈如何转ai_开发语言_03

果然立马成了大妈,一口红牛差点没给吐出来,赶紧咽下去,差点浪费了一口,哈哈!

好了,程序演示完了,下面说一下如何实现的,小伙伴们准备好了吗,马上开干!

为了用界面展示程序,简单的用swing画了一个界面,大家会不会都无所谓,swing也不常用,就是自己玩玩而已。

首先打开百度AI的开发者平台,先看一下API咋用,地址如下:

https://cloud.baidu.com/apiexplorer/index.html?Product=GWSE-nmhroEsyriA&Api=GWAI-t2QcRmst8Vi

java技术栈 logo java技术栈如何转ai_json_04

由于是网络操作,有延迟,所以把按钮的事件处理用一个线程调用来操作:

//虚拟换妆API调用
        jButtonStart.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("开始美妆");
                new Thread(new Runnable() {
                    public void run() {
                        try {
                            startFace();
//                            faceBeauty();
                        } catch (IOException ex) {
                            ex.printStackTrace();
                        }
                    }
                }).start();

            }
        });

把操作的代码封装成一个方法:

String image = "https://sf3-ttcdn-tos.pstatp.com/obj/pgc-image/542152d72ee74a90997c162a1d5d73d0";
    byte[] bytes = null;//response data

 //换妆
    private void startFace() throws IOException {
        String path = "https://aip.baidubce.com/rest/2.0/face/v1/transfer";
        ApiExplorerRequest request = new ApiExplorerRequest(HttpMethodName.POST, path);
        // 设置header参数
        request.addHeaderParameter("Content-Type", "application/json;charset=UTF-8");
//        path = path+AuthService.getAuth();
        // 设置query参数
        request.addQueryParameter("access_token",AuthService.getAuth());
        // 设置jsonBody参数
//        ResourceBundle bundle = ResourceBundle.getBundle("res");
//        String jsonBody = bundle.getString("url");

        String jsonBody = "{\"source_image\":{\"image\":\""+image+"\",\"image_type\":\"URL\"},\"reference_images\":[{\"image\":\""+image+"\",\"image_type\":\"URL\"}]}";

//        System.out.println("777777:"+jsonBody);
        request.setJsonBody(jsonBody);

        ApiExplorerClient client = new ApiExplorerClient();

        try {
            ApiExplorerResponse response = client.sendRequest(request);
            // 返回结果格式为Json字符串
            String result = response.getResult();
            System.out.println("******************"+result);
            JSONObject jsonObject = new JSONObject(result);
            JSONObject resultObject = jsonObject.getJSONObject("result");
            String transfer_image = resultObject.getString("transfer_image");
            System.out.println(transfer_image);
            bytes = Base64.decodeBase64(transfer_image);
            if (bytes!=null) {
                ImageIcon icon = new ImageIcon(bytes);
                Image image1 = changeImage(IMAGE_WIDTH, IMAGE_HEIGHT, icon.getImage(), true);
                icon = new ImageIcon(image1);
                jLabel_iamge1.setIcon(icon);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

搞定,测试一下吧。

再来试试【一键去泰国】功能

按钮事件处理:

jButtonEditor.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                new Thread(new Runnable() {
                    public void run() {
                        faceEditattr();
                    }
                }).start();
            }
        });

找到百度AI的示例代码,如下截图:

java技术栈 logo java技术栈如何转ai_开发语言_05

切换【示例代码】右边的【参数说明】选项:

java技术栈 logo java技术栈如何转ai_开发语言_06

威哥按照示例代码,封装的方法如下:

通过 jsonBody变量配置参数,action_type参数配置为 TO_FEMALE,老铁们也可以根据上图中的参数常量,测试其他选项,例如:

人脸编辑方式

  • TO_KID: V1版本变小孩
  • TO_OLD: V1版本变老人
  • TO_FEMALE: V1版本变女生
  • TO_MALE: V1版本变男生
  • V2_AGE:V2版本年龄变换,选择该项后可通过target参数指定年龄
  • V2_GENDER:v2版本性别变换,选择该项后需通过target进一步指定要转换的性别
public void faceEditattr(){
        String path = "https://aip.baidubce.com/rest/2.0/face/v1/editattr";
        ApiExplorerRequest request = new ApiExplorerRequest(HttpMethodName.POST, path);

        // 设置header参数
        request.addHeaderParameter("Content-Type", "application/json;charset=UTF-8");
        // 设置query参数
        request.addQueryParameter("access_token",AuthService.getAuth());


        // 设置jsonBody参数
        String jsonBody = "{\"image\":\""+image+"\",\"image_type\":\"URL\",\"action_type\":\"TO_FEMALE\",\"quality_control\":\"HIGH\"}";
        request.setJsonBody(jsonBody);

        ApiExplorerClient client = new ApiExplorerClient();

        try {
            ApiExplorerResponse response = client.sendRequest(request);
            String result = response.getResult();
            // 返回结果格式为Json字符串
            System.out.println("faceEditattr="+result);
            JSONObject jsonObject = new JSONObject(result);
            JSONObject resultObject = jsonObject.getJSONObject("result");
            String transfer_image = resultObject.getString("image");
            System.out.println(transfer_image);
            bytes = Base64.decodeBase64(transfer_image);
            if (bytes!=null) {
                ImageIcon icon = new ImageIcon(bytes);
                Image image1 = changeImage(IMAGE_WIDTH, IMAGE_HEIGHT, icon.getImage(), true);
                icon = new ImageIcon(image1);
                jLabel_iamge1.setIcon(icon);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

OK,测试一下,完美展示文章开头的效果,好了,感兴趣的朋友可以自己操作一下!