Deteksi Wajah Menggunakan API Dari face.com


face.com menyediakan API untuk mendeteksi wajah yang ada di sebuah foto. Return dari API disediakan 2 jenis, json dan xml, nilai selain width dan height disediakan dalam persen dibandingkan dengan width dan height dari foto tersebut.


Di dalam contoh script di bawah ini menggunakan foto-foto dari detik.com, di halaman Alonso Berjaya di Singapura.

Untuk mendapatkan API key dan API secret, dibutuhkan registrasi di face.com.

<!--- url api dari face.com dengan return json --->
<cfset api_face_com = "http://api.face.com/faces/detect.json">

<!--- api key & api secret --->
<cfset api_key = "your api key">
<cfset api_secret = "your api secret">

<!--- url images --->
<cfset imageURLs = ArrayNew(1)>
<cfset ArrayAppend(imageURLs, "http://images.detik.com/content/2010/09/27/463/Sin4-640.jpg")>
<cfset ArrayAppend(imageURLs, "http://images.detik.com/content/2010/09/27/463/Sin5-640.jpg")>
<cfset ArrayAppend(imageURLs, "http://images.detik.com/content/2010/09/27/463/Sin14-640.jpg")>

<!--- url gabungan --->
<cfset apiURL = api_face_com & "?api_key=" & api_key & "&api_secret=" & api_secret & "&urls=" & ArrayToList(imageURLs)>

<!--- api http request --->
<cfhttp url="#apiURL#" method="GET"></cfhttp>

<!--- api return json --->
<cfset detectJSON = cfhttp.fileContent>

<!--- ubah ke dalam bentuk struct --->
<cfset detect = DeserializeJSON(detectJSON)>

<!--- loop masing-masing foto --->
<cfloop array="#detect.photos#" index="photo">
	<!--- read image --->
	<cfset photoImage = ImageRead(photo.url)>
	
	<!--- set warna garis --->
	<cfset ImageSetDrawingColor(photoImage, "yellow")>
	
	<!--- loop tag (bisa terjadi didapat lebih dari 1 wajah dalam 1 foto) --->
	<cfloop array="#photo.tags#" index="tag">
		<!--- titik tengah dari tag --->
		<cfset rect.centerX = Round((tag.center.x * photo.width) / 100)>
		<cfset rect.centerY = Round((tag.center.y * photo.height) / 100)>
		
		<!--- width & height dari tag --->
		<cfset rect.width = Round((tag.width * photo.width) / 100)>
		<cfset rect.height = Round((tag.height * photo.height) / 100)>
		
		<!--- titik kiri atas dari tag --->
		<cfset rect.x = rect.centerX - (0.5 * rect.width)>
		<cfset rect.y = rect.centerY - (0.5 * rect.height)>
		
		<!--- buat garis penanda tag di foto --->
		<cfset ImageDrawRect(photoImage, rect.x, rect.y, rect.width, rect.height)>
	</cfloop>
	
	<!--- output ke browser --->
	<cfimage action="writeToBrowser" source="#photoImage#">
	<br>
</cfloop>

Berikut ini perbandingan foto-foto asli (img src dari detik.com) dan yang telah diproses menggunakan script di atas

Pada gambar di atas, wajah Lewis Hamilton dan seorang crew bisa dideteksi, sedangkan wajah 2 orang kameramen tidak, mungkin karena sebagian wajahnya ketutupan kamera.

https://i0.wp.com/images.detik.com/content/2010/09/27/463/Sin5-640.jpg

Pada gambaar di atas, wajah Fernando Alonso dan Mark Webber bisa terdeteksi, sedangkan Sebastian Vettel dan crew dari Ferrari tidak karena tertutup tangan dari Mark Webber.

https://i0.wp.com/images.detik.com/content/2010/09/27/463/Sin14-640.jpg

Pada gambar di atas, hanya satu wajah yang bisa terdeteksi karena fokus kamera sepertinya memang ditujukan untuk dia, crew yang lain tidak terdeteksi karena gambar mereka sedikit blur.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: