API распознавания лиц
Используя Java Android, я пытаюсь найти способ распознавания лица с помощью данной фотографии.
Есть идеи? У кого-нибудь есть предложения API?
- Ошибка: выполнение выполнено для задачи ': app: processDebugResources'. > java.io.IOException: не удалось удалить папку "" в андроид-студии
- Прочитайте stream дважды
- Записывать телефонные звонки на Android-телефоне?
- Как передать строку из одной активности в другую?
- Как я могу печатать на одной строке?
- Статический порядок инициализации Java
- Расширение от двух classов
- Динамический список в приложении Android
- Преобразование римских чисел в десятичные числа
- Java Runtime.exec ()
- Android - Как сделать скриншот программным
- Можно ли изменить цвет текста в строке на несколько цветов в Java?
- Каким должно быть значение эпсилона при двойном эквивалентном сравнении
Вот некоторые ссылки, которые я нашел в библиотеках распознавания лиц.
- Android FaceDetector.Face для Android
- Учебное пособие: внедрение функции обнаружения лиц в Android
- OpenCV Facerecog
Идентификационные ссылки изображений:
- Moodstocks
- Ltutech
Вы используете class media.FaceDetector в android для обнаружения лица бесплатно.
Это пример обнаружения лица: https://github.com/betri28/FaceDetectCamera
macgyver предлагает программы обнаружения лиц с помощью простого в использовании API.
В приведенной ниже программе делается ссылка на общеansible образ и будет возвращать массив координат и размеров любых лиц, обнаруженных на изображении.
https://askmacgyver.com/explore/program/face-location/5w8J9u4z
Используйте этот код
public class MainActivity extends AppCompatActivity { private FaceOverlayView mFaceOverlayView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mFaceOverlayView = (FaceOverlayView) findViewById( R.id.face_overlay ); InputStream stream = getResources().openRawResource( R.raw.face ); Bitmap bitmap = BitmapFactory.decodeStream(stream); mFaceOverlayView.setBitmap(bitmap); } }
Faceoverlay.java
public class FaceOverlayView extends View { private Bitmap mBitmap; private SparseArray mFaces; public FaceOverlayView(Context context) { this(context, null); } public FaceOverlayView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public FaceOverlayView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public void setBitmap( Bitmap bitmap ) { mBitmap = bitmap; FaceDetector detector = new FaceDetector.Builder( getContext() ) .setTrackingEnabled(true) .setLandmarkType(FaceDetector.ALL_LANDMARKS) .setMode(FaceDetector.ACCURATE_MODE) .build(); if (!detector.isOperational()) { //Handle contingency } else { Frame frame = new Frame.Builder().setBitmap(bitmap).build(); mFaces = detector.detect(frame); detector.release(); } logFaceData(); invalidate(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if ((mBitmap != null) && (mFaces != null)) { double scale = drawBitmap(canvas); drawFaceLandmarks(canvas, scale); } } private double drawBitmap(Canvas canvas) { double viewWidth = canvas.getWidth(); double viewHeight = canvas.getHeight(); double imageWidth = mBitmap.getWidth(); double imageHeight = mBitmap.getHeight(); double scale = Math.min(viewWidth / imageWidth, viewHeight / imageHeight); Rect destBounds = new Rect(0, 0, (int)(imageWidth * scale), (int)(imageHeight * scale)); canvas.drawBitmap(mBitmap, null, destBounds, null); return scale; } private void drawFaceBox(Canvas canvas, double scale) { //This should be defined as a member variable rather than //being created on each onDraw request, but left here for //emphasis. Paint paint = new Paint(); paint.setColor(Color.GREEN); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(5); float left = 0; float top = 0; float right = 0; float bottom = 0; for( int i = 0; i < mFaces.size(); i++ ) { Face face = mFaces.valueAt(i); left = (float) ( face.getPosition().x * scale ); top = (float) ( face.getPosition().y * scale ); right = (float) scale * ( face.getPosition().x + face.getWidth() ); bottom = (float) scale * ( face.getPosition().y + face.getHeight() ); canvas.drawRect( left, top, right, bottom, paint ); } } private void drawFaceLandmarks( Canvas canvas, double scale ) { Paint paint = new Paint(); paint.setColor( Color.GREEN ); paint.setStyle( Paint.Style.STROKE ); paint.setStrokeWidth( 5 ); for( int i = 0; i < mFaces.size(); i++ ) { Face face = mFaces.valueAt(i); for ( Landmark landmark : face.getLandmarks() ) { int cx = (int) ( landmark.getPosition().x * scale ); int cy = (int) ( landmark.getPosition().y * scale ); canvas.drawCircle( cx, cy, 10, paint ); } } } private void logFaceData() { float smilingProbability; float leftEyeOpenProbability; float rightEyeOpenProbability; float eulerY; float eulerZ; for( int i = 0; i < mFaces.size(); i++ ) { Face face = mFaces.valueAt(i); smilingProbability = face.getIsSmilingProbability(); leftEyeOpenProbability = face.getIsLeftEyeOpenProbability(); rightEyeOpenProbability = face.getIsRightEyeOpenProbability(); eulerY = face.getEulerY(); eulerZ = face.getEulerZ(); Log.e( "Tuts+ Face Detection", "Smiling: " + smilingProbability ); Log.e( "Tuts+ Face Detection", "Left eye open: " + leftEyeOpenProbability ); Log.e( "Tuts+ Face Detection", "Right eye open: " + rightEyeOpenProbability ); Log.e( "Tuts+ Face Detection", "Euler Y: " + eulerY ); Log.e( "Tuts+ Face Detection", "Euler Z: " + eulerZ ); } } }
Справка
https://github.com/tutsplus/Android-PlayServices-FaceDetection/tree/master/app/src/main
Вы можете попробовать Microsoft Face API. Он может выявлять и идентифицировать людей. Узнайте больше о Face API здесь .