Kamran Mahmoudi

Freelancer

WordPress Web Designer

Flutter Mobile Developer

Laravel Web Developer

Kamran Mahmoudi

Freelancer

WordPress Web Designer

Flutter Mobile Developer

Laravel Web Developer

Blog Post

بخندی باختی 😊 تشخیص خنده با هوش مصنوعی

بخندی باختی 😊 تشخیص خنده با هوش مصنوعی

توی این پست میخوام یه کد جالب جاوا اسکریپت که به کمک لایبراری های تشخیص چهره با هوش مصنوعی خنده شما رو با پردازش تصویر وبم تشخیص میده معرفی کنم.

کد برنامه روشن و قابل تغییره و به این صورته که یه سری ویدیو از یوتیوب براتون پلی میکنه و وب کم رو هم داخل همون صفحه html نشون میده، لایبراری استفاده شده یه مدل آموزش دیده برای تشخیص خنده و حالت چهره داره که با گرفتن تصویر وبکم اونو پردازش میکنه…

در چند کلمه، من از کتابخانه face-api استفاده می کنم که کل قسمت پیچیده را برای من مدیریت می کند. وقتی برنامه را اجرا می کنم، با وب کم، مدل ها را بارگذاری می کنم. بعد از آن فقط باید از سطح بالای face-api API استفاده کنم. من دو بار در ثانیه بررسی می کنم که آیا کاربر لبخند می زند یا خیر..

مشاهده مقاله زبان اصلی

 

کد :


/**
* Load models from faceapi
* @async
*/
async function loadModels() {
await faceapi.nets.tinyFaceDetector.loadFromUri("https://www.smile-lose.com/models")
await faceapi.nets.faceExpressionNet.loadFromUri("https://www.smile-lose.com/models")
}

/**
* Setup the webcam stream for the user.
* On success, the stream of the webcam is set to the source of the HTML5 tag.
* On error, the error is logged and the process continue.
*/
function setupWebcam() {
navigator.mediaDevices
.getUserMedia({ video: true, audio: false })
.then(stream => {
webcam.srcObject = stream
if (isFirstRound) startFirstRound()
})
.catch(() => {
document.getElementById(“smileStatus”).textContent = “camera not found”
isUsingCamera = false
if (isFirstRound) startFirstRound()
})
}

/**
* Determine if the user is smiling or not by getting the most likely current expression
* using the facepi detection object. Build a array to iterate on each possibility and
* pick the most likely.
* @param {Object} expressions object of expressions
* @return {Boolean}
*/
function isSmiling(expressions) {
// filtering false positive
const maxValue = Math.max(
…Object.values(expressions).filter(value => value <= 1) ) const expressionsKeys = Object.keys(expressions) const mostLikely = expressionsKeys.filter( expression => expressions[expression] === maxValue
)

if (mostLikely[0] && mostLikely[0] == ‘happy’)
return true

return false
}

/**
* Set an refresh interval where the faceapi will scan the face of the subject
* and return an object of the most likely expressions.
* Use this detection data to pick an expression and spread background gifs on divs.
* @async
*/
async function refreshState() {
setInterval(async() => {
const detections = await faceapi
.detectAllFaces(webcam, new faceapi.TinyFaceDetectorOptions())
.withFaceExpressions()

if (detections && detections[0] && detections[0].expressions) {
isUsingCamera = true

if (isSmiling(detections[0].expressions)) {
currentSmileStatus = true
document.getElementById(“smileStatus”).textContent = “YOU SMILE !”
} else {
document.getElementById(“smileStatus”).textContent = “not smiling”
}
}
}, 400)
}

Taggs:
Write a comment