1. 程式人生 > >使用Java開發人臉融合(換軍裝等)並接入微信小程式

使用Java開發人臉融合(換軍裝等)並接入微信小程式


先看一個演示圖片(圖片不是靜止哦只是慢)


如何接入人臉融合功能到小程式

建立一個AI應用

記得複製APPID APPKEY

使用Java接入該功能

建立一個SpringMVC工程,包含上傳相關jar。或者SpringBoot工程也行。鄙人後端還在完善並沒有完全開源。具體可以參考https://gitee.com/xshuai/xai 專案

如果使用maven搭建。直接pom引入即可哦

<!-- https://mvnrepository.com/artifact/cn.xsshome/taip -->
<dependency>
    <groupId>cn.xsshome</
groupId>
<artifactId>taip</artifactId> <version>4.2.1</version> </dependency>
  • FaceMergeController(後端處理程式碼)
import java.util.Iterator;
import org.apache.log4j.Logger;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller
; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import cn.xsshome.taip.ptu.TAipPtu; /** * 人臉融合介面 * url:http://www.xxx.com/facemerge/uploadFM */
@Controller @RequestMapping(value="/facemerge") @Scope("prototype") public classFaceMergeControllerextendsBaseController{ private static final Logger logger = Logger.getLogger(FaceMergeController.class); /** * 人臉融合 * @throws Exception */ @RequestMapping(value="/uploadFM",method=RequestMethod.POST) public void UploadBDANIMAL()throws Exception{ TAipPtu aipPtu = new TAipPtu("APPID", "APPKEY"); String model = request.getParameter("model"); logger.info("model的值是===="+model); String model = request.getParameter("model"); logger.info("model的值是===="+model); String result = ""; MultipartHttpServletRequest mpRequest = (MultipartHttpServletRequest)this.request; Iterator iter = mpRequest.getFileNames(); MultipartFile file = null; while (iter.hasNext()) { file = mpRequest.getFile((String)iter.next()); if ((file != null) && (file.getSize() != 0L)){ byte[] image = file.getBytes(); String apiPtuResult = aipPtu.faceMerge(image,Integer.parseInt(model)); PrintUtil.printJson(this.response, apiPtuResult); } else { logger.error("請檢查上傳檔案是否正確"); result = "{\"result\", \"FAIL\",\"msg\":\"伺服器開小差了\"}"; PrintUtil.printJson(this.response, result); } } } }
  • BaseController(基類)
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.ModelAttribute;
/**
 * 基類Controller 
 * 一些引數
 * Title: BaseController	
 * @author 小帥丶
 * @version 1.0
 */
public classBaseController{
	public Map session;
	public String openId;
	public String errMsg;
	public String jsonParam;
	public String callback;
	protected HttpServletRequest request;
	protected HttpServletResponse response;
	/**
	 * 每次請求都會帶上
	 * @param jsonParam
	 * @param callback
	 * @param openId
	 */
	@ModelAttribute
	publicvoidsetReqAndRes(Map session, String openId, String errMsg,
			String jsonParam, String callback, HttpServletRequest request,
			HttpServletResponse response){
		this.session = session;
		this.openId = openId;
		this.errMsg = errMsg;
		this.jsonParam = jsonParam;
		this.callback = callback;
		this.request = request;
		this.response = response;
	}
	public Map getSession(){
		return session;
	}
	publicvoidsetSession(Map session){
		this.session = session;
	}
	public String getOpenId(){
		return openId;
	}
	publicvoidsetOpenId(String openId){
		this.openId = openId;
	}
	public String getErrMsg(){
		return errMsg;
	}
	publicvoidsetErrMsg(String errMsg){
		this.errMsg = errMsg;
	}
	public String getJsonParam(){
		return jsonParam;
	}
	publicvoidsetJsonParam(String jsonParam){
		this.jsonParam = jsonParam;
	}
	public String getCallback(){
		return callback;
	}
	publicvoidsetCallback(String callback){
		this.callback = callback;
	}
	public HttpServletRequest getRequest(){
		return request;
	}
	publicvoidsetRequest(HttpServletRequest request){
		this.request = request;
	}
	public HttpServletResponse getResponse(){
		return response;
	}
	publicvoidsetResponse(HttpServletResponse response){
		this.response = response;
	}
	
	public String getRealPath(String path){
		return request.getSession().getServletContext().getRealPath(path);

	}
}
  • PrintUtil(響應類)
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import javax.servlet.http.HttpServletResponse;
/**
 * 輸出結果
 * @author 小帥丶
 *
 */
public classPrintUtil{
	publicstaticvoidprintXml(HttpServletResponse response,String result){
		try {
			response.setContentType("text/xml; charset=UTF-8");  
			PrintWriter sos = response.getWriter();
			sos.write(result);
			sos.flush();
			sos.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 採用json 或 jsonp
	 * @param callback
	 * @param response
	 * @param result
	 */
	publicstaticvoidprintJson(String callback,HttpServletResponse response,String result){
		boolean jsonP = false;
		if (callback != null) {
		    jsonP = true;
		    response.setContentType("text/javascript;charset=utf-8");
		} else {
		    response.setContentType("application/x-json;charset=utf-8");
		}
		
			try {
				Writer out = response.getWriter();
				if (jsonP) {
				    out.write(callback + "(");
				}
				out.write(result.toString());
				if (jsonP) {
				    out.write(");");
				}
				out.flush();
				out.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
	}
	
	publicstaticvoidprintJson(HttpServletResponse response,String result){
		try {
			response.setCharacterEncoding("UTF-8");  
		    response.setContentType("application/json; charset=utf-8");  
			PrintWriter sos = response.getWriter();
			sos.write(result);
			sos.flush();
			sos.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

微信小程式程式碼實現

小帥一點資訊小程式程式碼是開源的哦

學習並使用了微信小程式scroll-view元件

微信小程式上傳限制為2048kb。相關圖片過多超了限制。因此需要用到雲端儲存。使用阿里雲 騰訊雲都可以哦。在親測的情況下發現。即使雲儲存域名不在小程式裡面新增也是可以正常訪問哦

截圖


以上就是接入的整體流程 可以掃碼體驗哦