Распознавание лиц java android

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

face-recognition

Here are 160 public repositories matching this topic.

exadel-inc / CompreFace

Leading free and open-source face recognition system

Lauszus / FaceRecognitionApp

Face Recognition Android App

HMS-Core / hms-ml-demo

HMS ML Demo provides an example of integrating Huawei ML Kit service into applications. This example demonstrates how to integrate services provided by ML Kit, such as face detection, text recognition, image segmentation, asr, and tts.

FaceOnLive / Face-Liveness-Detection-SDK-Android

Robust, Realtime, On-Device Face Liveness Detection (Face Anti Spoofing) Android

FaceOnLive / Face-Recognition-SDK-Android

Fast, Accurate, Mask-Aware Face Recognition SDK with Liveness Detection

abhn / marvel

Marvel — Face Recognition With Android & OpenCV

Читайте также:  Ubuntu установка postgresql php

wihoho / FaceRecognition

Implement face recognition using PCA, LDA and LPP

Pradyuman7 / LookAtMe

VideoView that plays video only when 👀 are open and 👦 is detected with various other features

sekwiatkowski / awesome-ai-services

An overview of the AI-as-a-service landscape

kby-ai / FaceLivenessDetection-Android

This is a demo project for 3D passive face liveness detection, which is an anti-spoofing technology.

atharvakale31 / Real-Time_Face_Recognition_Android

Real-Time Face Recognition App using Tensorflow Lite

anupsarkar-dev / ExoVisix

Auto Attendance System Using Real Time Face Recognition With Various Computer Vision & Machine Learning Tools

HMS-MLKit / HUAWEI-HMS-MLKit-Sample

HUAWEI HMS meachine learning services demo apk download.

prasadus92 / face-recognition

A Java application for Face Recognition under expressions, occlusions and pose variations.

wangjiangyong / tflite_android_facedemo

MinhasKamal / GenderRecognizer

Plain Face Detector & Gender Recognizer

katejay / Face-Detection-And-Recognition-Based-Attendance-System

An automatic attendance system which identifying the face of multiple person and mark attendance in excel file and then upload it on firebase storage, which can fetch and view that file in android app.

sanstorik / server_face_recognition

Face recognition based on neural network and machine learning

Zod20 / OpenCV-Face-Recognition-Android

Face Detection & Recognition on Android using OpenCV

robi56 / FaceEMR

Facial Expression Recognition in android where the predictive model built in tensorflow using convolutional neural network

Improve this page

Add a description, image, and links to the face-recognition topic page so that developers can more easily learn about it.

Add this topic to your repo

To associate your repository with the face-recognition topic, visit your repo’s landing page and select «manage topics.»

Источник

Создание Android приложения для обнаружения лиц в режиме реального времени с использованием Firebase ML Kit

Создание Android приложения для обнаружения лиц в режиме реального времени с использованием ML Kit

В начале этого года Google представил новый продукт: Firebase Machine Learning Kit. ML Kit позволяет эффективно использовать возможности машинного обучения в Android и iOS приложениях. В этом посте я буду рассказывать о том, как с его помощью создать Android приложение для обнаружения лиц в реальном времени.

Обнаружение лиц — это только одна из возможностей компьютерного зрения, которую предлагает Firebase ML Kit (или, вернее, облегчает её использование). Это функция, которая может быть полезна во многих приложениях: подписывание людей на фотографиях, работа с селфи, добавление эмоджи и других эффектов во время съёмки, фотографирование только тогда, когда все улыбаются с открытыми глазами, и т.д. Возможности безграничны.

Мы уже публиковали статьи о других функциях Firebase ML Kit:

Однако, реализовать детектор лиц в собственном приложении по-прежнему нелегко. Нужно понять, как работает API, какую информацию он предоставляет, как её обрабатывать и использовать, учитывая ориентацию устройства, источник камеры и выбранную камеру (переднюю или заднюю).

В идеале мы должны получить код вроде этого:

camera.addFrameProcessor < frame ->faceDetector.detectFaces(frame) >

Основные компоненты здесь — это camera, frame, faceDetector. Прежде чем разобраться с каждым из них, предположим, что наш layout содержит сам компонент камеры и некий оверлей, на котором мы будем рисовать квадратики вокруг обнаруженных лиц.

 // Any other views  // Any other views 

Камера (Camera)

Независимо от того, какой API-интерфейс камеры мы используем, самое главное, чтобы он предоставлял способ обработки отдельных кадров. Таким образом, мы сможем обрабатывать каждый входящий кадр, идентифицировать лица в нём и отображать это пользователю.

Кадр (Frame)

Кадр представляет собой информацию, предоставленную камерой, для обнаружения лиц. Он должен содержать всё, что требуется детектору лиц для их обнаружения. Эта необходимая информация определяется ниже:

data class Frame( val data: ByteArray?, val rotation: Int, val size: Size, val format: Int, val isCameraFacingBack: Boolean) data class Size(val width: Int, val height: Int)
  • data — массив байтов, содержащий информацию о том, что камера отображает;
  • rotation — ориентация устройства;
  • size — ширина и высота предпросмотра камеры;
  • format — формат кодирования кадров;
  • isCameraFacingBack — указывает, используется ли передняя камера или задняя.

Детектор лиц (Face Detector)

Детектор лиц является самым важным компонентом — он берёт кадр, обрабатывает его и затем выводит результаты пользователю. Таким образом, детектор лиц использует экземпляр FirebaseVisionFaceDetector для обработки входящих кадров с камеры. Он также должен знать ориентацию камеры и её направление (передняя или задняя). Наконец, он должен знать на каком оверлее будут отображаться результаты. Скелет класса FaceDetector выглядит так:

class FaceDetector(private val faceBoundsOverlay: FaceBoundsOverlay) < private val faceBoundsOverlayHandler = FaceBoundsOverlayHandler() private val firebaseFaceDetectorWrapper = FirebaseFaceDetectorWrapper() fun process(frame: Frame) < updateOverlayAttributes(frame) detectFacesIn(frame) >private fun updateOverlayAttributes(frame: Frame) < faceBoundsOverlayHandler.updateOverlayAttributes(. ) >private fun detectFacesIn(frame: Frame) < firebaseFaceDetectorWrapper.process( image = convertFrameToImage(frame), onSuccess = < faceBoundsOverlay.updateFaces( /* Faces */) >, onError = < /* Display error message */ >) > >

Оверлей (Overlay)

Оверлей — это View-компонент, который находится поверх камеры. Он отображает рамки (или границы) вокруг обнаруженных лиц. Он должен знать ориентацию устройства, направление камеры (передняя или задняя) и размеры камеры (ширина и высота). Эта информация помогает определить, как рисовать границы вокруг обнаруженного лица, как масштабировать границы и следует ли их отражать.

class FaceBoundsOverlay @JvmOverloads constructor( ctx: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : View(ctx, attrs, defStyleAttr) < private val facesBounds: MutableList= mutableListOf() fun updateFaces(bounds: List) < facesBounds.clear() facesBounds.addAll(bounds) invalidate() >override fun onDraw(canvas: Canvas) < super.onDraw(canvas) facesBounds.forEach < val centerX = /* Compute the center's x coordinate */ val centerY = /* Compute the center's ycoordinate */ drawBounds(it.box, canvas, centerX, centerY) >> private fun drawBounds(box: Rect, canvas: Canvas, centerX: Float, centerY: Float) < /* Compute the positions left, right, top and bottom */ canvas.drawRect( left, top, right, bottom, boundsPaint) >>

На приведённой ниже диаграмме показаны компоненты, описанные выше, и способы взаимодействия их друг с другом с момента, когда камера подаёт на вход кадр, до момента, когда результаты отображаются пользователю.

Взаимодействие компонентов детектора лиц

Создание приложения для обнаружения лиц в реальном времени за 3 шага

Используя библиотеку для обнаружения лиц (которая содержит код, описанный выше), создание приложения становится довольно простым.

В этом примере я выбрал следующую библиотеку камеры.

Шаг 1. Добавьте FaceBoundsOverlay поверх камеры.

 // Any other views  // Any other views 

Шаг 2. Определите экземпляр FaceDetection и подключите его к камере.

private val faceDetector: FaceDetector by lazy < FaceDetector(facesBoundsOverlay) >cameraView.addFrameProcessor

Шаг 3. Настройте Firebase в проекте.

Заключение

Обнаружение лиц — это мощный функционал, а ML Kit делает его доступным и позволяет разработчикам выполнять с его помощью более сложные функции, такие как распознавание лиц, что выходит за рамки простого обнаружения: важно не только обнаружить лицо, но и определить, чьё оно.

Скоро в Ml Kit планируют добавить новую функцию — распознавание контура лица. С её помощью можно будет обнаруживать более 100 точек вокруг лица и быстро обрабатывать их. Это потенциально может быть полезно в приложениях с использованием объектов дополненной реальности или виртуальных стикеров (таких как Snapchat). Вместе функционалом обнаружения лиц можно будет создать много интересных приложений.

  • машинное обучение
  • распознавание
  • machine learning
  • face detection
  • android development
  • android
  • андроид
  • перевод с английского
  • программирование
  • разработка
  • devcolibri
  • никто не читает теги

Источник

Распознавание лиц в Android стандартными средствами

Всем привет, хочу рассказать и показать на простом примере, какие инструменты существуют в стандартной Android API для распознавания лиц на изображениях. Допустим, что читатель знает как работать с камерой в Android.

Их всего 2:
Способ первый:
Колбек интерфейс Camera.FaceDetectionListener доступный с API level 14, при условии что камера вашего телефона поддерживает распознавание лиц.
Для проверки, поддерживает ли камера распознавание лиц, используем метод

camera.getParameters().getMaxNumDetectedFaces() 

если число больше 0 — значит поддерживает. Что бы запустить детектор лиц, сначала запускаем привью камеры

camera.startPreview(); // стартуем привью камеры 
 camera.startFaceDetection(); // стартуем распознавание лиц 

для остановки детектинга вызываем

camera.stopFaceDetection(); //останавливаем распознавание лиц 
camera.stopPreview(); //останавливаем привью камеры 
FaceDetectionListener faceDetectionListener = new FaceDetectionListener()< @Override public void onFaceDetection(Face[] faces, Camera camera) < if (faces.length == 0)< //No Face Detected! >else < // Face Detected >>>; 
camera.setFaceDetectionListener(faceDetectionListener); 

В колбеке нам придет массив лиц с такими параметрами, координаты центра правого глаза Point rightEye , левого Point leftEye , рта Point mouth , координаты квадрата в который вписано найденное лицо Rect rect , и коэффициент достоверности от 1 до 100 int score , гугл рекомендует игнорировать все что меньше 50, но уточняют, что все зависит от камеры.
В принципе готово, и в листенере можно делать с найденными лицами android.hardware.Camera.Face[] faces что захотим.
Но такой способ работает только для изображения с привью камеры с Android API 14 версии, еще и при условии поддержки этой функции камерой.

Способ второй:
Класс FaceDetector , который доступен еще с самой первой версии API level 1.
Этим способом мы можем взять для обработки любое изображение имеющееся на устройстве.

Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.face3); mFaceBitmap = b.copy(Bitmap.Config.RGB_565, true); //обязательно конвертируем битмап в битмап с параметром RGB_565 иначе лица не распознаются, он почему то понимает только этот формат. mFaceWidth = mFaceBitmap.getWidth(); //берем ширину mFaceHeight = mFaceBitmap.getHeight(); // берем высоту 
FaceDetector.Face[] faces = new FaceDetector.Face[MAX_FACES]; // в параметр MAX_FACES передаем максимальное количество лиц которое ожидаем найти, если на фото количество лиц больше этого параметра, то остальные лица просто игнорируются, этот параметр влияет на производительность, осторожно с большими значениями. FaceDetector fd = new FaceDetector(mFaceWidth, mFaceHeight, MAX_FACES); count = fd.findFaces(mFaceBitmap, faces); //ищем лица на фото, получаем массив лиц. 

И получаем маcсив объектов android.media.FaceDetector.Face[] faces , в котором будут лежать все найденные лица со своими параметрами, расстояние между глазами eyesDistance () , угол поворота лица по оси переданной в параметре float pose (int euler) , координаты точки между глаз getMidPoint (PointF point) и параметр достоверности confidence () тут уже от 0 до 1, должен быть более 0.3.

Если параметр достоверности меньше рекомендуемых значений, то возможно как лицо определился объект похожий на лицо, но не являющийся им.

Интересное наблюдение, в классе FaceDetector.Face[] углы поворота лица всегда равны 0 по всем трем осям, хотя на фото бывали лица немного повернуты, глядя в исходники класса на С++ все становиться ясно

_env->SetFloatField(face, gFaceOffsets.confidence, faceData.confidence); _env->SetFloatField(face, gFaceOffsets.midpointx, faceData.midpointx); _env->SetFloatField(face, gFaceOffsets.midpointy, faceData.midpointy); _env->SetFloatField(face, gFaceOffsets.eyedist, faceData.eyedist); _env->SetFloatField(face, gFaceOffsets.eulerx, 0); _env->SetFloatField(face, gFaceOffsets.eulery, 0); _env->SetFloatField(face, gFaceOffsets.eulerz, 0); 

Они просто поленились его допилить. Но в новом FaceDetectionListener уже работает.

Источник

Оцените статью