{"id":36418,"date":"2024-12-06T10:30:27","date_gmt":"2024-12-06T03:30:27","guid":{"rendered":"https:\/\/www.hashmicro.com\/id\/blog\/?p=36418"},"modified":"2026-02-19T13:43:12","modified_gmt":"2026-02-19T06:43:12","slug":"cara-kerja-face-recognition-pada-sistem-absensi-perusahaan","status":"publish","type":"post","link":"https:\/\/www.hashmicro.com\/id\/blog\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\/","title":{"rendered":"Pengertian dari Face Recognition dan Bagaimana Cara Kerjanya"},"content":{"rendered":"<p>Banyak perusahaan ingin absensi yang rapi, tetapi realitanya pencatatan kehadiran sering pecah ke banyak cara. Dari Google Form, chat, spreadsheet, atau rekap manual. Akibatnya, HR menghabiskan waktu untuk mengejar data, bukan mengolahnya.<\/p>\n<p>Teknologi biometrik seperti fingerprint bisa membantu, tetapi penerapannya kurang fleksibel untuk tim lapangan, remote, atau lokasi kerja yang berpindah-pindah. Pada beberapa kondisi, karyawan tetap butuh cara absensi yang cepat tanpa antre.<\/p>\n<p>Absensi face recognition hadir sebagai opsi yang lebih modern untuk verifikasi identitas. Sistem ini memadukan kamera dan data wajah yang tersimpan agar pencatatan kehadiran lebih terkontrol.<\/p>\n<table style=\"border-collapse: collapse; background-color: #fffacd; border-radius: 25px 25px 25px 25px;\" width=\"100%\">\n<tbody>\n<tr>\n<td style=\"padding: 15px; border: none;\">\n<h3 style=\"margin-bottom: 10px;\"><span style=\"background-color: #990000; color: #ffffff; padding: 5px;\"><b>Key Takeaways<\/b><\/span><\/h3>\n<ul>\n<li><span style=\"font-weight: 400;\"><a href=\"#absensi-face-recognition\">Absensi face recognition<\/a> adalah teknologi yang menggunakan biometrik wajah untuk mengidentifikasi karyawan dalam perusahaan.<\/span><\/li>\n<li><a href=\"#cara-kerja\">Cara kerja face recognition<\/a> melibatkan 4 tahap yaitu: pengambilan gambar, deteksi wajah, verifikasi identitas, dan face match.<\/li>\n<li><span style=\"font-weight: 400;\"><a href=\"#kelebihan\">Kelebihan sistem absensi face recognition<\/a> termasuk meningkatkan keamanan data dan mendukung fleksibilitas kerja.<\/span><\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\"><div id=\"toc_group_article\" style=''>\r\n\t<p style='font-size:25px;font-weight:bold; margin-bottom:0px'>\r\n\t\tDaftar Isi:\r\n\t<\/p>\r\n\t<ul id=\"list_toc\" class='list_toc'><\/ul>\r\n<\/div>\r\n\r\n<div id=\"placeholder-toc\"><\/div>\r\n<div id=\"toc\">\r\n    <div class=\"header\">\r\n\t<span class=\"toc-title\" id=\"toc-title\">Daftar Isi<\/span>\t\r\n\t <i class=\"toc-icon\">\r\n        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"30\" height=\"30\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#000\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"header-icon\">\r\n          <path d=\"m6 9 6 6 6-6\" \/>\r\n        <\/svg>\r\n      <\/i>\r\n\t<\/div>\r\n    <div class=\"list\">\r\n      <ul id=\"toc-list\"><\/ul>\r\n    <\/div>\r\n <\/div>\r\n\r\n<style>\r\n\/* Simple styling for the TOC *\/\r\n\t\r\n\t#toc ul li:last-child {\r\n    padding-bottom: 16px; \/* Adjust the value as needed *\/\r\n}\r\n\r\n.td-fix-index {\r\n\t transform: unset !important;\r\n     -webkit-transform: unset !important; \r\n}\r\n.footer-contact .td-fix-index {\r\n\t transform: translateZ(0) !important;\r\n     -webkit-transform: translateZ(0) !important; \r\n}\r\n\t.tdb_single_content .tdb-block-inner.td-fix-index{\r\n\t\tposition: static;\r\n\t}\r\n\t\r\n\r\n\r\n\t\r\n#toc {\r\n  background-color: #FFF;\r\n\tpadding: 17px 24px 0px 24px !important;\r\n  margin-bottom: 20px;\r\n\/*   border: 1px solid #9C171E; *\/\r\n  border-radius: 6px;\r\n\tdisplay: none;\r\n  max-width: 100%;\r\n  transition: .4s ease height;\r\n\tmargin-left: 0;\r\n\toverflow: hidden;\r\n}\r\n\r\n#toc .header{\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n\tbackground-color: transparent;\r\n}\r\n\t\r\n\t#toc.sticky .header{\r\n\t\tpadding: 4px 0;\r\n\t}\r\n\t\r\n.header p{\r\n  font-size: 18px !important;\r\n  font-weight: 600 !important;\r\n  color: #393939;\r\n   margin-bottom: 0;\r\n  \/* margin-top: 20px; *\/\r\n}\r\n\r\n.toc-icon{\r\n  float: right;\r\n\/*   visibility: hidden; *\/\r\n}\r\n\r\n\t.toc-title{\r\n\t\tmargin-right: auto;\r\n\/* \t\tpadding-left: 20px; *\/\r\n\t\tfont-weight: 600;\r\n\t\talign-self: center;\t}\t\r\n\r\n#toc ul {\r\n  list-style-type: none;\r\n  padding-left: 0;\r\n}\r\n\t\r\n#toc.sticky ul{\r\n\toverflow-y: auto;\r\n\tmax-height: 250px;\r\n\tmargin-top: 0px;\r\n\tpadding-top: 20px;\r\n\/* \tborder-top: 1px solid #d3d3d3; *\/\r\n}\r\n\t\r\n#toc ul li {\r\n\/*   margin-bottom: 10px; *\/\r\n  margin-bottom: 10px;\r\n\tmargin-left: 0;\r\n\ttransition: .2s ease;\r\n\tcursor: pointer;\r\n}\r\n\t\r\n\t#toc.sticky ul li {\r\n\t  margin-right: 10px;\r\n\t}\r\n\t\r\n.td-post-content #toc-list li a:hover, .td-post-content #toc-list a.active{\r\n\tbackground-color: #FFF;\r\n\/* \tpadding: 8px 16px 8px 16px; *\/\r\n\tpadding: 4px 16px 4px 16px;\r\n\tborder-radius: 6px;\r\n\tcolor: #9c171e !important;\r\n\tfont-weight: 600 !important;\r\n}\r\n\t\r\n\t.td-post-content #toc-list li:hover a, .td-post-content #toc-list a.active{\r\n\t\tcolor: #9C171E !important;\r\n\t\tfont-weight: 600 !important;\r\n\t}\r\n\t\r\n.td-post-content #toc-list a.active{\r\n\tfont-weight: bold !important;\r\n\tcolor: #9C171E !important;\r\n}\r\n\t\r\n#toc a, .td-post-content #toc-list a {\r\n  text-decoration: none;\r\n  color: #ea1717 !important;\r\n  transition: .2s ease;\r\n\tfont-weight: 400 !important;\r\n\tdisplay: block;\r\n\t\r\n\tpadding: 4px 16px 4px 0;\r\n}\r\n\r\n#toc.sticky {\r\n  position: fixed;\r\n\/*   top: 73px; *\/\r\n\tbottom: 0;\r\n  z-index: 100; \r\n  box-shadow: 0 2px 5px rgba(0,0,0,0.1); \r\n\twidth: 100%; \r\n\tbackground-color: #FFF;\r\n\/* \tbackground-color: #FFF1F1; *\/\r\n\tborder-bottom: 1px solid #ea1717;\r\n\/*   border: 1px solid #393939; *\/\r\n  box-shadow: 0px 0px 14px 0px #00000040;\r\n  cursor: pointer;\r\n\tanimation: fadein .3s ease;\r\n\tpadding: 12px 16px !important;\r\n}\r\n\t\r\n\t.fadein{\r\n\t\tanimation: fadein .3s ease;\r\n\t}\r\n\t\r\n\t.fadeout{\r\n\t\tanimation: fadeout .3s ease;\r\n\t}\r\n\t\r\n\t\r\n\t@keyframes fadein{\r\n\t\t0% {\r\n\t\t\topacity: 0;\r\n\t\t}\r\n\t\t100%{\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t}\r\n\t\r\n\t@keyframes fadeout{\r\n\t\t0% {\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t\t100%{\r\n\t\t\topacity: 0;\r\n\t\t}\r\n\t}\r\n\r\n\t\r\n#toc.sticky .header p{\r\n\tmargin-bottom: 10px;\r\n\tmargin-top: 10px;\r\n}\r\n\r\n#toc.sticky .toc-icon{\r\n  visibility: visible;\r\n\/* \ttransition: 0.4s ease; *\/\r\n}\r\n\t\r\n\t.toc-icon{\r\n\t\talign-items: center;\r\n    \tdisplay: flex;\r\n\t}\r\n\t\r\n\tsvg.header-icon{\r\n\/* \t\tbackground-color: #9c171e; *\/\r\n\t\tbackground-color: #FFF;\r\n\t\tborder-radius: 30px;\r\n\t\tpadding: 5px;\r\n\t}\r\n\r\n#toc.sticky .list{\r\n\/*   max-height: 0; *\/\r\n  transition: height 0.4s ease;\r\n}\r\n\t\r\n\t#toc .list{\r\n\/*   max-height: 0; *\/\r\n  transition: height 0.4s ease;\r\n}\r\n\r\n#toc .header.active .toc-icon{\r\n\ttransform: rotate(0deg); \r\n\topacity: 1;\r\n}\r\n\r\n\t#toc .header.active + .list {\r\n\t  max-height: 200px; \/* Adjust this value as needed *\/\r\n\t  opacity: 1;\r\n\t}\r\n\t\r\n\t#placeholder-toc{\r\n\/* \t\tdisplay: none; *\/\r\n\t}\r\n\t\r\n\t@media (min-width: 768px) and (max-width: 991px){\r\n\t\t#toc.sticky{\r\n\/* \t\t\ttop: 104px; *\/\r\n\t\t\tbottom: 0px;\r\n\t\t}\r\n\t\t\r\n\t\t#toc{\r\n\t\t\twidth: unset !important;\r\n\t\t}\r\n\t}\r\n\t\r\n\t@media (max-width: 767px){\r\n\t\t#toc{\r\n\t\t\twidth: 100% !important;\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\t\t\r\n\t\t#toc.sticky{\r\n\t\t\twidth: 90% !important;\r\n\/* \t\t\ttop: 81px; *\/\r\n\t\t\tbottom: 60px;\r\n\t\t\tmargin-left: auto;\r\n\t\t\tmargin-right: auto;\r\n\t\t\tpadding: 0 16px;\r\n\t\t\tright: 5%;\r\n\t\t}\r\n\t}\r\n\t\r\n\t<\/style>\r\n\r\n<style>\r\n\t#list_toc li {margin-bottom: 0;margin-top: 5px;}\r\n\t#list_toc > li > ul {padding-left: 20px;margin-bottom: 0;}\r\n\t#list_toc{height:max-content;transition:ease-in-out}\r\n\t#list_toc li {margin-bottom: 0;margin-top: 5px;}\r\n\t#list_toc_float li.active > a {color:#b1252d;background: #ffe1e3;}\r\n\t#list_toc_float li a {padding:3px 7px}\r\n\t#list_toc_float li a {\r\n\t\tdisplay: block;\r\n\t\tcolor:#000;\r\n\t\tmargin-bottom: 10px;\r\n\t\ttransition:all 0.2s ease-in-out;\r\n\t\tfont-size:15px\r\n\t}\r\n\t#list_toc_float li{list-style:none;list-style-position:inside; margin-left:0;}\r\n\t#list_toc_float a:hover{color:#b1252d;}\r\n\t\r\n\t#list_toc_float li a{margin-bottom:0px}\r\n\t#toc_group_float{\r\n\t\tline-height: 24px;\r\n\t\tmax-height: calc(100vh - 100px);\r\n\t\toverflow: auto;\r\n\t\tz-index: 99;\r\n\t\tdisplay:none!important;\r\n\t\tbackground:#fff;\r\n\t\ttransition:all 0.5s linear\r\n\t}\r\n\t\r\n\t@media (min-width:1019px){\r\n\t\t#toc_group_float {\r\n\t\t\tdisplay:block!important;\r\n\t\t\t}\r\n\t\t#toc_group_article {\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\t}\r\n\t\r\n\t@media (max-width:768px){\r\n\t\t#toc_group_article {\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\t}\r\n\t\r\n\t \/* custom scrollbar style *\/\r\n::-webkit-scrollbar {\r\n    width: 7px;\r\n}\r\n::-webkit-scrollbar-track {\r\n    background: #d7a2a4;\r\n}\r\n::-webkit-scrollbar-thumb {\r\n    background: #b1252d;\r\n    border-radius: 15px;\r\n}\t\t\r\n\r\n<\/style>\r\n\r\n<script>\r\n\tdocument.addEventListener('DOMContentLoaded', function() {\r\n\t\t\/\/ Fungsi untuk menangani klik pada semua elemen <a> dengan href yang dimulai dengan #\r\n\t\tfunction handleTitleClick(event) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tconst targetId = this.getAttribute('href').substring(1);\r\n\t\t\tconst targetElement = document.getElementById(targetId);\r\n\r\n\t\t\tif (targetElement) {\r\n\t\t\t\tconst headerHeight = document.querySelector('#toc .header').offsetHeight;\r\n\t\t\t\tconst navbarHeight = document.getElementById('tdi_34') ? document.getElementById('tdi_34').offsetHeight : 0;\r\n\t\t\t\tconst windowHeight = window.innerHeight;\r\n\t\t\t\tconst targetOffset = targetElement.offsetTop;\r\n\t\t\t\tconst scrollTo = targetOffset + (windowHeight \/ 2) + (headerHeight) - navbarHeight - 40;\r\n\r\n\t\t\t\twindow.scrollTo({\r\n\t\t\t\t\ttop: scrollTo,\r\n\t\t\t\t\tbehavior: 'smooth'\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\/\/ Tambahkan event listener untuk semua elemen <a> di toc-list dan list-toc\r\n\t\tconst titleLinks = document.querySelectorAll('#toc-list a, #list_toc a');\r\n\t\ttitleLinks.forEach(link => {\r\n\t\t\tlink.addEventListener('click', handleTitleClick);\r\n\t\t});\r\n\t});\r\n<\/script>\r\n\r\n<!-- ToC List for mobile -->\r\n<script>\r\n \/\/ Generate TOC based on headings\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n  \/\/ Get the element that will contain the TOC\r\n  const tocList = document.getElementById('toc-list');\r\n\r\n  \/\/ Get the element with the ID 'article-left'\r\n  const article = document.querySelector('.td-post-content');\r\n\r\n  \/\/ Find all h2 elements within 'myarticle'\r\n  const headers = article.getElementsByTagName('h2');\r\n\r\n  \/\/ Loop through the h2 elements and create a list item for each one\r\n  for (let i = 0; i < headers.length; i++) {\r\n    const header = headers[i];\r\n    const headerText = header.textContent;\r\n\/\/     const headerId = 'header-' + i;\r\n    const headerId = headerText\r\n    .toLowerCase()\r\n    .trim()\r\n    .replace(\/[^\\w\\s-]\/g, '')  \/\/ hapus tanda baca\r\n    .replace(\/\\s+\/g, '-'); \/\/ ganti spasi jadi \"-\"\r\n\r\n    \/\/ Set an ID for the header if it doesn't have one\r\n    header.setAttribute('id', headerId);\r\n\r\n    \/\/ Create a list item for the TOC\r\n    const listItem = document.createElement('li');\r\n\r\n    \/\/ Create a link for the list item\r\n    const link = document.createElement('a');\r\n    link.setAttribute('href', '#' + headerId);\r\n    link.textContent = headerText;\r\n\r\n    \/\/ Append the link to the list item\r\n    listItem.appendChild(link);\r\n\r\n    \/\/ Append the list item to the TOC list\r\n    tocList.appendChild(listItem);\r\n  }\r\n});\r\n\r\n\/\/ Keep height and placement of content using placeholder in place of TOC\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n  const toc = document.querySelector('#toc');\r\n  const placeholderToc = document.querySelector('#placeholder-toc');\r\n\r\n  function setPlaceholderHeight() {\r\n    placeholderToc.style.height = `${toc.offsetHeight}px`;\r\n  }\r\n\r\n  \/\/ Set the initial height of the placeholder\r\n  setPlaceholderHeight();\r\n\r\n  \/\/ Update the height on window resize\r\n  window.addEventListener('resize', setPlaceholderHeight);\r\n});\r\n  const tocTitle = document.querySelector('#toc-title'); \/\/ Assuming header-faq is the element for TOC title\r\n\r\n\/\/ Sticky TOC and update heading\r\n\/\/ document.addEventListener(\"DOMContentLoaded\", function() {\r\n\/\/   const toc = document.querySelector('#toc');\r\n\/\/   const footer = document.querySelector('.td-footer-template-wrap');\r\n\/\/   const tocParent = toc.parentElement;\r\n\/\/   const divTop = tocParent.getBoundingClientRect().top + window.pageYOffset;\r\n\/\/   const tocHeight = toc.offsetHeight;\r\n\/\/   const triggerPoint = divTop + tocHeight + 700;\r\n\/\/   const footerHeight = footer.offsetHeight;\r\n\/\/   const triggerFooterPoint = footer.getBoundingClientRect().top + window.pageYOffset - footerHeight - footerHeight - footerHeight;\r\n\/\/   const phtoc = document.querySelector('#placeholder-toc');\r\n\/\/   const headers = document.querySelectorAll('.td-post-content h2');\r\n\/\/   const navLinks = document.querySelectorAll('#toc-list a');\r\n\t\r\n\/\/ \tconst panel2 = document.querySelector(\"#toc .list\");\r\n\/\/ \tvar icon = document.querySelector(\".toc-icon\");\r\n\r\n\/\/   let activeLink = null; \/\/ Declare activeLink outside the loop\r\n\t\r\n\/\/   \/\/ Function to handle scroll and add\/remove .sticky class\r\n\/\/   function handleScroll() {\r\n\/\/     const windowTop = window.pageYOffset || document.documentElement.scrollTop;\r\n\/\/     let currentHeader = '';\r\n\r\n\/\/     \/\/ Highlight user progress as the heading comes\r\n\/\/     headers.forEach(header => {\r\n\/\/ \t\tconst headerTop = header.offsetTop;\r\n\/\/ \t\tconst headerHeight = header.clientHeight;\r\n\/\/ \/\/ \t\tif (window.scrollY >= (headerTop - headerHeight + 700)) {\r\n\/\/ \/\/ \t\t\tconst currentHeaderId = header.getAttribute('id');\r\n\/\/ \/\/ \t\t\tconst currentHeaderText = document.getElementById(currentHeaderId).textContent;\r\n\/\/ \/\/ \t\t\tconsole.log(\"current header text:\", currentHeaderText);\r\n\/\/ \/\/ \t\t\ttocTitle.textContent = currentHeaderText;\r\n\/\/ \/\/ \t\t\tcurrentHeader = currentHeaderId;\r\n\t\t\t\r\n\/\/ \/\/ \t\t\tif(window.innerWidth < 767){\r\n\/\/ \/\/ \t\t\t\ttocTitle.textContent = 'Daftar Isi';\r\n\/\/ \/\/ \t\t\t}\r\n\/\/ \/\/ \t\t}\r\n\/\/ \t\tif(window.innerWidth < 767){\r\n\/\/ \t\t\ttocTitle.textContent = 'Daftar Isi'; \/\/ Selalu pertahankan judul ini di mobile\r\n\/\/ \t\t} else {\r\n\/\/ \t\t\tif (window.scrollY >= (headerTop - headerHeight + 700)) {\r\n\/\/ \t\t\t\tconst currentHeaderId = header.getAttribute('id');\r\n\/\/ \t\t\t\tconst currentHeaderText = document.getElementById(currentHeaderId).textContent;\r\n\/\/ \t\t\t\ttocTitle.textContent = currentHeaderText;\r\n\/\/ \t\t\t\tcurrentHeader = currentHeaderId;\r\n\/\/ \t\t\t}\r\n\/\/ \t\t}\r\n\/\/ \t});\r\n\r\n\/\/     navLinks.forEach(link => {\r\n\/\/       link.classList.remove('active');\r\n\/\/       if(currentHeader != '') {\r\n\/\/ \t\t  if (link.getAttribute('href').includes(currentHeader)) {\r\n\/\/ \t\t\t  link.classList.add('active');\r\n\/\/ \t\t  }\r\n\/\/ \t  }\r\n\/\/     });\r\n\/\/ \/\/     if (windowTop < triggerFooterPoint) {\r\n\/\/ \/\/         toc.style.display = 'block';\r\n\/\/ \/\/ \t}else{\r\n\/\/ \/\/         toc.style.display = 'none';\r\n\/\/ \/\/ \t}\r\n\/\/     \/\/ Update TOC title if sticky\r\n\/\/     if (windowTop > triggerPoint) {\r\n\/\/       if (!toc.classList.contains('sticky')) {\r\n\/\/         phtoc.style.display = \"block\";\r\n\/\/         toc.classList.add('sticky');\r\n\/\/         toc.style.width = `${tocParent.offsetWidth}px`; \/\/ Set width to match the parent element\r\n\/\/         toc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\/\/         toc.style.backgroundColor = \"#FFF\";\r\n\/\/ \t\tpanel2.style.height = '0px';\r\n\/\/ \t\t  icon.style.transform = \"rotate(180deg)\";\r\n\/\/ \t\t  if(window.innerWidth < 767){\r\n\/\/ \/\/ \t\t\t  const tocs = document.querySelector('#toc.sticky');\r\n\/\/ \t\t\t  tocTitle.textContent = 'Daftar Isi'; \/\/ Reset title\r\n\/\/        \t\t  toc.style.width = '150px'; \/\/ Set width to match the parent element\r\n\/\/ \t\t  }\r\n\/\/       }\r\n\/\/       if (currentHeader) {\r\n\/\/ \/\/         console.log(\"activeLink:\", activeLink);\r\n\/\/         if (activeLink) {\r\n\/\/ \/\/           tocTitle.textContent = activeLink.textContent; \/\/ Update TOC title\r\n\/\/           tocTitle.textContent = activeLink ? activeLink.textContent : \"\"; \/\/ Update title only if activeLink exists\r\n\/\/         }\r\n\/\/       }\r\n\/\/     } else {\r\n\/\/       toc.classList.remove('sticky');\r\n\/\/       phtoc.style.display = \"none\";\r\n\/\/       toc.style.width = 'unset'; \/\/ Reset to original width\r\n\/\/       toc.style.backgroundColor = \"#FFF\";\r\n\/\/       tocTitle.textContent = 'Daftar isi'; \/\/ Reset title\r\n\/\/ \t\tpanel2.style.height = panel2.scrollHeight + \"px\";\r\n\/\/ \t\ticon.style.transform = \"rotate(180deg)\";\r\n\/\/     }\r\n\/\/   }\r\n\r\n\/\/     \/\/ Attach the scroll event listener to the window\r\n\/\/     window.addEventListener('scroll', handleScroll);\r\n\r\n\/\/     \/\/ Initial call to handleScroll to set the correct state on load\r\n\/\/     handleScroll();\r\n\/\/ });\r\n\t\r\n\/\/ \t\/\/ Open toggle TOC\r\n\/\/ \t  document.addEventListener(\"DOMContentLoaded\", function() {\r\n\/\/ \t\tvar tocHeader = document.querySelector(\"#toc .header\");\r\n\/\/ \t\tvar toc = document.querySelector(\"#toc\");\r\n\/\/ \t\tvar icon = document.querySelector(\".toc-icon\");\r\n\/\/ \t\tconst tocTitle = document.querySelector('#toc-title');\r\n\/\/ \t\tconst tocs = document.querySelector('#toc.sticky');\r\n\/\/  \t\tconst tocParent = toc.parentElement;\t\t  \r\n\r\n\/\/ \t\t  tocHeader.addEventListener(\"click\", function() {\r\n\/\/ \t\t\tvar panel = this.nextElementSibling;\r\n\/\/ \t\t\tif (panel.style.height !== '0px') { \/\/ Check if height is not 0px\r\n\/\/ \t\t\t  panel.style.height = '0px'; \/\/ Set height to 0 for full collapse\r\n\/\/ \t\t\t  icon.style.transform = \"rotate(180deg)\";\r\n\/\/ \/\/ \t\t\t\ttoc.style.paddingBottom = '6px'; \r\n\/\/ \t\t\t\tif(window.innerWidth > 768){\r\n\/\/ \t\t\t\t\tif(!toc.classList.contains('sticky')){\r\n\/\/ \t\t\t\t\t\ttoc.style.width = \"unset\";\r\n\/\/ \/\/ \t\t\t\t\t\ttoc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\/\/ \t\t\t\t\t}\r\n\/\/ \t\t\t\t\tif (toc.classList.contains('sticky')){\r\n\/\/ \t\t\t\t\t\ttoc.style.width = '${tocParent.offsetWidth}px';\r\n\/\/ \t\t\t\t\t\ttoc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\/\/ \t\t\t\t\t}\r\n\/\/ \t\t\t\t}\r\n\/\/ \t\t\t\tif(window.innerWidth < 767){\r\n\/\/ \t\t\t\t\ttoc.style.width = \"unset\"; \/\/ Reset width\r\n\/\/ \t\t\t\t}\r\n\/\/ \t\t\t\ttoc.style.backgroundColor = \"#FFF1F1\";\r\n\/\/ \t\t\t} else {\r\n\/\/ \t\t\t  panel.style.height = panel.scrollHeight + \"px\";\r\n\/\/ \t\t\t  icon.style.transform = \"rotate(0deg)\";\r\n\/\/ \t\t\t  toc.style.backgroundColor = \"#FFF\";\r\n\/\/ \t\t\t  tocTitle.textContent = 'Daftar isi'; \/\/ Reset title\r\n\/\/ \t\t\t\ttoc.style.paddingBottom = '24px';\r\n\/\/ \t\t\t \tif(window.innerWidth < 767){\r\n\/\/ \t\t\t\t\ttoc.style.width = `${tocParent.offsetWidth}px`; \/\/ Set width to match the parent element\r\n\/\/ \t\t\t\t\ttoc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\/\/ \t\t\t\t}\r\n\/\/ \t\t\t}\r\n\/\/ \t\t  });\r\n\r\n\/\/ \t\t  \/\/ Close TOC when a link inside it is clicked\r\n\/\/ \t\t  var tocLinks = document.querySelectorAll(\"#toc .list a\");\r\n\/\/ \t\t  tocLinks.forEach(function(link) {\r\n\/\/ \t\t\tlink.addEventListener(\"click\", function() {\r\n\/\/ \t\t\t  var panel = document.querySelector(\"#toc .list\");\r\n\/\/ \t\t\t  panel.style.height = '0px'; \/\/ Set height to 0 for full collapse\r\n\/\/ \t\t\t  icon.style.transform = \"rotate(180deg)\";\r\n\/\/ \t\t\t  toc.style.backgroundColor = \"#FFF\";\r\n\/\/ \t\t\t});\r\n\/\/ \t\t  });\r\n\/\/ \t\t});\r\n\r\n\/\/ START new JS for ToC improvements\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n  const toc = document.querySelector('#toc');\r\n  const footer = document.querySelector('.td-footer-template-wrap');\r\n  const tocParent = toc.parentElement;\r\n  const divTop = tocParent.getBoundingClientRect().top + window.pageYOffset;\r\n  const tocHeight = toc.offsetHeight;\r\n  const triggerPoint = divTop + tocHeight + 1750;\r\n\tconsole.log(triggerPoint)\r\n  const footerHeight = footer.offsetHeight;\r\n  const triggerFooterPoint = footer.getBoundingClientRect().top + window.pageYOffset - footerHeight*3;\r\n  const phtoc = document.querySelector('#placeholder-toc');\r\n  const headers = document.querySelectorAll('.td-post-content h2');\r\n  const navLinks = document.querySelectorAll('#toc-list a');\r\n  \r\n  const panel2 = document.querySelector(\"#toc .list\");\r\n  const icon = document.querySelector(\".toc-icon\");\r\n  const tocTitle = document.querySelector('#toc-title');\r\n\r\n  let activeLink = null;\r\n  let userClosedTOC = false; \/\/ Flag user menutup TOC\r\n\r\n  function handleScroll() {\r\n    const windowTop = window.pageYOffset || document.documentElement.scrollTop;\r\n    let currentHeader = '';\r\n\r\n    \/\/ Update TOC title sesuai header yang terlihat\r\n    headers.forEach(header => {\r\n      const headerTop = header.offsetTop;\r\n      const headerHeight = header.clientHeight;\r\n      if(window.innerWidth < 767){\r\n        tocTitle.textContent = 'Daftar Isi'; \r\n      } else {\r\n        if (window.scrollY >= (headerTop - headerHeight + 1750)) {\r\n          const currentHeaderId = header.getAttribute('id');\r\n          const currentHeaderText = document.getElementById(currentHeaderId).textContent;\r\n          tocTitle.textContent = currentHeaderText;\r\n          currentHeader = currentHeaderId;\r\n        }\r\n      }\r\n    });\r\n\r\n    navLinks.forEach(link => {\r\n      link.classList.remove('active');\r\n      if(currentHeader && link.getAttribute('href').includes(currentHeader)) {\r\n        link.classList.add('active');\r\n      }\r\n    });\r\n\r\n    if (windowTop > triggerPoint) {\r\n      if (!toc.classList.contains('sticky')) {\r\n        phtoc.style.display = \"block\";\r\n        toc.classList.add('sticky');\r\n        toc.style.width = `${tocParent.offsetWidth}px`;\r\n        toc.style.backgroundColor = \"#FFF\";\r\n        \/\/ Saat sticky, TOC otomatis tertutup\r\n        panel2.style.height = '0px';\r\n        icon.style.transform = \"rotate(180deg)\";\r\n        userClosedTOC = true; \/\/ Set flag supaya tidak terbuka saat scroll\r\n      }\r\n      \r\n      if(window.innerWidth < 767){\r\n        tocTitle.textContent = 'Daftar Isi'; \r\n        toc.style.width = '150px';\r\n      }\r\n\r\n    } else {\r\n      toc.classList.remove('sticky');\r\n      phtoc.style.display = \"none\";\r\n      toc.style.width = 'unset';\r\n      toc.style.backgroundColor = \"#FFF\";\r\n      tocTitle.textContent = 'Daftar isi'; \r\n\r\n      \/\/ Kembalikan panel jika user belum menutup manual\r\n      if(!userClosedTOC) {\r\n        panel2.style.height = panel2.scrollHeight + \"px\";\r\n        icon.style.transform = \"rotate(0deg)\";\r\n      }\r\n    }\r\n  }\r\n\r\n  window.addEventListener('scroll', handleScroll);\r\n  handleScroll();\r\n\r\n  \/\/ Toggle TOC saat user klik\r\n  const tocHeader = document.querySelector(\"#toc .header\");\r\n  tocHeader.addEventListener(\"click\", function() {\r\n    const panel = panel2;\r\n    if (panel.style.height !== '0px') {\r\n      panel.style.height = '0px';\r\n      icon.style.transform = \"rotate(180deg)\";\r\n      userClosedTOC = true;\r\n    } else {\r\n      panel.style.height = panel.scrollHeight + \"px\";\r\n      icon.style.transform = \"rotate(0deg)\";\r\n      userClosedTOC = false;\r\n    }\r\n  });\r\n\r\n  \/\/ Close TOC saat link diklik\r\n  document.querySelectorAll(\"#toc .list a\").forEach(link => {\r\n    link.addEventListener(\"click\", function() {\r\n      panel2.style.height = '0px';\r\n      icon.style.transform = \"rotate(180deg)\";\r\n      userClosedTOC = true;\r\n    });\r\n  });\r\n});\r\n\/\/ END new JS for ToC improvements\r\n\r\n\t\r\n\/\/ \tmake the heading at the center of the viewport\r\n\/\/ \tdocument.addEventListener('DOMContentLoaded', function() {\r\n\/\/     \/\/ Add click event listener to all links in the TOC list\r\n\/\/     document.querySelectorAll('#toc-list a').forEach(anchor => {\r\n\/\/         anchor.addEventListener('click', function (e) {\r\n\/\/             e.preventDefault(); \/\/ Prevent the default behavior of jumping to the anchor\r\n\/\/ \/\/ \t\t\tconsole.log(\"prevent default\");\r\n\/\/             const targetId = this.getAttribute('href').substring(1); \/\/ Get the ID of the target element\r\n\/\/             const targetElement = document.getElementById(targetId); \/\/ Get the target element\r\n\r\n\/\/             if (targetElement) {\r\n\/\/                 const headerHeight = document.querySelector('#toc .header').offsetHeight; \/\/ Get the height of the fixed header\r\n\/\/                 const windowHeight = window.innerHeight; \/\/ Get the height of the viewport\r\n\/\/                 const targetOffset = targetElement.offsetTop; \/\/ Get the top offset of the target element\r\n\/\/                 const scrollTo = targetOffset + (windowHeight \/ 2) + (headerHeight); \/\/ Calculate the scroll position to center the target element\r\n\r\n\/\/                 \/\/ Scroll to the calculated position smoothly\r\n\/\/                 window.scrollTo({\r\n\/\/                     top: scrollTo,\r\n\/\/                     behavior: 'smooth'\r\n\/\/                 });\r\n\/\/             }\r\n\/\/         });\r\n\/\/     });\r\n\/\/ });\r\n<\/script>\r\n\r\n<script>\r\n    \/\/ Scrollspy function to highlight the active TOC item based on the scroll position\r\n  function scrollSpy(tocClass) {\r\n    const scrollPosition = window.scrollY;\r\n\r\n    \/\/ Find the active h2 and h3 headings based on their position in the corresponding TOC\r\n    let activeH2 = null;\r\n    let activeH3 = null;\r\n\r\n    const tocItems = document.querySelectorAll(`.${tocClass} li`);\r\n    tocItems.forEach(item => {\r\n      const a = item.querySelector('a');\r\n      if (!a) return;\r\n      const href = a.getAttribute('href');\r\n      const targetId = href.substring(1); \/\/ Remove the '#' from the href to get the target ID\r\n      const targetElement = document.getElementById(targetId);\r\n      if (!targetElement) return;\r\n\r\n      const targetTop = targetElement.getBoundingClientRect().top + scrollPosition;\r\n      const nextItem = item.nextElementSibling;\r\n      const nextTop = nextItem ? nextItem.getBoundingClientRect().top + scrollPosition : Infinity;\r\n\r\n      if (targetTop <= scrollPosition + 150) {\r\n        if (a.parentElement.parentElement === tocItems) {\r\n          \/\/ The h2 heading is at the root level of the TOC\r\n          activeH2 = { id: targetId, level: 'h2' };\r\n        } \r\n\t\t  else {\r\n          \/\/ The h3 heading is nested under an h2 heading\r\n          const parentH2 = a.parentElement.parentElement.previousElementSibling;\r\n          if (parentH2) {\r\n            const h2Link = parentH2.querySelector('a');\r\n            if (h2Link) {\r\n              const h2Href = h2Link.getAttribute('href');\r\n              const h2Id = h2Href.substring(1);\r\n              activeH2 = { id: h2Id, level: 'h2' };\r\n            }\r\n          }\r\n          activeH3 = { id: targetId, level: 'h3' };\r\n        }\r\n      }\r\n\r\n      if (targetTop > scrollPosition + 150 && nextTop > scrollPosition + 150 && !activeH3) {\r\n        \/\/ Reset the activeH2 when there are no more active h3 headings\r\n        activeH2 = null;\r\n      }\r\n    });\r\n\r\n    \/\/ Update the active state for the TOC items\r\n    tocItems.forEach(item => {\r\n      item.classList.remove('active');\r\n      const a = item.querySelector('a');\r\n      if (a) {\r\n        const href = a.getAttribute('href');\r\n        const targetId = href.substring(1);\r\n        if ((activeH2 && activeH2.id === targetId) || (activeH3 && activeH3.id === targetId)) {\r\n          item.classList.add('active');\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  \/\/ Call scrollSpy for each TOC on window scroll\r\n  const tocClasses = ['list_toc', 'list_toc_float']; \/\/ Add other TOC class names here if you have more than two instances\r\n  tocClasses.forEach(tocClass => {\r\n    window.addEventListener('scroll', () => scrollSpy(tocClass));\r\n  });\r\n<\/script>\r\n\r\n<!-- ToC List for desktop side bar, diganti jadi inject by php, di code snippet \"Sidebar Accordion\" -->\r\n<!-- <script>\r\n\tdocument.addEventListener(\"DOMContentLoaded\", function() {\r\n\r\n        \/\/ Fungsi untuk membuat nested list\r\n        function createNestedList(parentNode, children) {\r\n            if (children.length === 0) return;\r\n\r\n            const nestedUl = document.createElement('ul');\r\n            children.forEach(child => {\r\n                const nestedLi = document.createElement('li');\r\n                const nestedA = document.createElement('a');\r\n                nestedA.textContent = child.title;\r\n                nestedA.href = `#${child.id}`;\r\n                nestedLi.appendChild(nestedA);\r\n                nestedUl.appendChild(nestedLi);\r\n\r\n                if (child.children.length > 0) {\r\n                    createNestedList(nestedLi, child.children);\r\n                }\r\n            });\r\n\r\n            parentNode.appendChild(nestedUl);\r\n        }\r\n\r\n        \/\/ Membuat objek untuk menyimpan daftar h2 dan h3 beserta judulnya\r\n        const headings = [];\r\n\r\n           \/\/ Mengambil semua elemen h2 dan h3\r\n        \/\/ Mengambil semua elemen h2 dan h3\r\n\t\tconst elements = document.querySelectorAll('.td-post-content h2');\r\n\r\n\t\t\tfunction newFormatId(text) {\r\n\t\t\t\tif(text.toLowerCase() === \"key takeaways\") {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tconst result = text.toLowerCase()\r\n\t\t\t\t.trim()\r\n\t\t\t\t.replace(\/[^\\w\\s-]\/g, '')  \/\/ hapus tanda baca\r\n\t\t\t\t.replace(\/\\s+\/g, '-'); \/\/ ganti spasi jadi \"-\"\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\r\n\t\telements.forEach(element => {\r\n\t\t\tif (element.tagName === 'H2') {\r\n\t\t\t\tconst id = newFormatId(element.textContent); \/\/ Hasilkan ID baru\r\n\t\t\t\telement.id = id; \/\/ Tetapkan ID ke elemen h2\r\n\t\t\t\tif (element.textContent.toLowerCase() === \"key takeaways\") {return;} \/\/ Kalau Key Takeaways, jangan dimasukin\r\n\t\t\t\theadings.push({ level: 'h2', id: id, title: element.textContent, children: [] });\r\n\t\t\t} else if (element.tagName === 'H3') {\r\n\t\t\t\tconst id = newFormatId(element.textContent); \/\/ Hasilkan ID baru\r\n\t\t\t\telement.id = id; \/\/ Tetapkan ID ke elemen h3\r\n\t\t\t\tif (headings.length > 0) {\r\n\t\t\t\t\theadings[headings.length - 1].children.push({ level: 'h3', id: id, title: element.textContent, children: [] });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n       \/\/ Membuat list HTML dari objek headings\r\n\t\tconst ul = document.getElementById('list_toc');\r\n\t\tlet currentUl = ul;\r\n\t\theadings.forEach(heading => {\r\n\t\t\tconst li = document.createElement('li');\r\n\t\t\tconst a = document.createElement('a');\r\n\t\t\ta.textContent = heading.title;\r\n\t\t\ta.href = `#${heading.id}`; \/\/ Gunakan ID yang baru dihasilkan\r\n\t\t\tli.appendChild(a);\r\n\r\n\t\t\tif (heading.level === 'h2') {\r\n\t\t\t\tcurrentUl = li;\r\n\t\t\t\tul.appendChild(li);\r\n\t\t\t} else if (heading.level === 'h3') {\r\n\t\t\t\tif (!currentUl.lastElementChild || currentUl.lastElementChild.tagName !== 'UL') {\r\n\t\t\t\t\tconst nestedUl = document.createElement('ul');\r\n\t\t\t\t\tcurrentUl.appendChild(nestedUl);\r\n\t\t\t\t\tcurrentUl = nestedUl;\r\n\t\t\t\t}\r\n\t\t\t\tcurrentUl.appendChild(li);\r\n\t\t\t}\r\n\r\n\t\t\tcreateNestedList(li, heading.children);\r\n\t\t});\r\n\t\t\/\/ Dapatkan elemen ul dengan id 'list_toc'\r\n\t\tconst ulFloat = document.getElementById('list_toc');\r\n\r\n\t\t\/\/ Dapatkan isi (child elements) dari ul dengan id 'list_toc'\r\n\t\tconst clonedChildren = ulFloat.cloneNode(true).children;\r\n\r\n\t\t\/\/ Dapatkan elemen ul dengan id 'list_toc_float'\r\n\t\tconst ulToc = document.getElementById('list_toc_float');\r\n\r\n\t\t\/\/ Tambahkan isi yang telah didapatkan dari 'list_toc' ke ul dengan id 'list_toc_float'\r\n\t\tulToc.append(...clonedChildren);\r\n\r\n\r\n        \/\/ Fungsi untuk mengambil tinggi navbar\r\n\t\tfunction getNavbarHeight() {\r\n\t\t\tconst navbar = document.getElementById('tdi_34');\r\n\t\t\treturn navbar ? navbar.offsetHeight : 0;\r\n\t\t}\r\n\r\n\t\t\/\/ Fungsi untuk menambahkan offset posisi scroll\r\n\t\tfunction scrollToElementWithOffset(elementId) {\r\n\t\t\tconst element = document.getElementById(elementId);\r\n\t\t\tif (element) {\r\n\t\t\t\tconst offset = getNavbarHeight();\r\n\t\t\t\tconst elementPosition = element.getBoundingClientRect().top;\r\n\t\t\t\tconst offsetPosition = elementPosition - offset - 40;\r\n\r\n\t\t\t\twindow.scrollBy({\r\n\t\t\t\t\ttop: offsetPosition,\r\n\t\t\t\t\tbehavior: 'smooth'\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\/\/ Fungsi untuk menangani klik pada tautan judul\r\n\t\tfunction handleTitleClick(event) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tconst href = event.target.getAttribute('href').substr(1);\r\n\t\t\tscrollToElementWithOffset(href);\r\n\t\t}\r\n\r\n\t\t\/\/ Tambahkan event listener untuk semua tautan judul\r\n\t\tconst titleLinks = document.querySelectorAll('a[href^=\"#\"]');\r\n\t\ttitleLinks.forEach(link => {\r\n\t\t\tlink.addEventListener('click', handleTitleClick);\r\n\t\t});\r\n\t\t\r\n\t});\r\n    <\/script> -->\r\n<\/span><span style=\"font-weight: 400;\">\r\n\r\n<script>\r\n    \/\/ check which image to use based on screensize\r\n    document.addEventListener(\"DOMContentLoaded\", function() {\r\n        function updateImageSource() {\r\n            var images = document.querySelectorAll('.responsive-image-banner');\r\n            var screenWidth = window.innerWidth;\r\n\r\n            images.forEach(function(img) {\r\n                var mobileSrc = img.getAttribute('data-mobile-src');\r\n                var desktopSrc = img.getAttribute('data-desktop-src');\r\n\r\n                if (screenWidth < 576 && mobileSrc) {\r\n                    img.setAttribute('src', mobileSrc);\r\n                } else {\r\n                    img.setAttribute('src', desktopSrc);\r\n                }\r\n            });\r\n        }\r\n\r\n        \/\/ Initial check\r\n        updateImageSource();\r\n\r\n        \/\/ Update on resize\r\n        window.addEventListener('resize', updateImageSource);\r\n    });\r\n<\/script><\/span><\/p>\n<h2><b>Apa itu <span id=\"absensi-face-recognition\">Absensi <\/span><\/b><b>Face Recognition<\/b><b>?<\/b><\/h2>\n<p>Absensi face recognition merupakan metode absensi biometrik yang memverifikasi identitas karyawan lewat pengenalan wajah. Wajah karyawan didaftarkan lebih dulu untuk membentuk template digital, kemudian <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/software-absensi-karyawan\/\">sistem mencocokkan template<\/a> tersebut saat check-in\/check-out dan mencatat waktu kehadiran.<\/p>\n<h2><strong>Cara Kerja Sistem Absensi Face Recognition<\/strong><\/h2>\n<video width=\"100%\" height=\"100%\" autoplay loop muted disableRemotePlayback playsinline>\r\n\t<source src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/06\/face-recognition.mp4\" type=\"video\/mp4\">\r\n<\/video>\r\n\n<p>Cara kerja absensi face recognition terdiri dari dua tahap:<\/p>\n<ol>\n<li>pendaftaran (enrollment), lalu<\/li>\n<li>pencocokan saat absen (verification).<\/li>\n<\/ol>\n<p>Pada tahap pendaftaran, sistem mengambil beberapa foto atau video singkat wajah karyawan, lalu membentuk template digital (embedding\/faceprint) dan menyimpannya di database.<\/p>\n<p>Saat karyawan melakukan absensi, kamera menangkap wajah, sistem mendeteksi dan merapikan posisi wajah (alignment), lalu membuat embedding baru untuk dibandingkan dengan data yang tersimpan.<\/p>\n<p>Sistem menghitung tingkat kemiripan dengan ambang (threshold) tertentu: jika melewati ambang, identitas dianggap cocok dan absensi tercatat. Untuk mengurangi kecurangan, banyak <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/attendance-system\/\">attendance system<\/a> menambahkan liveness detection agar foto atau video tidak mudah dipakai untuk mengecoh absensi<\/p>\n<style>\r\n.cta-in-article-image .desktop-banner{\r\n    display: none;\r\n    text-align: center;\r\n}\r\n.cta-in-article-image .desktop-mobile{\r\n    display: block;\r\n    text-align: center;\r\n    width: 100%;\r\n}\r\n\t.cta-in-article a {\r\n\t\tfont-size: 0px !important;\r\n\t\tcolor: #fff; \r\n\t\tpadding: 0px !important; \r\n\t\tborder-radius: 0px !important; \r\n\t\tdisplay: block !important; \r\n\t\ttext-decoration: none; \r\n\t}\r\n\t\r\n\t.cta-in-article {\r\n\t\tmargin: 0px !important;\r\n\t\tpadding: 0px !important;\r\n\t\tbox-shadow: none !important;\r\n\t}\r\n\t\r\n@media (min-width: 650px) {\r\n    .cta-in-article-image .desktop-banner {\r\n        display: block!important;\r\n    }\r\n}\r\n@media (min-width: 650px) {\r\n   .cta-in-article-image .desktop-mobile {\r\n        display: none!important;\r\n    }\r\n}\r\n<\/style>\r\n<div class=\"cta-in-article-image\">\r\n\t<a href=\"https:\/\/www.hashmicro.com\/id\/offer\/download-skema-harga-software-erp?blog&utm_source=blog&medium=banner-article\" target=\"_blank\" rel=\"noopener\">\r\n\t\t<div id=\"desktop-banner-container\">\r\n\t\t\t<div class=\"desktop-banner\">\r\n\t\t\t\t<img decoding=\"async\" src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/02.Skema-Harga-web-resized.webp\" alt=\"download skema harga software erp\">\r\n\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t<div id=\"mobile-banner-container\">\r\n\t\t\t<div class=\"desktop-mobile\">\r\n\t\t\t\t<img decoding=\"async\" width=\"372\" height=\"465\" src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/02.-Skema-Harga-Mobile-372px.webp\" alt=\"download skema harga software erp\">\r\n\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t<\/a>\r\n<\/div>\n<h2><b>Kelebihan dan Kekurangan Absensi <\/b><b>Face Recognition<\/b><b> bagi Perusahaan<\/b><\/h2>\n<p>Face recognition memang terdengar modern, tapi apakah benar lebih efektif untuk absensi perusahaan? Berikut kelebihan dan kekurangannya dari sisi operasional dan kontrol.<\/p>\n<div style=\"width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; padding: 4px 1px;\">\n<table style=\"width: 100%; min-width: 680px; border-collapse: separate; border-spacing: 0; table-layout: fixed; font-family: ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif; background: #fff; border: 1px solid #e5e7eb; border-radius: 12px; box-shadow: 0 6px 18px rgba(2,6,23,.06);\">\n<thead>\n<tr>\n<th style=\"width: 50%; text-align: left; padding: 10px 12px; color: #fff; background: linear-gradient(135deg,#14532d,#16a34a); border-top-left-radius: 12px; font-size: 13px; font-weight: bold; letter-spacing: .1px;\">\u00a0Kelebihan<\/th>\n<th style=\"width: 50%; text-align: left; padding: 10px 12px; color: #fff; background: linear-gradient(135deg,#7f1d1d,#ef4444); border-top-right-radius: 12px; font-size: 13px; font-weight: bold; letter-spacing: .1px;\">Kekurangan<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding: 10px 12px; vertical-align: top; border-top: 1px solid #eef2f7; background: #fff;\">\n<div style=\"font-weight: bold; color: #0f172a; margin-bottom: 4px; font-size: 13px;\">Check-in cepat, tanpa kartu\/PIN<\/div>\n<div style=\"color: #475569; font-size: 12.5px; line-height: 1.4;\">Absen lebih ringkas karena identitas diverifikasi lewat kamera.<\/div>\n<\/td>\n<td style=\"padding: 10px 12px; vertical-align: top; border-top: 1px solid #eef2f7; background: #fff;\">\n<div style=\"font-weight: bold; color: #0f172a; margin-bottom: 4px; font-size: 13px;\">Dipengaruhi kondisi lapangan<\/div>\n<div style=\"color: #475569; font-size: 12.5px; line-height: 1.4;\">Cahaya, sudut kamera, masker\/kacamata, dan kualitas perangkat dapat memicu gagal verifikasi.<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 10px 12px; vertical-align: top; border-top: 1px solid #eef2f7; background: #f8fafc;\">\n<div style=\"font-weight: bold; color: #0f172a; margin-bottom: 4px; font-size: 13px;\">Tekan \u201ctitip absen\u201d<\/div>\n<div style=\"color: #475569; font-size: 12.5px; line-height: 1.4;\">Identitas terikat ke wajah; makin kuat bila ada liveness detection.<\/div>\n<\/td>\n<td style=\"padding: 10px 12px; vertical-align: top; border-top: 1px solid #eef2f7; background: #f8fafc;\">\n<div style=\"font-weight: bold; color: #0f172a; margin-bottom: 4px; font-size: 13px;\">Risiko spoof tanpa anti-spoof<\/div>\n<div style=\"color: #475569; font-size: 12.5px; line-height: 1.4;\">Foto\/video bisa mengecoh sistem jika liveness tidak tersedia atau lemah.<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 10px 12px; vertical-align: top; border-top: 1px solid #eef2f7; background: #fff;\">\n<div style=\"font-weight: bold; color: #0f172a; margin-bottom: 4px; font-size: 13px;\">Rekap real-time untuk HR &amp; payroll<\/div>\n<div style=\"color: #475569; font-size: 12.5px; line-height: 1.4;\">Telat\/pulang cepat\/shift\/lembur lebih mudah ditarik untuk proses lanjutan.<\/div>\n<\/td>\n<td style=\"padding: 10px 12px; vertical-align: top; border-top: 1px solid #eef2f7; background: #fff;\">\n<div style=\"font-weight: bold; color: #0f172a; margin-bottom: 4px; font-size: 13px;\">False reject\/accept tetap mungkin<\/div>\n<div style=\"color: #475569; font-size: 12.5px; line-height: 1.4;\">Perlu pengaturan threshold + prosedur saat verifikasi gagal.<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 10px 12px; vertical-align: top; border-top: 1px solid #eef2f7; background: #f8fafc;\">\n<div style=\"font-weight: bold; color: #0f172a; margin-bottom: 4px; font-size: 13px;\">Audit trail lebih rapi<\/div>\n<div style=\"color: #475569; font-size: 12.5px; line-height: 1.4;\">Catatan waktu\/perangkat\/lokasi (jika aktif) membantu kontrol internal.<\/div>\n<\/td>\n<td style=\"padding: 10px 12px; vertical-align: top; border-top: 1px solid #eef2f7; background: #f8fafc;\">\n<div style=\"font-weight: bold; color: #0f172a; margin-bottom: 4px; font-size: 13px;\">Isu privasi &amp; kepatuhan<\/div>\n<div style=\"color: #475569; font-size: 12.5px; line-height: 1.4;\">Butuh aturan persetujuan, akses, keamanan, retensi, dan penghapusan data biometrik.<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 10px 12px; vertical-align: top; border-top: 1px solid #eef2f7; background: #fff; border-bottom-left-radius: 12px;\">\n<div style=\"font-weight: bold; color: #0f172a; margin-bottom: 4px; font-size: 13px;\">Skalabel untuk multi-lokasi<\/div>\n<div style=\"color: #475569; font-size: 12.5px; line-height: 1.4;\">Satu database karyawan dapat dipakai lintas cabang\/site.<\/div>\n<\/td>\n<td style=\"padding: 10px 12px; vertical-align: top; border-top: 1px solid #eef2f7; background: #fff; border-bottom-right-radius: 12px;\">\n<div style=\"font-weight: bold; color: #0f172a; margin-bottom: 4px; font-size: 13px;\">Butuh infrastruktur &amp; SOP downtime<\/div>\n<div style=\"color: #475569; font-size: 12.5px; line-height: 1.4;\">Koneksi\/listrik\/kamera memengaruhi pengalaman; perlu mode cadangan (PIN\/manual approval).<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div style=\"margin-top: 8px; font-family: ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif; font-size: 12px; color: #64748b; line-height: 1.45;\"><span style=\"display: inline-block; padding: 5px 9px; background: #f1f5f9; border: 1px solid #e2e8f0; border-radius: 999px;\">Tip: siapkan mode cadangan + kebijakan retensi data biometrik.<\/span><\/div>\n<\/div>\n<h2 data-start=\"147\" data-end=\"203\"><strong>Celah Kesalahan dalam Sistem Absensi Face Recognition<\/strong><\/h2>\n<p data-start=\"132\" data-end=\"352\">Meski lebih modern, sistem absensi face recognition tetap memiliki potensi kesalahan jika penerapannya kurang tepat. Kualitas kamera dan pencahayaan yang buruk dapat membuat sistem gagal mengenali wajah secara konsisten.<\/p>\n<p data-start=\"354\" data-end=\"532\">Perubahan tampilan seperti penggunaan masker, kacamata, atau gaya rambut juga dapat memengaruhi akurasi, terutama jika sistem tidak mendukung pembaruan data wajah secara berkala.<\/p>\n<p data-start=\"534\" data-end=\"708\">Selain itu, absensi face recognition yang tidak terintegrasi dengan <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/software-attendance-management\/\">sistem HR<\/a> dan payroll berisiko menimbulkan ketidaksinkronan data, sehingga masih memerlukan proses manual.<\/p>\n<p data-start=\"710\" data-end=\"850\" data-is-last-node=\"\" data-is-only-node=\"\">Oleh karena itu, perusahaan perlu memilih sistem yang andal, mudah dikonfigurasi, dan terintegrasi agar risiko kesalahan dapat diminimalkan.<\/p>\n<p data-start=\"710\" data-end=\"850\" data-is-last-node=\"\" data-is-only-node=\"\"><style>\r\n\t#baca-juga {\r\n\t\tpadding: 16px;\r\n\t\tbackground-color: #f7eaea;\r\n\t\tborder-left: 3px solid #af2828;\r\n\t\tfont-weight: 500;\r\n\t\tmargin-bottom: 26px;\r\n\t}\r\n\t\r\n\t#baca-juga a {\r\n\t\tcolor: #af2828 !important;\r\n\t\ttransition: all 0.2s ease-in-out;\r\n\t}\r\n\t\r\n\t#baca-juga a:hover {\r\n\t\tcolor: #af282880 !important;\r\n\t}\r\n<\/style>\r\n\r\n<div id=\"baca-juga\">\r\n\t<span>Baca juga: <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/tips-memilih-vendor-hris-indonesia-yang-tepat-untuk-perusahaan\/\">11 Vendor HRIS Terbaik dan Terlengkap di Indonesia (2026)<\/a><\/span>\r\n<\/div>\n<h2><b>Contoh Implementasi Sistem Pengenalan Wajah<\/b><\/h2>\n<p data-start=\"119\" data-end=\"434\">Sistem pengenalan wajah (face recognition) makin umum dipakai karena dapat membantu verifikasi identitas secara cepat, terutama pada proses yang butuh kontrol akses dan pencatatan. Selain absensi karyawan, teknologi ini juga diterapkan di berbagai kebutuhan operasional lain.<\/p>\n<p data-start=\"436\" data-end=\"462\">Berikut adalah contoh-contoh implementasinya:<\/p>\n<h3><strong data-start=\"113\" data-end=\"143\">1. Akses masuk ke suatu lokasi<\/strong><\/h3>\n<p>Face recognition dipakai untuk membatasi akses ke ruangan atau lokasi tertentu (misalnya kantor, ruang server, atau area produksi). Sistem memverifikasi wajah pengguna sebelum pintu atau gate terbuka.<\/p>\n<h3 data-start=\"259\" data-end=\"445\"><strong data-start=\"259\" data-end=\"290\">2. Verifikasi Pelanggan<\/strong><\/h3>\n<p data-start=\"259\" data-end=\"445\">Pada layanan digital, face recognition sering dipakai untuk verifikasi pengguna demi keamanan data. Contohnya saat aktivasi layanan atau registrasi akun: wajah pengguna dicocokkan dengan data identitas (misalnya foto pada KTP) untuk mengurangi risiko penyalahgunaan.<\/p>\n<h3 data-start=\"450\" data-end=\"584\"><strong data-start=\"450\" data-end=\"471\">3. Absensi sekolah<\/strong><\/h3>\n<p data-start=\"450\" data-end=\"584\">Beberapa sekolah menggunakan verifikasi wajah untuk mencatat kehadiran siswa. Cara ini membantu proses rekap hadir, terutama untuk kelas besar atau jam masuk yang padat.<\/p>\n<h3 data-start=\"589\" data-end=\"753\"><strong data-start=\"589\" data-end=\"634\">4. Pembukaan Rekening Bank<\/strong><\/h3>\n<p data-start=\"589\" data-end=\"753\">Bank dapat memakai face recognition untuk memverifikasi calon nasabah saat pembukaan rekening (online maupun di cabang). Pada beberapa kasus, verifikasi wajah juga dipakai saat login aplikasi atau saat transaksi berisiko tinggi untuk menambah lapisan keamanan.<\/p>\n<div style=\"margin: 14px 0; padding: 14px 14px 12px; border-radius: 14px; background: #fff; border: 1px solid #eee; box-shadow: 0 10px 24px rgba(2,6,23,.06); font-family: ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif; position: relative; overflow: hidden;\">\n<div style=\"position: absolute; inset: 0; background: linear-gradient(90deg,rgba(153,0,0,.10),transparent 55%); pointer-events: none;\"><\/div>\n<div style=\"position: relative; display: flex; align-items: flex-start; gap: 12px;\">\n<div style=\"width: 40px; height: 40px; border-radius: 14px; background: #990000; color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 900; font-size: 16px;\">!<\/div>\n<div style=\"min-width: 0;\">\n<div style=\"font-weight: 900; color: #0f172a; font-size: 14px; line-height: 1.2;\">Catatan sebelum implementasi<\/div>\n<div style=\"color: #475569; font-size: 12.8px; line-height: 1.5; margin-top: 6px;\">Fokus utama ada di tiga hal: kualitas enrollment, proteksi anti-spoof, dan jalur cadangan saat verifikasi gagal.<\/div>\n<div style=\"margin-top: 10px; display: flex; gap: 8px; flex-wrap: wrap;\"><span style=\"padding: 6px 10px; border-radius: 999px; background: #fff; border: 1px solid #f0d4d4; color: #990000; font-weight: 800; font-size: 12px;\">Enrollment<\/span><br \/>\n<span style=\"padding: 6px 10px; border-radius: 999px; background: #fff; border: 1px solid #f0d4d4; color: #990000; font-weight: 800; font-size: 12px;\">Liveness<\/span><br \/>\n<span style=\"padding: 6px 10px; border-radius: 999px; background: #fff; border: 1px solid #f0d4d4; color: #990000; font-weight: 800; font-size: 12px;\">SOP cadangan<\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<h2><strong>Langkah Implementasi Absensi Face Recognition<\/strong><\/h2>\n<p>Setelah tahu kelebihan dan kekurangannya, langkah berikutnya adalah memastikan implementasi berjalan stabil di lapangan. Berikut checklist praktis yang bisa Anda pakai.<\/p>\n<h3><strong>1. Tentukan skenario pemakaian dan titik absensi<\/strong><\/h3>\n<p>Pertama, tentukan apakah absensi dilakukan lewat kiosk di kantor, mobile untuk tim lapangan, atau kombinasi keduanya. Lalu, petakan area rawan sejak awal. Misalnya pintu masuk yang padat, pabrik dengan APD, proyek outdoor, sampai shift malam.<\/p>\n<h3><strong>2. Rumuskan standar pendaftaran wajah (enrollment) sejak awal<\/strong><\/h3>\n<p>Setelah skenario jelas, susun SOP enrollment yang rapi seperti pencahayaan cukup, posisi wajah jelas, sudut normal, dan ambil lebih dari satu sampel. Sebab, enrollment yang asal-asalan biasanya jadi penyebab utama gagal scan di minggu-minggu awal implementasi.<\/p>\n<h3><strong>3. Wajibkan fitur anti-kecurangan (liveness\/anti-spoof) dan siapkan SOP cadangan<\/strong><\/h3>\n<p>Berikutnya, pastikan sistem punya proteksi dari foto atau video (liveness\/anti-spoof) supaya risiko titip absen turun signifikan. Di saat yang sama, siapkan jalur cadangan saat verifikasi gagal. Misalnya PIN plus approval atasan agar operasional tetap jalan tanpa antre.<\/p>\n<h3><strong>4. Pilih vendor yang cocok dalam operasional<\/strong><\/h3>\n<p>Kalau sudah masuk tahap seleksi, fokuskan penilaian ke kebutuhan harian: dukungan multi-lokasi, aturan shift\/lembur, audit trail (waktu\u2013perangkat\u2013lokasi), dashboard rekap, dan kemampuan integrasi ke HRIS<span style=\"font-weight: 400;\"> atau <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/software-payroll-terbaik\/\">software penggajian<\/a><\/span>.<\/p>\n<h3><strong>5. Coba secara terbatas, lalu perbaiki\u00a0<\/strong><\/h3>\n<p>Kemudian, lakukan pilot di 1\u20132 departemen atau 1 lokasi dulu sebelum rollout penuh. Dari pilot ini, catat metrik sederhana seperti tingkat gagal verifikasi, waktu rata-rata check-in, kendala kamera\/pencahayaan, dan jam paling ramai. Lalu, pakai data tersebut untuk penyesuaian yang spesifik, bukan tebak-tebakan.<\/p>\n<h3><strong>6. Integrasikan ke HRIS\/payroll dan kunci alur approval<\/strong><\/h3>\n<p>Setelah alur absensi stabil, integrasikan data kehadiran ke <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/apa-itu-hris-pengertian-fungsi-hrm-software\/\">sistem HRIS dan payroll<\/a>, lembur, cuti, dan keterlambatan supaya tidak ada input ganda. Sekaligus, rapikan alur approval agar tidak muncul \u201crekap beda versi\u201d antara HR, atasan, dan karyawan.<\/p>\n<h3><strong>7. Monitoring berkala dan evaluasi kebijakan<\/strong><\/h3>\n<p>Terakhir, lakukan monitoring rutin. Kumpulkan feedback karyawan, identifikasi lokasi\/perangkat yang paling sering gagal, lalu sesuaikan threshold, kamera, atau SOP. Biasanya, pembaruan kecil yang konsisten jauh lebih efektif daripada ganti sistem besar-besaran.<\/p>\n<p>Pada akhirnya, absensi bukan sekadar catatan jam masuk dan pulang. Data kehadiran berpengaruh ke payroll, evaluasi disiplin, pengaturan shift, sampai perencanaan kapasitas tim.<\/p>\n<p>Absensi face recognition bisa jadi pilihan yang tepat jika perusahaan menyiapkan fondasinya: pendaftaran wajah yang berkualitas, proteksi anti-kecurangan, serta aturan keamanan data yang jelas.<\/p>\n<p><span style=\"font-weight: 400;\"><\/span><\/p>\n<h2><strong>Pertanyaan Seputar Absensi Face Recognition<\/strong><\/h2>\n<ul class=\"bottom_faq\">\n<li>\n<details open=\"open\">\n<summary><strong>Face recognition menggunakan metode apa?<\/strong><\/summary>\n<p>Teknologi pengenalan wajah memanfaatkan pendekatan Deep Learning. Pengembangan aplikasi ini menerapkan algoritma Convolutional Neural Network (CNN). Bahasa pemrograman yang digunakan untuk mengembangkan program ini adalah Python.<\/p>\n<\/details>\n<\/li>\n<li>\n<details open=\"open\">\n<summary><strong>Apakah facial recognition termasuk AI?<\/strong><\/summary>\n<p>Teknologi pengenalan wajah telah mengalami kemajuan pesat dan sangat terkait dengan Artificial Intelligence (AI). Dalam konteks ini, pengenalan wajah memanfaatkan AI untuk mendeteksi fitur-fitur wajah manusia, seperti mata, alis, hidung, mulut, hingga iris mata.<\/p>\n<\/details>\n<\/li>\n<li>\n<details open=\"open\">\n<summary><strong>Apa tujuan pengenalan wajah?<\/strong><\/summary>\n<p>Pengenalan wajah adalah metode untuk mengidentifikasi atau memverifikasi identitas seseorang berdasarkan fitur wajah mereka. Sistem ini dapat digunakan untuk mengenali individu dalam foto, video, atau secara langsung dalam waktu nyata.<\/p>\n<\/details>\n<\/li>\n<\/ul>\n<p><script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [{\n    \"@type\": \"Question\",\n    \"name\": \"Face recognition menggunakan metode apa?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Teknologi pengenalan wajah memanfaatkan pendekatan Deep Learning. Pengembangan aplikasi ini menerapkan algoritma Convolutional Neural Network (CNN). Bahasa pemrograman yang digunakan untuk mengembangkan program ini adalah Python.\"\n    }\n  },{\n    \"@type\": \"Question\",\n    \"name\": \"Apakah facial recognition termasuk AI?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Teknologi pengenalan wajah telah mengalami kemajuan pesat dan sangat terkait dengan Artificial Intelligence (AI). Dalam konteks ini, pengenalan wajah memanfaatkan AI untuk mendeteksi fitur-fitur wajah manusia, seperti mata, alis, hidung, mulut, hingga iris mata.\"\n    }\n  },{\n    \"@type\": \"Question\",\n    \"name\": \"Apa tujuan pengenalan wajah?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Pengenalan wajah adalah metode untuk mengidentifikasi atau memverifikasi identitas seseorang berdasarkan fitur wajah mereka. Sistem ini dapat digunakan untuk mengenali individu dalam foto, video, atau secara langsung dalam waktu nyata.\"\n    }\n  }]\n}\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Banyak perusahaan ingin absensi yang rapi, tetapi realitanya pencatatan kehadiran sering pecah ke banyak cara. Dari Google Form, chat, spreadsheet, atau rekap manual. Akibatnya, HR menghabiskan waktu untuk mengejar data, bukan mengolahnya. Teknologi biometrik seperti fingerprint bisa membantu, tetapi penerapannya kurang fleksibel untuk tim lapangan, remote, atau lokasi kerja yang berpindah-pindah. Pada beberapa kondisi, karyawan [&hellip;]<\/p>\n","protected":false},"author":162,"featured_media":146854,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[6],"tags":[],"class_list":{"0":"post-36418","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-hrm"},"acf":{"post_reviewer":""},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.1 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Absensi Face Recognition: Pengertian dan Cara Kerjanya<\/title>\n<meta name=\"description\" content=\"Face recognition adalah sistem pengenalan wajah untuk absensi kayawan. Simak artikel ini untuk mencari tahu cara kerjanya!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.hashmicro.com\/id\/blog\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\/\" \/>\n<meta property=\"og:locale\" content=\"id_ID\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pengertian dari Face Recognition dan Bagaimana Cara Kerjanya\" \/>\n<meta property=\"og:description\" content=\"Face recognition adalah sistem pengenalan wajah untuk absensi kayawan. Simak artikel ini untuk mencari tahu cara kerjanya!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hashmicro.com\/id\/blog\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\/\" \/>\n<meta property=\"og:site_name\" content=\"HashMicro Indonesia\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/hashmicro\" \/>\n<meta property=\"article:published_time\" content=\"2024-12-06T03:30:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-19T06:43:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2024\/05\/absensi-face-recognition.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"650\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Hendra Gunawan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@hashmicro\" \/>\n<meta name=\"twitter:site\" content=\"@hashmicro\" \/>\n<meta name=\"twitter:label1\" content=\"Ditulis oleh\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hendra Gunawan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimasi waktu membaca\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 menit\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\\\/\"},\"author\":{\"name\":\"Hendra Gunawan\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#\\\/schema\\\/person\\\/7eb92f40eba8b038fa552ba13cd6d88a\"},\"headline\":\"Pengertian dari Face Recognition dan Bagaimana Cara Kerjanya\",\"datePublished\":\"2024-12-06T03:30:27+00:00\",\"dateModified\":\"2026-02-19T06:43:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\\\/\"},\"wordCount\":1285,\"publisher\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/absensi-face-recognition.webp\",\"articleSection\":[\"HRM\"],\"inLanguage\":\"id\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\\\/\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\\\/\",\"name\":\"Absensi Face Recognition: Pengertian dan Cara Kerjanya\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/absensi-face-recognition.webp\",\"datePublished\":\"2024-12-06T03:30:27+00:00\",\"dateModified\":\"2026-02-19T06:43:12+00:00\",\"description\":\"Face recognition adalah sistem pengenalan wajah untuk absensi kayawan. Simak artikel ini untuk mencari tahu cara kerjanya!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\\\/#breadcrumb\"},\"inLanguage\":\"id\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/absensi-face-recognition.webp\",\"contentUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/absensi-face-recognition.webp\",\"width\":1200,\"height\":650,\"caption\":\"absensi face recognition\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pengertian dari Face Recognition dan Bagaimana Cara Kerjanya\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/\",\"name\":\"HashMicro Indonesia\",\"description\":\"Blog Software Manajemen Bisnis Indonesia #1\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"id\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#organization\",\"name\":\"HashMicro Indonesia\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/hashmicro-logo-blog.webp\",\"contentUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/hashmicro-logo-blog.webp\",\"width\":924,\"height\":121,\"caption\":\"HashMicro Indonesia\"},\"image\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/hashmicro\",\"https:\\\/\\\/x.com\\\/hashmicro\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/hashmicro\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#\\\/schema\\\/person\\\/7eb92f40eba8b038fa552ba13cd6d88a\",\"name\":\"Hendra Gunawan\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/Hendra-Gunawan-96x96.webp\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/Hendra-Gunawan-96x96.webp\",\"contentUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/Hendra-Gunawan-96x96.webp\",\"caption\":\"Hendra Gunawan\"},\"description\":\"Hendra adalah ERP Specialist senior dengan pengalaman lebih dari 6 tahun dalam implementasi dan optimasi sistem ERP di berbagai industri. Ia berspesialisasi dalam menulis artikel seputar implementasi dan integrasi modul bisnis, sistem ERP untuk manajemen operasional, dan otomatisasi proses bisnis.\",\"sameAs\":[\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/\"],\"jobTitle\":\"Hendra Gunawan - Senior Content Writer - ERP Specialist\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/author\\\/hendra-gunawan\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Absensi Face Recognition: Pengertian dan Cara Kerjanya","description":"Face recognition adalah sistem pengenalan wajah untuk absensi kayawan. Simak artikel ini untuk mencari tahu cara kerjanya!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.hashmicro.com\/id\/blog\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\/","og_locale":"id_ID","og_type":"article","og_title":"Pengertian dari Face Recognition dan Bagaimana Cara Kerjanya","og_description":"Face recognition adalah sistem pengenalan wajah untuk absensi kayawan. Simak artikel ini untuk mencari tahu cara kerjanya!","og_url":"https:\/\/www.hashmicro.com\/id\/blog\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\/","og_site_name":"HashMicro Indonesia","article_publisher":"https:\/\/www.facebook.com\/hashmicro","article_published_time":"2024-12-06T03:30:27+00:00","article_modified_time":"2026-02-19T06:43:12+00:00","og_image":[{"width":1200,"height":650,"url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2024\/05\/absensi-face-recognition.webp","type":"image\/webp"}],"author":"Hendra Gunawan","twitter_card":"summary_large_image","twitter_creator":"@hashmicro","twitter_site":"@hashmicro","twitter_misc":{"Ditulis oleh":"Hendra Gunawan","Estimasi waktu membaca":"7 menit"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hashmicro.com\/id\/blog\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\/#article","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\/"},"author":{"name":"Hendra Gunawan","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/7eb92f40eba8b038fa552ba13cd6d88a"},"headline":"Pengertian dari Face Recognition dan Bagaimana Cara Kerjanya","datePublished":"2024-12-06T03:30:27+00:00","dateModified":"2026-02-19T06:43:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\/"},"wordCount":1285,"publisher":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#organization"},"image":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2024\/05\/absensi-face-recognition.webp","articleSection":["HRM"],"inLanguage":"id"},{"@type":"WebPage","@id":"https:\/\/www.hashmicro.com\/id\/blog\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\/","url":"https:\/\/www.hashmicro.com\/id\/blog\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\/","name":"Absensi Face Recognition: Pengertian dan Cara Kerjanya","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\/#primaryimage"},"image":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2024\/05\/absensi-face-recognition.webp","datePublished":"2024-12-06T03:30:27+00:00","dateModified":"2026-02-19T06:43:12+00:00","description":"Face recognition adalah sistem pengenalan wajah untuk absensi kayawan. Simak artikel ini untuk mencari tahu cara kerjanya!","breadcrumb":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\/#breadcrumb"},"inLanguage":"id","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hashmicro.com\/id\/blog\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\/"]}]},{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.hashmicro.com\/id\/blog\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\/#primaryimage","url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2024\/05\/absensi-face-recognition.webp","contentUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2024\/05\/absensi-face-recognition.webp","width":1200,"height":650,"caption":"absensi face recognition"},{"@type":"BreadcrumbList","@id":"https:\/\/www.hashmicro.com\/id\/blog\/cara-kerja-face-recognition-pada-sistem-absensi-perusahaan\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hashmicro.com\/id\/blog\/"},{"@type":"ListItem","position":2,"name":"Pengertian dari Face Recognition dan Bagaimana Cara Kerjanya"}]},{"@type":"WebSite","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#website","url":"https:\/\/www.hashmicro.com\/id\/blog\/","name":"HashMicro Indonesia","description":"Blog Software Manajemen Bisnis Indonesia #1","publisher":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.hashmicro.com\/id\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"id"},{"@type":"Organization","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#organization","name":"HashMicro Indonesia","url":"https:\/\/www.hashmicro.com\/id\/blog\/","logo":{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2023\/11\/hashmicro-logo-blog.webp","contentUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2023\/11\/hashmicro-logo-blog.webp","width":924,"height":121,"caption":"HashMicro Indonesia"},"image":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/hashmicro","https:\/\/x.com\/hashmicro","https:\/\/www.linkedin.com\/company\/hashmicro"]},{"@type":"Person","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/7eb92f40eba8b038fa552ba13cd6d88a","name":"Hendra Gunawan","image":{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/Hendra-Gunawan-96x96.webp","url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/Hendra-Gunawan-96x96.webp","contentUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/Hendra-Gunawan-96x96.webp","caption":"Hendra Gunawan"},"description":"Hendra adalah ERP Specialist senior dengan pengalaman lebih dari 6 tahun dalam implementasi dan optimasi sistem ERP di berbagai industri. Ia berspesialisasi dalam menulis artikel seputar implementasi dan integrasi modul bisnis, sistem ERP untuk manajemen operasional, dan otomatisasi proses bisnis.","sameAs":["https:\/\/www.hashmicro.com\/id\/"],"jobTitle":"Hendra Gunawan - Senior Content Writer - ERP Specialist","url":"https:\/\/www.hashmicro.com\/id\/blog\/author\/hendra-gunawan\/"}]}},"focus_keyword":"absensi face recognition","order_j":"3","_links":{"self":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/36418","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/users\/162"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/comments?post=36418"}],"version-history":[{"count":48,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/36418\/revisions"}],"predecessor-version":[{"id":189242,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/36418\/revisions\/189242"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/media\/146854"}],"wp:attachment":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/media?parent=36418"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/categories?post=36418"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/tags?post=36418"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}