跟一个学习视频的老铁聊天,问我Java能不能做AI人工智能的东西?当然可以,很多大厂都提供了AI人工智能的免费或付费服务,可以通过三方接口调用来完成,这是最简单的方式了,当然如果你对AI确实感兴趣,建议可以从神经网络、图像与视觉、OpenCV,机器学习的实现技术,俗话说得好,兴趣是最好的老湿,威哥带一起搞一个简单的AI美颜程序出来,体验一下,AI的魅力所在。
为了让老铁们可以快速上手撸代码,威哥采用百度AI的API来实现这个案例,放心,so eazy!
先上效果图:
一、程序启动后先加载默认图片
二、直接按下【一键美妆】按钮,看看效果:
美女果然是换妆啦,我喜欢这种淡淡的粉红粉红色,你喜欢吗,不喜欢也没办法,这是直接调用百度AI换妆API自动换妆后返回的结果。
三、再看看【一键去泰国】功能是啥情况?哈哈
深入学习领取资料+视频,微信扫码
果然立马成了大妈,一口红牛差点没给吐出来,赶紧咽下去,差点浪费了一口,哈哈!
好了,程序演示完了,下面说一下如何实现的,小伙伴们准备好了吗,马上开干!
为了用界面展示程序,简单的用swing画了一个界面,大家会不会都无所谓,swing也不常用,就是自己玩玩而已。
首先打开百度AI的开发者平台,先看一下API咋用,地址如下:
https://cloud.baidu.com/apiexplorer/index.html?Product=GWSE-nmhroEsyriA&Api=GWAI-t2QcRmst8Vi
由于是网络操作,有延迟,所以把按钮的事件处理用一个线程调用来操作:
//虚拟换妆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的示例代码,如下截图:
切换【示例代码】右边的【参数说明】选项:
威哥按照示例代码,封装的方法如下:
深入学习领取资料+视频,微信扫码
通过 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,测试一下,完美展示文章开头的效果,好了,感兴趣的朋友可以自己操作一下!
现成代码,扫码添加微信免费领