You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

faceApiPatch.js 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /* eslint-disable */
  2. // From: https://github.com/justadudewhohacks/face-api.js/issues/47
  3. // This is needed because face-api.js does not support working in a WebWorker natively
  4. // Updated Dec 1 2020 to work on latest Chrome (tested in WebWorkers on Chrome Mobile on Android / Google Pixel 3 as well)
  5. self.useWasm = false;
  6. if(!self.OffscreenCanvas) {
  7. self.useWasm = true;
  8. self.OffscreenCanvas = class OffscreenCanvas {
  9. constructor() {
  10. }
  11. }
  12. }
  13. if(!self.OffscreenCanvasRenderingContext2D) {
  14. self.OffscreenCanvasRenderingContext2D = class OffscreenCanvasRenderingContext2D {
  15. constructor() {
  16. }
  17. }
  18. }
  19. self.Canvas = self.HTMLCanvasElement = OffscreenCanvas;
  20. // self.HTMLCanvasElement.name = 'HTMLCanvasElement';
  21. // self.Canvas.name = 'Canvas';
  22. self.CanvasRenderingContext2D = OffscreenCanvasRenderingContext2D;
  23. function HTMLImageElement(){}
  24. function HTMLVideoElement(){}
  25. self.Image = HTMLImageElement;
  26. self.Video = HTMLVideoElement;
  27. function Storage () {
  28. let _data = {};
  29. this.clear = function(){ return _data = {}; };
  30. this.getItem = function(id){ return _data.hasOwnProperty(id) ? _data[id] : undefined; };
  31. this.removeItem = function(id){ return delete _data[id]; };
  32. this.setItem = function(id, val){ return _data[id] = String(val); };
  33. }
  34. class Document extends EventTarget {}
  35. self.document = new Document();
  36. self.window = self.Window = self;
  37. self.localStorage = new Storage();
  38. function createElement(element) {
  39. switch(element) {
  40. case 'canvas':
  41. let canvas = new Canvas(1,1);
  42. canvas.localName = 'canvas';
  43. canvas.nodeName = 'CANVAS';
  44. canvas.tagName = 'CANVAS';
  45. canvas.nodeType = 1;
  46. canvas.innerHTML = '';
  47. canvas.remove = () => { console.log('nope'); };
  48. return canvas;
  49. default:
  50. console.log('arg', element);
  51. break;
  52. }
  53. }
  54. document.createElement = createElement;
  55. document.location = self.location;
  56. // These are the same checks face-api.js/isBrowser does
  57. if(!typeof window == 'object') {
  58. console.warn("Check failed: window");
  59. }
  60. if(typeof document === 'undefined') {
  61. console.warn("Check failed: document");
  62. }
  63. if(typeof HTMLImageElement === 'undefined') {
  64. console.warn("Check failed: HTMLImageElement");
  65. }
  66. if(typeof HTMLCanvasElement === 'undefined') {
  67. console.warn("Check failed: HTMLCanvasElement");
  68. }
  69. if(typeof HTMLVideoElement === 'undefined') {
  70. console.warn("Check failed: HTMLVideoElement");
  71. }
  72. if(typeof ImageData === 'undefined') {
  73. console.warn("Check failed: ImageData");
  74. }
  75. if(typeof CanvasRenderingContext2D === 'undefined') {
  76. console.warn("Check failed: CanvasRenderingContext2D");
  77. }
  78. self.window = window;
  79. self.document = document;
  80. self.HTMLImageElement = HTMLImageElement;
  81. self.HTMLVideoElement = HTMLVideoElement;
  82. // These are the same checks face-api.js/isBrowser does
  83. const isBrowserCheck = typeof window === 'object'
  84. && typeof document !== 'undefined'
  85. && typeof HTMLImageElement !== 'undefined'
  86. && typeof HTMLCanvasElement !== 'undefined'
  87. && typeof HTMLVideoElement !== 'undefined'
  88. && typeof ImageData !== 'undefined'
  89. && typeof CanvasRenderingContext2D !== 'undefined';
  90. ;
  91. if(!isBrowserCheck) {
  92. throw new Error("Failed to monkey patch for face-api, face-api will fail");
  93. }