在线时间279 小时
UID3181444
注册时间2015-12-8
NXP金币2
TA的每日心情 | 开心 2017-11-15 10:33 |
---|
签到天数: 79 天 连续签到: 1 天 [LV.6]常住居民II
金牌会员
 
- 积分
- 1779
- 最后登录
- 2020-8-22
|
好几天没发帖了,最近因为各种事儿,比较忙,这两天在学习利用安卓开发人脸识别。
大致有几种方式:
1.自己写处理算法,简单的还能写写,复杂的就我这理论水平完全办不了, 果断放弃了。
2.连接开放的云平台。这个相对简单,一两天就能搞定。如Face++,科大讯飞都推出了相应的开放平台。
3.导入开源的视觉库,如Opencv,这个后续会学习。
笔者比较懒,当然选择第2种途径,选用了全球最大的Face++人脸识别开发平台,主要是免费的,这两天做了简单的移植和学习。开发非常简单,快速。附上简单的移植代码,就不上图了,刚开始开发界面较Low.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.tv_result);
img = (ImageView)findViewById(R.id.imageView);
File file = new File(path);
if (file.exists()) {
Bitmap bm = BitmapFactory.decodeFile(path);
if (bm != null) {
bm = convertBmp(bm);
}
//将图片显示到ImageView中
img.setImageBitmap(bm);
//img.setRotation(0);
Toast.makeText(this, "打开图片"+bm.getHeight()+" "+bm.getWidth(), Toast.LENGTH_SHORT).show();
}
task.start();
}
Thread task =new Thread(new Runnable() {
public void run() {
HttpRequests httpRequests = new HttpRequests("b6c10138ef9818b8898171a8e86567ef", "hfVTet1TfaWp7LmO1PGiM9TIX_6VadoD", true, true);
try {
PostParameters post = new PostParameters();
//detect 设置查看网络图片
//post.setUrl("http://pic.4j4j.cn/upload/pic/20130815/31e652fe2d.jpg");
//detect 设置查看SD卡图片
post.setImg(new File(path));
result = httpRequests.detectionDetect(post);
//detect 获取face_id
face = result.getJSONArray("face").getJSONObject(0).getString("face_id");
//landmark 设置face_id
post.setFaceId(face);
post.setFaceId1(face);
post.setFaceId2("247de91ad472241d38a994dbe2297082");
//landmark 设置返回值的个数
post.setType("25p");
//landmark 检测面部轮廓
//face_result = httpRequests.detectionLandmark(post);
face_result = httpRequests.recognitionCompare(post);
Message tempMsg = mHandler.obtainMessage();
tempMsg.what = NETUPDATE;
tempMsg.obj = face_result;
mHandler.sendMessage(tempMsg);
} catch(FaceppParseException e) {
e.printStackTrace();
} catch (Exception e) {
}finally {
try {
for (int i = 1; i < result.getJSONArray("face").length(); ++i) {
httpRequests.personDelete(new PostParameters().setPersonName("person_"+i));
httpRequests.facesetDelete(new PostParameters().setFacesetName("faceset_"+i));
}
} catch (JSONException e) {
e.printStackTrace();
} catch (FaceppParseException e) {
e.printStackTrace();
}
}
}
});
@SuppressLint("HandlerLeak")
public Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch(msg.what)
{
case NETUPDATE:tv.setText(""+msg.obj);break;
}
}
};
后续待把大体的功能都搞定了再结合科大讯飞的语音SDK,加到我的作品上,这效果,应当不错吧。
|
|