您的位置:首页 > 其它

关于百度人脸识别的尝试收获

2017-06-29 13:29 246 查看

1.ajax的跨域请求问题

这里直接给出ajax的请求代码,由于ajax认为跨域的post请求不安全,所以再进行项目实现的时候,必须自己写一个中转的接口,我这里是自己写了一个addface这个接口来接受post请求,才能处理。不用get的方式是因为,图片经过base64编码后作为参数去请求域外接口时,请求体会异常庞大,甚至有时候会让浏览器无法无法解析。而且这里注意一个问题,就是在项目发布到服务器后要注意ajax的请求地址应该改成映射的地址。


2.关于json的处理

$.post("https://cac66068.ngrok.io/GasMonitor/addface",
{
"image":data1
},
function(data){
//进行判断,json中是否存在error_msg这个key
if(data.hasOwnProperty("error_msg")) {
alert("注册失败");
} else {
alert("注册成功");
}

},
"json");


除了这些问题以外,还要注意json类型数据的处理,特别是嵌套类型的json类型的处理,其中json(回调函数中通常写成data).hasOwnProperty(“key”)可以判断json中是否含有”key”这个属性名,这里可以用“data.属性”的方法来获取属性的值,如果是嵌套的话,还要加后续的属性,比如下面的json:

{
"result":[
{"expression":0,
"beauty":48.416812896729,
"gender":"male",
"gender_probability":0.99925523996353,
"roll":-1.3796654939651,
"glasses_probability":0.99953198432922,
"face_probability":0.71843481063843,
"yaw":-5.5738277435303,
"glasses":1,
"expression_probablity":0.99941623210907,
"location":{"top":189,"left":100,"width":165,"height":154},
"rotation_angle":0,
"pitch":6.1355400085449,
"age":27.296012878418}
],
"log_id":3239516879,
"result_num":1
}


我现在要取result中具体的属性就要这么取:data.result[0].gender、data.result[0].gender、data.result[0].expression

3.图片编码的问题

将图片转成二进制数组,通常用来将图片写入数据库可以这么干,user.setpicture(pic);

String imagePath1 = "C:\\Users\\weiguoLiu\\Desktop\\test.jpg";

//将图片转成二进制数组进行上传
byte[] pic = null;
File f = new File(imagepath);
FileInputStream fis = new FileInputStream(f);
pic = new byte[fis.available()];
fis.read(pic);
fis.close();


关于base64编码,在拿到后,将头部的前缀去掉,拿到编码的主体:base64.substring(22);js中是imgData.substr(22);到后台进行处理的得到二进制数组直接利用工具类进行解码即可:

byte[] pic = Base64.decode(image);


当然也可以自己写两者的编码互转方式:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class IMGToBase64 {
//图片转化成base64字符串
public static String GetImageStr(String imgPath)
{
if(imgPath!=null && !"".equals(imgPath) && new File(imgPath).exists()){
//将图片文件转化为字节数组字符串,并对其进行Base64编码处理
String imgFile = imgPath;//待处理的图片
InputStream in = null;

4000
byte[] data = null;
//读取图片字节数组
try
{
in = new FileInputStream(imgFile);
data = new byte[in.available()];
in.read(data);
in.close();
}
catch (IOException e)
{
e.printStackTrace();
}
//对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);//返回Base64编码过的字节数组字符串

}else{
return null;
}
}

//base64字符串转化成图片
public static boolean GenerateImage(String imgStr)
{   //对字节数组字符串进行Base64解码并生成图片
if (imgStr == null) //图像数据为空
return false;
BASE64Decoder decoder = new BASE64Decoder();
try
{
//Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for(int i=0;i<b.length;++i)
{
if(b[i]<0)
{//调整异常数据
b[i]+=256;
}
}
//生成jpeg图片
String imgFilePath = "d://222.jpg";//新生成的图片
OutputStream out = new FileOutputStream(imgFilePath);
out.write(b);
out.flush();
out.close();
return true;
}
catch (Exception e)
{
return false;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息