1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/cnsugar-seetaface6JNI

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

seetaface6JNI

Общение в QQ группе: 891670629 (полностью заполнена), 694350800

Примечание: версия JDK должна быть выше 1.8.0_261

Описание проекта

Библиотека Java для распознавания лиц, основанная на библиотеке SeetaFace6 от Китайской академии наук. Поддерживает детекцию лица, извлечение лица, сравнение 1:1, сравнение 1:N и независимую проверку живости на фотографии.

SeetaFace6: https://github.com/seetafaceengine/SeetaFace6

Настройка окружения

  1. Скачайте модель (Ссылка: https://pan.baidu.com/s/1FYz4muY3X4tOKIKhb5kBVA, Код доступа: b6o4) и распакуйте её локально;

  2. Скачайте соответствующие библиотеки из каталога build/lib на ваш компьютер: Windows (64-битная система);

  3. Скачайте faces-data.db из каталога build и установите его локально; (Замечание: если вам не требуется использовать поиск 1:N по лицам, этот файл не нужен. В этом случае удалите конфигурацию sqlite.db.file из файла seetaface.properties);

  4. Разместите файл 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
  1. Установите 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();

Примеры кода

Пример кода: 1:1 сравнение лиц

@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)));
}

Пример кода: 1:N поиск лица

Сначала вызывается метод 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Библиотека алгоритмов распознавания лиц на Java, основанная на обёртке над seetaface6 от Академии наук Китая, поддерживает обнаружение лиц, извлечение лиц и сопоставление 1:1 и 1:N, а также обнаружение живого человека по неподвижному изображению. Развернуть Свернуть
BSD-3-Clause
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/cnsugar-seetaface6JNI.git
git@api.gitlife.ru:oschina-mirror/cnsugar-seetaface6JNI.git
oschina-mirror
cnsugar-seetaface6JNI
cnsugar-seetaface6JNI
master