facenet-js
Version:
Face detection and recognition library using TensorFlow.js and MediaPipe along with helpful React hooks and components
1 lines • 28.1 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../../src/react/providers/FaceDetectorContext.ts","../../src/react/hooks/useFaceDetection.ts","../../src/react/hooks/useFaceSimilarity.ts","../../src/react/hooks/useWebcam.ts","../../node_modules/react/cjs/react-jsx-runtime.production.js","../../node_modules/react/cjs/react-jsx-runtime.development.js","../../node_modules/react/jsx-runtime.js","../../src/react/providers/FaceDetectorProvider.tsx"],"sourcesContent":["import { createContext } from 'react';\nimport { FaceDetector } from '../../FaceDetector';\n\nexport interface FaceDetectorContextType {\n faceDetector: FaceDetector | null;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport const FaceDetectorContext = createContext<FaceDetectorContextType | null>(null);\n","import { useContext } from 'react';\nimport { FaceDetectorContext } from '../providers/FaceDetectorContext';\n\nexport const useFaceDetector = () => {\n const context = useContext(FaceDetectorContext);\n if (!context) {\n throw new Error('useFaceDetector must be used within a FaceDetectorProvider');\n }\n return context;\n};\n","import { useMemo } from 'react';\nimport { FaceDetector } from '../../FaceDetector';\nimport { FaceSimilarityResult, EmbeddingResult } from \"../../types\";\n\nexport type FaceSimilarity = FaceSimilarityResult & {\n isMatch: boolean;\n message: string;\n};\n\n/**\n * Calculates the cosine similarity between two face embeddings.\n * @param uploadEmbedding - The embedding of the uploaded face.\n * @param webcamEmbedding - The embedding of the webcam face.\n * @param threshold - The threshold for the similarity score.\n * @returns The similarity score and a boolean indicating if the faces are a match (similarity > threshold). if no embeddings are provided, returns null.\n */\nexport const useFaceSimilarity = (\n a: EmbeddingResult | null,\n b: EmbeddingResult | null,\n threshold: number = 0.5\n): FaceSimilarity | null => {\n const similarity = useMemo(() => {\n const embeddingA = a?.embeddings?.[0];\n const embeddingB = b?.embeddings?.[0];\n if (!embeddingA || !embeddingB) return null;\n const similarity = FaceDetector.cosineSimilarity(embeddingA, embeddingB);\n return {\n similarity,\n message: `Face Similarity: ${similarity.toFixed(3)}`,\n isMatch: similarity > threshold,\n };\n }, [a, b, threshold]);\n\n return similarity;\n};\n","import { useCallback, useRef, useState } from 'react';\n\nexport const useWebcam = () => {\n const videoRef = useRef<HTMLVideoElement | null>(null);\n const [isActive, setIsActive] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const startWebcam = useCallback(async () => {\n if (!navigator.mediaDevices || !videoRef.current) {\n setError('Webcam not supported');\n return false;\n }\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ video: true });\n videoRef.current.srcObject = stream;\n setIsActive(true);\n return true;\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to access webcam');\n return false;\n }\n }, []);\n\n const stopWebcam = useCallback(() => {\n if (videoRef.current?.srcObject) {\n const stream = videoRef.current.srcObject as MediaStream;\n stream.getTracks().forEach(track => track.stop());\n videoRef.current.srcObject = null;\n }\n setIsActive(false);\n }, []);\n\n return { videoRef, isActive, error, startWebcam, stopWebcam };\n};\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n self,\n source,\n getOwner(),\n maybeKey,\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n \"react-stack-bottom-frame\": function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React[\"react-stack-bottom-frame\"].bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { ReactNode, useEffect, useMemo, useState } from 'react';\nimport { FaceDetector } from '../../FaceDetector';\nimport { FaceDetectionOptions } from '../../types';\nimport { FaceDetectorContext, FaceDetectorContextType } from './FaceDetectorContext';\n\nexport interface FaceDetectorProviderProps {\n children: ReactNode;\n options: FaceDetectionOptions;\n}\n\nexport const ImageFaceDetectorProvider = ({\n children,\n options,\n}: {\n children: ReactNode;\n options: Omit<FaceDetectorProviderProps['options'], 'mode'>;\n}) => {\n return FaceDetectorProvider({ children, options: { ...options, mode: 'IMAGE' } });\n};\n\nexport const VideoFaceDetectorProvider = ({\n children,\n options,\n}: {\n children: ReactNode;\n options: Omit<FaceDetectorProviderProps['options'], 'mode'>;\n}) => {\n return FaceDetectorProvider({ children, options: { ...options, mode: 'VIDEO' } });\n};\n\nexport const FaceDetectorProvider = ({ children, options }: FaceDetectorProviderProps) => {\n const faceDetector = useMemo(() => new FaceDetector(options), []);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n setError(null);\n\n const initializeDetector = async () => {\n console.log('Initializing face detector...');\n try {\n setIsLoading(true);\n await faceDetector.initialize();\n setError(null);\n } catch (err) {\n console.error('❌ Face detector initialization failed:', err);\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n };\n\n initializeDetector();\n }, [faceDetector]);\n\n const contextValue: FaceDetectorContextType = {\n faceDetector,\n isLoading,\n error,\n };\n\n return (\n <FaceDetectorContext.Provider value={contextValue}>{children}</FaceDetectorContext.Provider>\n );\n};\n"],"names":["createContext","useContext","useMemo","similarity","FaceDetector","useRef","useState","useCallback","jsxRuntimeModule","require$$0","require$$1","useEffect"],"mappings":"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","x_google_ignoreList":[4,5,6]}