91³Ô¹ÏÍø

Watch CBS News

Retail owners using artificial intelligence to detect shoplifting in real time

PORT HURON, Mich. (CBS DETROIT) — Forbes recently  retail store owners and found that nearly four out of five lose between $500 and $2,500 a month due to shoplifting.

Some of them are turning to artificial intelligence to catch shoppers in the act.

Shoppers who feel they can sneak a buy-one-get-one-free deal past the counter might have a little more trouble doing so past a specific set of cameras. The cameras have AI recognition technology installed, alerting the owner if someone tries to grab a snack without paying for it. 

"Veesion is artificial intelligence that you plug into existing cameras to detect gestures associated with potential shoplifting. So, people putting items in the jacket, trousers, backpack or purse for example," said Veesion co-founder Benoit Koenig.

Veesion has entered 4,000 stores worldwide — 500 in the U.S. — and that number is growing.  

Its algorithm analyzes several different cameras simultaneously, looking for subtle cues in a way the human eye cannot keep up with.

"The first component is human detection with the red or green square you can see around each person," Koenig said. "The second component is called pause estimation to estimate the position of all the body parts. The third component is called object recognition to detect a backpack or purse instead of a shopping bag or shopping cart. All those components together will provide you with the probability of any gesture at any time."

Since the technology is solely analyzing body movements, Koenig says Veesion is better at avoiding bias when detecting shoplifters than those behind the counter.

"The algorithm doesn't care about what people look like, it cares about gestures. It looks at body movement and will pick up on a gesture to place an item in the jacket, in the trousers, in a backpack, or purse," he said.

If someone tried to pocket some chips without paying, Koenig said, "That will generate a small video alert on the mobile phone of the store owner in real-time so they can actually ask the client if they need help, if they need a basket so people know that they're being watched. It probably deters the attempt before it actually happens."

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=fd53910ecf4604072044ab7c46d9b028'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });