DrawFaceLandmarks.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { FaceLandmarks } from '../classes/FaceLandmarks';
  2. import { FaceLandmarks68 } from '../classes/FaceLandmarks68';
  3. import { getContext2dOrThrow } from '../dom/getContext2dOrThrow';
  4. import { isWithFaceLandmarks } from '../factories/WithFaceLandmarks';
  5. import { drawContour } from './drawContour';
  6. var DrawFaceLandmarksOptions = /** @class */ (function () {
  7. function DrawFaceLandmarksOptions(options) {
  8. if (options === void 0) { options = {}; }
  9. var _a = options.drawLines, drawLines = _a === void 0 ? true : _a, _b = options.drawPoints, drawPoints = _b === void 0 ? true : _b, lineWidth = options.lineWidth, lineColor = options.lineColor, pointSize = options.pointSize, pointColor = options.pointColor;
  10. this.drawLines = drawLines;
  11. this.drawPoints = drawPoints;
  12. this.lineWidth = lineWidth || 1;
  13. this.pointSize = pointSize || 2;
  14. this.lineColor = lineColor || 'rgba(0, 255, 255, 1)';
  15. this.pointColor = pointColor || 'rgba(255, 0, 255, 1)';
  16. }
  17. return DrawFaceLandmarksOptions;
  18. }());
  19. export { DrawFaceLandmarksOptions };
  20. var DrawFaceLandmarks = /** @class */ (function () {
  21. function DrawFaceLandmarks(faceLandmarks, options) {
  22. if (options === void 0) { options = {}; }
  23. this.faceLandmarks = faceLandmarks;
  24. this.options = new DrawFaceLandmarksOptions(options);
  25. }
  26. DrawFaceLandmarks.prototype.draw = function (canvasArg) {
  27. var ctx = getContext2dOrThrow(canvasArg);
  28. var _a = this.options, drawLines = _a.drawLines, drawPoints = _a.drawPoints, lineWidth = _a.lineWidth, lineColor = _a.lineColor, pointSize = _a.pointSize, pointColor = _a.pointColor;
  29. if (drawLines && this.faceLandmarks instanceof FaceLandmarks68) {
  30. ctx.strokeStyle = lineColor;
  31. ctx.lineWidth = lineWidth;
  32. drawContour(ctx, this.faceLandmarks.getJawOutline());
  33. drawContour(ctx, this.faceLandmarks.getLeftEyeBrow());
  34. drawContour(ctx, this.faceLandmarks.getRightEyeBrow());
  35. drawContour(ctx, this.faceLandmarks.getNose());
  36. drawContour(ctx, this.faceLandmarks.getLeftEye(), true);
  37. drawContour(ctx, this.faceLandmarks.getRightEye(), true);
  38. drawContour(ctx, this.faceLandmarks.getMouth(), true);
  39. }
  40. if (drawPoints) {
  41. ctx.strokeStyle = pointColor;
  42. ctx.fillStyle = pointColor;
  43. var drawPoint = function (pt) {
  44. ctx.beginPath();
  45. ctx.arc(pt.x, pt.y, pointSize, 0, 2 * Math.PI);
  46. ctx.fill();
  47. };
  48. this.faceLandmarks.positions.forEach(drawPoint);
  49. }
  50. };
  51. return DrawFaceLandmarks;
  52. }());
  53. export { DrawFaceLandmarks };
  54. export function drawFaceLandmarks(canvasArg, faceLandmarks) {
  55. var faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks];
  56. faceLandmarksArray.forEach(function (f) {
  57. var landmarks = f instanceof FaceLandmarks
  58. ? f
  59. : (isWithFaceLandmarks(f) ? f.landmarks : undefined);
  60. if (!landmarks) {
  61. throw new Error('drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks<WithFaceDetection<{}>> or array thereof');
  62. }
  63. new DrawFaceLandmarks(landmarks).draw(canvasArg);
  64. });
  65. }
  66. //# sourceMappingURL=DrawFaceLandmarks.js.map