Общение в QQ группе: 891670629 (полностью заполнена), 694350800
Примечание: версия JDK должна быть выше 1.8.0_261
Библиотека Java для распознавания лиц, основанная на библиотеке SeetaFace6 от Китайской академии наук. Поддерживает детекцию лица, извлечение лица, сравнение 1:1, сравнение 1:N и независимую проверку живости на фотографии.
SeetaFace6: https://github.com/seetafaceengine/SeetaFace6
Скачайте модель (Ссылка: https://pan.baidu.com/s/1FYz4muY3X4tOKIKhb5kBVA, Код доступа: b6o4) и распакуйте её локально;
Скачайте соответствующие библиотеки из каталога build/lib на ваш компьютер: Windows (64-битная система);
Скачайте faces-data.db из каталога build и установите его локально; (Замечание: если вам не требуется использовать поиск 1:N по лицам, этот файл не нужен. В этом случае удалите конфигурацию sqlite.db.file из файла seetaface.properties);
Разместите файл seetaface.properties из src/main/resources/ в корневой директории resources вашего проекта;
# Названия зависимых библиотек, разделённые запятой
# Для операционной системы Windows
libs=tennis,tennis_haswell,tennis_pentium,tennis_sandy_bridge,SeetaAuthorize,SeetaFaceAntiSpoofingX600,
SeetaFaceDetector600,SeetaFaceLandmarker600,SeetaFaceRecognizer610,SeetaFace6JNI
# Директория хранения библиотек
# Эквивалентна -Djava.library.path=
# Для операционной системы Windows
libs.path=E:\\Projects\\java\\cnsugar\\seetaface6JNI-sample\\lib\\win-x64
# Директория моделей SeetaFace6
bindata.dir=E:/ai-face/SeetaFace6JNI/models/sf3.0_models
```# Конфигурация SQLite
sqlite.db.file=./faces-data.db
sqlite.conn.maxTotal=50
sqlite.conn.maxIdle=5
sqlite.conn.minIdle=0
sqlite.conn.maxWaitMillis=60000
seetaface6JNI-1.0.0.jar
и зависимости из каталога build
в ваш проект. Пример pom.xml
:<properties>
<spring.version>4.2.8.RELEASE</spring.version>
<log4j.version>2.8.2</log4j.version>
<slf4j.version>1.7.25</slf4j.version>
</properties>
<dependencies>
<dependency>
<groupId>com.cnsugar.ai</groupId>
<artifactId>seetaface6JNI</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/seetaface6JNI-1.0.0.jar</systemPath>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- мост log4j к slf4j -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
``` <!-- sqlite -->
<зависимость>
<групповойИД>org.xerial</групповойИД>
<идентификаторArtifact>sqlite-jdbc</идентификаторArtifact>
<версия>3.25.2</версия>
</зависимость>
<зависимость>
<групповойИД>org.apache.commons</групповойИД>
<идентификаторArtifact>commons-pool2</идентификаторArtifact>
<версия>2.4.2</версия>
</зависимость>
<зависимость>
<групповойИД>commons-io</групповойИД>
<идентификаторArtifact>commons-io</идентификаторArtifact>
<версия>2.6</версия>
</зависимость>
</зависимости>
6\. Вызовите методы из класса FaceHelper.
### Как использовать
Все методы упакованы в утилитный класс FaceHelper
```java
/**
* Сравнение лиц
*
* @param img1 первое изображение
* @param img2 второе изображение
* @return степень схожести (-1: на первой картинке нет лица; -2: на второй картинке нет лица)
*/
float compare(File img1, File img2);
float compare(byte[] img1, byte[] img2);
float compare(BufferedImage image1, BufferedImage image2);
/**
* Регистрация лица (выполняется вырезка лица)
*
* @param key уникальный идентификатор фотографии лица
* @param image фотография лица
* @return результат регистрации
*/
boolean register(String key, BufferedImage image);
boolean register(String key, byte[] img);
/**
* Регистрация лица
*
* @param image фотография лица
* @return результат регистрации
*/
long register(BufferedImage image);
long registerCroppedFace(byte[] croppedFace);
/**
* Поиск лица
*
* @param img фотография лица
* @return результат поиска
*/
Result search(byte[] img);
Result search(BufferedImage image);
``````markdown
## Описание методов
### predictImage
Метод для проведения бесшумного теста живости лица.
| Параметр | Описание |
| --- | --- |
| `img` | Байтовый массив или объект BufferedImage с изображением |
#### Возможные возвратные значения:
- **REAL** = 0, ///< Реальное лицо
- **SPOOF** = 1, ///< Поддельное лицо (ложное)
- **FUZZY** = 2, ///< Невозможно определить (качество изображения плохое)
- **DETECTING** = 3 ///< В процессе проверки
``````java
FaceAntiSpoofingStatus predictImage(byte[] img);
FaceAntiSpoofingStatus predictImage(BufferedImage image);
Удаление зарегестрированных лиц по ключам.
Параметр | Описание |
---|---|
keys |
Ключи лиц для удаления |
long removeRegister(String... keys);
Очистка данных базы лиц.
void clear();
@org.junit.Test
public void testCompare() throws Exception {
String img1 = "F:\\ai\\demo-pic39.jpg";
String img2 = "F:\\ai\\left_pic_one.jpg";
System.out.println("Результат:" + FaceHelper.compare(new File(img1), new File(img2)));
}
Сначала вызывается метод FaceHelper.register()
для регистрации изображений лиц в базе данных Seetaface6 (постоянство через SQLite).
@org.junit.Test
public void testRegister() throws IOException {
// Регистрация всех jpg/png изображений в папке F:\ai\star в базе данных лиц, используя имя файла как ключ
Collection<File> files = FileUtils.listFiles(new File("F:\\ai\\star"), new String[]{"jpg", "png"}, false);
for (File file : files) {
String key = file.getName();
try {
FaceHelper.register(key, FileUtils.readFileToByteArray(file));
} catch (Exception e) {
e.printStackTrace();
}
}
}
@org.junit.Test
public void testSearch() throws IOException {
SeetafaceBuilder.build(); // Вызов инициализации при запуске системы
}
while (SeetafaceBuilder.getFaceDbStatus() == SeetafaceBuilder.FacedbStatus.LOADING || SeetafaceBuilder.getFaceDbStatus() == SeetafaceBuilder.FacedbStatus.READY) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
``` long l = System.currentTimeMillis();
Result result = FaceHelper.search(FileUtils.readFileToByteArray(new File("F:\\ai\\gtl.jpg")));
System.out.println("Результат поиска: " + result + ", затраченное время: " + (System.currentTimeMillis() - l));
}Пример кода: проверка живого лица
```java
@org.junit.Test
public void testPredictImage() throws IOException {
FaceAntiSpoofingStatus status = FaceHelper.predictImage(FileUtils.readFileToByteArray(new File("D:\\face\\gtl.png")));
System.out.println(status);
}
Если данный пример был вам полезен, пожалуйста, оставьте звездочку или сделайте пожертвование.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )