You are viewing an old version of this page. View the current version.
Compare with Current
View Page History
Version 1
Current »
Полный список примеров, который есть в комплекте SDK (/fapi/samples):
Вспомогательный файл
| Файл Common.h |
|---|
#pragma once
#include <stdbool.h> #include <stddef.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h>
#include <fapi.h>
#define STB_IMAGE_IMPLEMENTATION
#include <stb_image.h>
void print_buffer(const uint8_t* buffer, size_t size) {
printf("\n"); for (size_t i = 0; i < size; i++) printf("%02X ", buffer[i]);
printf("\n"); } |
Формирование шаблона отпечатка пальца по ГОСТ 19794-2-2013 из изображения отпечатка
| Файл Enroll.c |
|---|
#include <Common.h>
int main() { unsigned long returnCode; // Код возврата функций FAPI size_t bufferSize; // Размер массива с шаблоном отпечатка в байтах uint8_t* buffer; // Буфер для шаблона uint8_t* image = NULL; // Буфер для изображения отпечатка int width; // Ширина изображения отпечатка int height; // Длина изображения отпечатка int channels; // Количество каналов в изображении отпечатка
// Чтение изображения отпечатка из файла image = stbi_load("image1.bmp", &width, &height, &channels, 1);
if (!image) { printf("Failed to load image\n"); goto exit; }
// Инициализация библиотеки FAPI returnCode = PS_InitFAPI();
if (returnCode != FAPIT_SUCCESS) { printf("PS_InitFAPI failed\n"); goto free_image; }
// Вызов PS_Enroll без передачи указателя на буфер для определения размера буфера returnCode = PS_Enroll(image, width, height, NULL, &bufferSize);
if (returnCode != FAPIT_SUCCESS) { printf("PS_Enroll failed\n"); goto free_image; }
// Выделение памяти под шаблон buffer = malloc(bufferSize * sizeof(uint8_t));
// Вызов PS_Enroll для получения байт шаблона returnCode = PS_Enroll(image, width, height, buffer, &bufferSize);
if (returnCode != FAPIT_SUCCESS) { printf("PS_Enroll failed\n"); free(buffer); goto free_image; }
// Выводим содержимое буфера print_buffer(buffer, bufferSize); // Освобождаем память, выделенную через malloc free(buffer);
free_image: stbi_image_free(image);
exit: // Деинициализация библиотеки FAPI returnCode = PS_UninitFAPI();
if (returnCode != FAPIT_SUCCESS) { printf("PS_IninitFAPI failed\n"); } return returnCode; } |
Cоздание комплексного шаблона и добавление отпечатка в созданный шаблон
| Файл EnrollUpdate.c |
|---|
#include <Common.h>
int main() { unsigned long returnCode; // Код возврата функций FAPI size_t bufferSize; // Размер массива с шаблоном отпечатка в байтах uint8_t* buffer; // Буфер для шаблона FAPI_HANDLE fapiHandle; // Дескриптор комплексного шаблона FAPI uint8_t* images[4]; // Буферы для изображений отпечатков int widths[4]; // Ширины изображений отпечатков int heights[4]; // Длины изображений отпечатков int channels; // Количество каналов в изображении отпечатка
// Имена файлов с изображениями отпечатков const char* fileNames[4] = { "image1.bmp", "image2.bmp", "image3.bmp", "image4.bmp", };
// Чтение изображений отпечатков из файлов for (int i = 0; i < 4; ++i) { images[i] = stbi_load(fileNames[i], &widths[i], &heights[i], &channels, 1);
if (!images[i]) { for (int j = 0; j < i; ++j) stbi_image_free(images[j]); printf("Failed to read images\n"); goto exit; } }
// Инициализация библиотеки FAPI returnCode = PS_InitFAPI();
if (returnCode != FAPIT_SUCCESS) { printf("PS_InitFAPI failed\n"); goto free_images; }
// Вызов функции PS_EnrollInit, инициализация создания комплексного шаблона returnCode = PS_EnrollInit(&fapiHandle, fapi_finger_right_index, FAPI_RECOMMENDED_REGISTRATION_FINGERPRINTS_COUNT);
if (returnCode != FAPIT_SUCCESS) { printf("PS_EnrollInit failed\n"); goto free_images; }
for (size_t i = 0; i < 4; i++) { // Вызов функции PS_EnrollUpdate, добавление отпечатка в шаблон returnCode = PS_EnrollUpdate(fapiHandle, images[i], widths[i], heights[i]);
if (returnCode != FAPIT_SUCCESS) { printf("PS_EnrollUpdate failed\n"); goto free_images; } }
// Вызов функции PS_EnrollFinal, получение размера буфера для шаблона returnCode = PS_EnrollFinal(fapiHandle, NULL, &bufferSize);
if (returnCode != FAPIT_SUCCESS) { printf("PS_EnrollFinal failed\n"); goto free_images; }
// Выделение памяти под шаблон buffer = malloc(bufferSize * sizeof(uint8_t));
// Вызов PS_EnrollFinal для получения байт шаблона returnCode = PS_EnrollFinal(fapiHandle, buffer, &bufferSize);
if (returnCode != FAPIT_SUCCESS) { printf("PS_EnrollFinal failed\n"); free(buffer); goto free_images; }
// Выводим содержимое буфера print_buffer(buffer, bufferSize); // Освобождаем память, выделенную через malloc free(buffer);
free_images: for (int i = 0; i < 4; ++i) stbi_image_free(images[i]);
exit: // Деинициализация библиотеки FAPI returnCode = PS_UninitFAPI();
if (returnCode != FAPIT_SUCCESS) { printf("PS_IninitFAPI failed\n"); }
return returnCode; } |