- Saved searches
- Use saved searches to filter your results more quickly
- face-recognition
- Here are 160 public repositories matching this topic.
- exadel-inc / CompreFace
- Lauszus / FaceRecognitionApp
- HMS-Core / hms-ml-demo
- FaceOnLive / Face-Liveness-Detection-SDK-Android
- FaceOnLive / Face-Recognition-SDK-Android
- abhn / marvel
- wihoho / FaceRecognition
- Pradyuman7 / LookAtMe
- sekwiatkowski / awesome-ai-services
- kby-ai / FaceLivenessDetection-Android
- atharvakale31 / Real-Time_Face_Recognition_Android
- anupsarkar-dev / ExoVisix
- HMS-MLKit / HUAWEI-HMS-MLKit-Sample
- prasadus92 / face-recognition
- wangjiangyong / tflite_android_facedemo
- MinhasKamal / GenderRecognizer
- katejay / Face-Detection-And-Recognition-Based-Attendance-System
- sanstorik / server_face_recognition
- Zod20 / OpenCV-Face-Recognition-Android
- robi56 / FaceEMR
- Improve this page
- Add this topic to your repo
- Создание Android приложения для обнаружения лиц в режиме реального времени с использованием Firebase ML Kit
- Камера (Camera)
- Кадр (Frame)
- Детектор лиц (Face Detector)
- Оверлей (Overlay)
- Создание приложения для обнаружения лиц в реальном времени за 3 шага
- Заключение
- Распознавание лиц в 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
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
В начале этого года 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 уже работает.