This guide will walk you through the essential steps to get started with FacePing's face recognition API.
Groups help organize your face vectors. Here's how to create one:
const fetch = require('node-fetch');
async function createGroup(groupName) {
const response = await fetch(`https://api.faceping.ai/groups/${groupName}`, {
method: 'POST'
});
return await response.json();
}
// Usage
createGroup('my-group')
.then(result => console.log(result))
.catch(error => console.error(error));
import { useState } from 'react';
function FaceGroup() {
const [groupName, setGroupName] = useState('');
const createGroup = async () => {
try {
const response = await fetch(`https://api.faceping.ai/groups/${groupName}`, {
method: 'POST'
});
const data = await response.json();
console.log('Group created:', data);
} catch (error) {
console.error('Error creating group:', error);
}
};
return (
<div>
<input
value={groupName}
onChange={(e) => setGroupName(e.target.value)}
placeholder="Enter group name"
/>
<button onClick={createGroup}>Create Group</button>
</div>
);
}
import { Component } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-face-group',
template: `
<input [(ngModel)]="groupName" placeholder="Enter group name">
<button (click)="createGroup()">Create Group</button>
`
})
export class FaceGroupComponent {
groupName = '';
constructor(private http: HttpClient) {}
createGroup() {
this.http.post(`https://api.faceping.ai/groups/${this.groupName}`, {})
.subscribe(
result => console.log('Group created:', result),
error => console.error('Error:', error)
);
}
}
using System.Net.Http;
using System.Threading.Tasks;
public class FacePingClient
{
private readonly HttpClient _client = new HttpClient();
public async Task<string> CreateGroupAsync(string groupName)
{
var response = await _client.PostAsync(
$"https://api.faceping.ai/groups/{groupName}",
new StringContent("")
);
return await response.Content.ReadAsStringAsync();
}
}
// Usage
var client = new FacePingClient();
var result = await client.CreateGroupAsync("my-group");
Console.WriteLine(result);
After creating a group, you can store face images as vectors:
const fs = require('fs');
const FormData = require('form-data');
async function storeFace(groupName, imagePath) {
const formData = new FormData();
formData.append('image', fs.createReadStream(imagePath));
const response = await fetch(`https://api.faceping.ai/groups/${groupName}/faces`, {
method: 'POST',
body: formData
});
return await response.json();
}
// Usage
storeFace('my-group', './face.jpg')
.then(result => console.log(result))
.catch(error => console.error(error));
function FaceUpload() {
const [selectedFile, setSelectedFile] = useState(null);
const [groupName, setGroupName] = useState('');
const uploadFace = async () => {
const formData = new FormData();
formData.append('image', selectedFile);
try {
const response = await fetch(`https://api.faceping.ai/groups/${groupName}/faces`, {
method: 'POST',
body: formData
});
const data = await response.json();
console.log('Face stored:', data);
} catch (error) {
console.error('Error storing face:', error);
}
};
return (
<div>
<input
type="file"
onChange={(e) => setSelectedFile(e.target.files[0])}
/>
<button onClick={uploadFace}>Upload Face</button>
</div>
);
}
@Component({
selector: 'app-face-upload',
template: `
<input type="file" (change)="onFileSelect($event)">
<button (click)="uploadFace()">Upload Face</button>
`
})
export class FaceUploadComponent {
selectedFile: File | null = null;
groupName = 'my-group';
constructor(private http: HttpClient) {}
onFileSelect(event: any) {
this.selectedFile = event.target.files[0];
}
uploadFace() {
if (!this.selectedFile) return;
const formData = new FormData();
formData.append('image', this.selectedFile);
this.http.post(`https://api.faceping.ai/groups/${this.groupName}/faces`, formData)
.subscribe(
result => console.log('Face stored:', result),
error => console.error('Error:', error)
);
}
}
public class FacePingClient
{
public async Task<string> StoreFaceAsync(string groupName, string imagePath)
{
using var form = new MultipartFormDataContent();
using var fileStream = File.OpenRead(imagePath);
using var fileContent = new StreamContent(fileStream);
form.Add(fileContent, "image", Path.GetFileName(imagePath));
var response = await _client.PostAsync(
$"https://api.faceping.ai/groups/{groupName}/faces",
form
);
return await response.Content.ReadAsStringAsync();
}
}
// Usage
var result = await client.StoreFaceAsync("my-group", "path/to/face.jpg");
Once you have stored faces, you can search for similar ones:
async function searchFaces(groupName, imagePath) {
const formData = new FormData();
formData.append('image', fs.createReadStream(imagePath));
const response = await fetch(`https://api.faceping.ai/groups/${groupName}/search`, {
method: 'POST',
body: formData
});
return await response.json();
}
// Usage
searchFaces('my-group', './search-face.jpg')
.then(results => console.log(results))
.catch(error => console.error(error));
function FaceSearch() {
const [searchFile, setSearchFile] = useState(null);
const [searchResults, setSearchResults] = useState([]);
const groupName = 'my-group';
const searchFaces = async () => {
const formData = new FormData();
formData.append('image', searchFile);
try {
const response = await fetch(`https://api.faceping.ai/groups/${groupName}/search`, {
method: 'POST',
body: formData
});
const data = await response.json();
setSearchResults(data.matches || []);
} catch (error) {
console.error('Error searching faces:', error);
}
};
return (
<div>
<input
type="file"
onChange={(e) => setSearchFile(e.target.files[0])}
/>
<button onClick={searchFaces}>Search Faces</button>
<div>
{searchResults.map((match, index) => (
<div key={index}>
Match Score: {match.score}
</div>
))}
</div>
</div>
);
}
@Component({
selector: 'app-face-search',
template: `
<input type="file" (change)="onFileSelect($event)">
<button (click)="searchFaces()">Search Faces</button>
<div *ngFor="let match of searchResults">
Match Score: {{match.score}}
</div>
`
})
export class FaceSearchComponent {
selectedFile: File | null = null;
searchResults: any[] = [];
groupName = 'my-group';
constructor(private http: HttpClient) {}
onFileSelect(event: any) {
this.selectedFile = event.target.files[0];
}
searchFaces() {
if (!this.selectedFile) return;
const formData = new FormData();
formData.append('image', this.selectedFile);
this.http.post(`https://api.faceping.ai/groups/${this.groupName}/search`, formData)
.subscribe(
(result: any) => this.searchResults = result.matches || [],
error => console.error('Error:', error)
);
}
}
public class FacePingClient
{
public async Task<string> SearchFacesAsync(string groupName, string imagePath)
{
using var form = new MultipartFormDataContent();
using var fileStream = File.OpenRead(imagePath);
using var fileContent = new StreamContent(fileStream);
form.Add(fileContent, "image", Path.GetFileName(imagePath));
var response = await _client.PostAsync(
$"https://api.faceping.ai/groups/${groupName}/search",
form
);
return await response.Content.ReadAsStringAsync();
}
}
// Usage
var results = await client.SearchFacesAsync("my-group", "path/to/search-face.jpg");