【Android】测试Face++的人脸识别算法
来源:互联网 发布:淘宝自定义区图片尺寸 编辑:程序博客网 时间:2024/05/28 05:17
FacePlusPlus的博客
package com.duanjiwei.faceplusplusapp;import android.content.ContentResolver;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.net.Uri;import android.provider.MediaStore;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import com.facepp.error.FaceppParseException;import com.facepp.http.HttpRequests;import com.facepp.http.PostParameters;import org.json.JSONObject;import java.io.ByteArrayOutputStream;import java.io.IOException;import org.json.JSONException;import android.database.Cursor;import android.graphics.Canvas;import android.provider.MediaStore.Images.ImageColumns;public class MainActivity extends AppCompatActivity { final private int PICTURE_CHOOSE = 1; private ImageView imageView = null; private Bitmap img = null; private Button buttonDetect = null; private Button buttonFirst = null; private TextView textView = null; private TextView textViewDebug = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView)this.findViewById(R.id.textView1); textViewDebug = (TextView)this.findViewById(R.id.textView2); imageView = (ImageView)this.findViewById(R.id.imageView1); buttonFirst = (Button)findViewById(R.id.button1); buttonFirst.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "You Clicked Button1!", Toast.LENGTH_SHORT).show(); Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); photoPickerIntent.setType("image/*"); startActivityForResult(photoPickerIntent, PICTURE_CHOOSE); } }); buttonDetect = (Button)findViewById(R.id.button2); buttonDetect.setVisibility(View.INVISIBLE); buttonDetect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "You Clicked Button2!", Toast.LENGTH_SHORT).show(); textView.setText("Waiting ..."); FaceppDetect faceppDetect = new FaceppDetect(); faceppDetect.setDetectCallback(new DetectCallback() { public void detectResult(JSONObject rst) { //Log.v(TAG, rst.toString()); //use the red paint Paint paint = new Paint(); paint.setColor(Color.RED); paint.setStrokeWidth(Math.max(img.getWidth(), img.getHeight()) / 100f); //create a new canvas Bitmap bitmap = Bitmap.createBitmap(img.getWidth(), img.getHeight(), img.getConfig()); Canvas canvas = new Canvas(bitmap); canvas.drawBitmap(img, new Matrix(), null); try { //find out all faces final int count = rst.getJSONArray("face").length(); for (int i = 0; i < count; ++i) { float x, y, w, h; //get the center point x = (float)rst.getJSONArray("face").getJSONObject(i) .getJSONObject("position").getJSONObject("center").getDouble("x"); y = (float)rst.getJSONArray("face").getJSONObject(i) .getJSONObject("position").getJSONObject("center").getDouble("y"); //get face size w = (float)rst.getJSONArray("face").getJSONObject(i) .getJSONObject("position").getDouble("width"); h = (float)rst.getJSONArray("face").getJSONObject(i) .getJSONObject("position").getDouble("height"); //change percent value to the real size x = x / 100 * img.getWidth(); w = w / 100 * img.getWidth() * 0.7f; y = y / 100 * img.getHeight(); h = h / 100 * img.getHeight() * 0.7f; //draw the box to mark it out canvas.drawLine(x - w, y - h, x - w, y + h, paint); canvas.drawLine(x - w, y - h, x + w, y - h, paint); canvas.drawLine(x + w, y + h, x - w, y + h, paint); canvas.drawLine(x + w, y + h, x + w, y - h, paint); } //save new image img = bitmap; MainActivity.this.runOnUiThread(new Runnable() { public void run() { //show the image imageView.setImageBitmap(img); textView.setText("Finished, "+ count + " faces."); } }); } catch (JSONException e) { e.printStackTrace(); MainActivity.this.runOnUiThread(new Runnable() { public void run() { textView.setText("Error."); } }); } } }); faceppDetect.detect(img); } }); imageView.setImageBitmap(img); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (requestCode == PICTURE_CHOOSE) { if (intent != null) { try { //加载图片并显示 ContentResolver resolver = getContentResolver(); Uri originalUri = intent.getData();//获得图片的uri img = MediaStore.Images.Media.getBitmap(resolver, originalUri); imageView.setImageBitmap(img); //获取图片的路径 Cursor cursor = getContentResolver().query(intent.getData(), null, null, null, null); cursor.moveToFirst(); int idx = cursor.getColumnIndex(ImageColumns.DATA); String fileSrc = cursor.getString(idx); textViewDebug.setText("Picture:" + fileSrc); textView.setText("图片加载成功!"); buttonDetect.setVisibility(View.VISIBLE); }catch (IOException e) { textView.setText("TAG-->Error" + e.toString()); } } else { textViewDebug.setText("intent == null"); } } } private class FaceppDetect { DetectCallback callback = null; public void setDetectCallback(DetectCallback detectCallback) { callback = detectCallback; } public void detect(final Bitmap image) { new Thread(new Runnable() { public void run() { HttpRequests httpRequests = new HttpRequests("4480afa9b8b364e30ba03819f3e9eff5", "Pz9VFT8AP3g_Pz8_dz84cRY_bz8_Pz8M", true, false); //Log.v(TAG, "image size : " + img.getWidth() + " " + img.getHeight()); ByteArrayOutputStream stream = new ByteArrayOutputStream(); float scale = Math.min(1, Math.min(600f / img.getWidth(), 600f / img.getHeight())); Matrix matrix = new Matrix(); matrix.postScale(scale, scale); Bitmap imgSmall = Bitmap.createBitmap(img, 0, 0, img.getWidth(), img.getHeight(), matrix, false); //Log.v(TAG, "imgSmall size : " + imgSmall.getWidth() + " " + imgSmall.getHeight()); imgSmall.compress(Bitmap.CompressFormat.JPEG, 100, stream); byte[] array = stream.toByteArray(); try { //detect JSONObject result = httpRequests.detectionDetect(new PostParameters().setImg(array)); //finished , then call the callback function if (callback != null) { callback.detectResult(result); } } catch (FaceppParseException e) { e.printStackTrace(); MainActivity.this.runOnUiThread(new Runnable() { public void run() { textView.setText("Network error."); } }); } } }).start(); } } interface DetectCallback { void detectResult(JSONObject rst); }}
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.duanjiwei.faceplusplusapp.MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="加载图片" android:id="@+id/button1" android:layout_below="@+id/textView2" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="人脸识别" android:id="@+id/button2" android:layout_alignTop="@+id/button1" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView1" android:layout_below="@+id/button1" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="NewTextView" android:id="@+id/textView1" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="NewTextDebug" android:id="@+id/textView2" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /></RelativeLayout>
0 0
- 【Android】测试Face++的人脸识别算法
- 基于VGG-Face的人脸识别测试
- face++人脸识别
- face++ 人脸识别
- Face++人脸识别
- Face++人脸识别
- face++人脸识别的java调用
- Android移动开发-在Android项目里集成face++人脸识别的实现
- face++实现人脸识别
- face++人脸识别源码
- 人脸识别应用face+
- face++实现人脸识别
- 人脸识别之Face++
- face ++ 实现人脸识别
- 人脸识别face recognition
- Android使用Face++架构包实现人脸识别
- Face++人脸识别 android studio开发集成
- Face++ 人脸识别,身份识别集成
- Python多线程
- 300万字的《资治通鉴》最精华的大概就这10句
- [noip模拟赛]Formula 1(bfs+并查集)
- The Bitwise Operators(Java)
- codeforces 1B Spreadsheets
- 【Android】测试Face++的人脸识别算法
- show processlist 命令详解
- 选择Hexo还是Jekyll
- 拉普拉斯算子
- 周报8.15-8.21 struts2实现文件上传和下载(下载)
- 使用Spring进行统一日志管理 + 统一异常管理
- 《从零开始学Swift》学习笔记(Day 19)——函数参数传递
- leetcode: String to Integer (atoi)
- Java基础--待续未完