
การทำ face detect นั้น เป็นการทำ image processing สามารถดึงรูปหน้าคนจากภาพถ่ายออกมา ซึ่งความแม่นยำนั้นขึ้นอยู่กับอัลกอริทึมของไลบารี่นั้น วันนี้จะมาสอนการทำโดยการใช้ plugin free ของ jquery กันครับ (มี sorce code download)
Face Detect ไลบารี่ นั้นมีหลายรูปแบบในสมัยนี้ ทั้งของ Microsoft , Google และ อื่นๆที่เป็น API สามารถเรียกใช้ได้ง่าย แต่ผมจะใช้ของ http://facedetection.jaysalvat.com/ เนื่องจากฟรีและไม่ต้องสมัครใส่ข้อมูลบัตรเครดิตอะไรแค่ Download มา include ได้เลย
เรามาดูตัวอย่าง ลองเลือกรูปดูครับ (ไลบารีตัวนี้ความแม่นยำไม่ค่อยสูงเท่าไหร่ครับอาจมีผิดพลาดบ้าง 555 )
1 ในส่วนของ code include ใน Project
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> // ดึง jquery <link rel="stylesheet" href="css/bootstrap.min.css" >// ดึง bootstrap css <link rel="stylesheet" href="css/bootstrap-theme.min.css" > ดึง bootstrap theme <script src="js/bootstrap.min.js"></script> <script src="js/jquery.facedetection.min.js"></script> // library สำหรับ facedetect
2 ในส่วนของ UI ที่เป็น html
<div class="container" style="padding:25px;">
<div class="row">
<h3>FACE DETECT</h3>
<div class="form-group">
<label for="sel1">เลือกรูป</label>
<input class="form-control" id="imagebroswer" type="file"> // input สำหรับเลือกรูป
</div>
</div>
<div id="ximage" style="">
<div class="row" >
<div id="preview">
<img id="dataface" src="face.jpg" > // รูปเริ่มต้น
</div>
<div class="showimage" style="padding:25px 0;"></div> // ส่วนแสดงรูปที่ face detect ได้
</div>
</div>
</div>
2 ในส่วนของ code js นั้นประกอบด้วย
$(document).ready(function(){
createimage($("#dataface").attr("src")); // เรียก face detect รูปแรก
function readURL(input) { // อ่านไฟล์จาก client โดยไม่ผ่าน server
if (input[0].value != "") {
var reader = new FileReader();
reader.onload = function (e) {
createimage(e.target.result);}
reader.readAsDataURL(input[0].files[0]);
}
}
function createimage(result){ // function สำรับ facedetect และ generate รูปหน้าลงบน .showimage
var img = '<img id="dataface" src="'+result+'">';
$("#preview").html(img).promise().done(function(){
$("#dataface").faceDetection({
complete: function (faces) {
var htmlface = '';
$.each(faces, function( i, value ) {
var marg = 20;
var left = (faces[i].x - marg),
top = (faces[i].y - marg),
width = (faces[i].width + (marg * 2)),
height = (faces[i].height + (marg * 2));
var setleft = left * faces[i].scaleX + 'px';
var settop = top * faces[i].scaleY + 'px';
var setwidth = width * faces[i].scaleX + 'px';
var setheight = height * faces[i].scaleY + 'px';
htmlface += '<div class="face" style="';
htmlface += 'background-image: url('+result+');';
htmlface += 'background-position: -'+left+'px -'+top+'px;';
htmlface += 'left:'+setleft+';';
htmlface += 'top:'+settop+';';
htmlface += 'width:'+setwidth+';';
htmlface += 'height:'+setheight+';';
htmlface += '"></div>';
});
$(".showimage").html(htmlface);
}
});
});
}
$( "#imagebroswer" ).change(function() {
readURL($(this));
});
});